Skip navigation.

digital-nation

Blog-note d'un informaticien procrastinate...

Posts tagged with "fonction"

Microsoft Office Excel & OpenOffice.org 2++ : détecter un caractère dans une chaine

, , , ...

Il est assez facile de trouver dans une cellule un caractère via la fonction CHERCHE.
Toutefois si le caractère n'est pas trouvé, il renvoie une erreur. Problème : CHERCHE est "case sensitive" (sensible à la casse).

J'ai donc préféré utiliser la fonction TROUVE. Similaire mais non sensible à la casse.
Cependant, même problème : cela renvoie une erreur si le caractère n'est pas trouvé.

Alors après un petit quart d'heure de recherche je pense avoir trouvé une formule sympathique qui génère un texte plutôt qu'une erreur.

Posons la situation :
  • Cellule B4 : le caractère recherché,
  • Cellule B5 : la chaine de caractère dans lequel doit s'effectuer la recherche

Dans la cellule B11, se trouve la formule.

J'utilise les fonctions suivantes : SI, ESTERR, TROUVE.
Dans la suite d'idée, j'imbrique ces différentes fonctions l'une dans l'autre, dans l'ordre donné ci-dessus. Pourquoi : je pose une condition que si une erreur est trouvé dans la recherche (via la fonction TROUVE), je renvoie un texte à défaut je calcule l'emplacement du caractère. Et c'est tout.
voila l'idée que je veux.

Voila donc la formule renvoyant le bon résultat :
=SI(B4="";"0";SI(SI(ESTERR(TROUVE(B4;B5))=VRAI;"Not Find";"Find")="Find";TROUVE(B4;B5);0))

Pour vous éviter de chercher... :wink:

AutoIt : module de téléchargement

, ,

Alors que je m’amuse à développer un script d’installation automatisé pour ZazouMiniWebServer, je me dis que je peux faire partager celui-ci déjà avancé principalement sur les fonctions opérationnelles.

Nous partons alors du principe que les fichiers se trouvent sur un serveur distant, sous la même arborescence qu’il devrait se trouver afin de la reconstruire sur le PC. Bien entendu vous vous douter que ceci ne fonctionne que pour les applications indépendantes (application portable ou « standalone »).

Continuons. Après avoir hébergé votre application sous la même structure sur un espace Web, il faut maintenant que celle-ci se télécharge dans un dossier choisis par l’utilisateur tout en recréant la même structure.

Zen.

Alors je pense que la première chose que je ferais ce serait une petite GUI toute simple :
#Region ### START Koda GUI section ### Form=
$gui_Installation = GUICreate("Installation de ZLAAM", 355, 135, -1, -1)
$gp_SelectionDossier = GUICtrlCreateGroup(" Dossiers : ", 10, 16, 335, 73)
$btn_Dossier = GUICtrlCreateButton("&Dossier...", 230, 41, 110, 31, 0)
$lbl_Dossier = GUICtrlCreateLabel("Sélectionnez le dossier de téléchargement", 20, 48, 203, 17)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$btn_Installer = GUICtrlCreateButton("&Installer", 230, 96, 110, 31, 0)
GUISetState(@SW_SHOW, $gui_Installation)
#EndRegion ### END Koda GUI section ###

Par la suite, je ferais la boucle d’affichage :
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
exitScript(); Sortie du script
Case $btn_Dossier
choixDossier() ; définition du choix de dossier de l'installation
Case $btn_Installer
GUISetState(@SW_HIDE, $gui_Installation); Je cache la GUI
verifierDossier(); Vérification de la variable $u_DossierSelect
creationStructure() ; Création de la structure des répertories
verificationConnexion() ; Lancement de la vérification de connexion
telechargementComposant(); Lancement du téléchargement des différents composants
EndSwitch
WEnd
Exit

Et enfin les différentes fonctions.
Evidement une des premières fonctions à créer est le test de la connexion :
Func verificationConnexion()
ProgressSet(4, "Vérification de la connexion", "Téléchargement")
Dim $s_Ping
Sleep(1000)
$s_Ping = Ping("www.google.com", 1000)
If NOT $s_Ping Then
Dim $s_MsgPing
$s_MsgPing = MsgBox(4+32, "Information", "La vérification de la connexion semble avoir échoué, " & @CR & _
"Vérifier si vous êtes connecté et si votre pare-feu permet l'accès au réseau ; " & @CR & _
"Désirez-vous continuer ?")
If $s_MsgPing = 7 Then
abandonProcedure()
EndIf
Else
ProgressSet(4, "Connexion réussie")
Sleep(1000)
EndIf 
EndFunc

Par la suite une simple petite routine pour avoir le chemin de téléchargement et d’installation :
Func telechargementFichier($s_URIpath, $s_nomFichier, $s_pc)
Dim $s_tailleFichier, $s_URIcomplete, $s_cheminComplet
MsgBox(0, "", "Track : entrée fonction Func telechargementFichier" & @CR & _
"$s_URIpath = " & $s_URIpath & @CR & _
"$s_nomFichier = " & $s_nomFichier & @CR & _
"$s_pc = " & $s_pc)
$s_URIcomplete = $s_URI & $s_URIpath & $s_nomFichier
MsgBox(0, "", "Track : $s_URIcomplete = " & $s_URIcomplete)
$s_cheminComplet = $u_DossierSelect & "\" & StringReplace($s_URIpath, "/", "\", 0, 1) ;& $s_nomFichier
;$s_tailleFichier = InetGetSize($s_URI & $s_URIpath & $s_nomFichier); Taille du fichier à télécharger
$s_tailleFichier = InetGetSize($s_URIcomplete)
;MsgBox(0, "", "Track $s_tailleFichier = " & $s_tailleFichier & @CR & _; Tracking d'information
;"Chemin : " & $s_URI & $s_URIpath & $s_nomFichier)
MsgBox(0, "", "Track $s_tailleFichier = " & $s_tailleFichier & @CR & _
"Chemin : " & $s_URIcomplete)
If $s_tailleFichier = 0 Then; si la taille est égale à 0 alors erreur
Dim $s_msgTailleFichier
$s_msgTailleFichier = MsgBox(4+32, "Information","Un problème semble être rencontré pour le téléchargement" & @CR & _
"du fichier " & $s_nomFichier & ", désirez-vous continuer ?")
If $s_msgTailleFichier = 7 Then
MsgBox(0+16, "Erreur", "Abandons de procédure par action utilisateur ; " & @CR & _
"Veuillez reporter l'erreur suivante sur les forums : " & @CR & _ ;"Func telechargementFichier(" & $s_URIpath & "/" & $s_nomFichier & "/" & $s_pc & _
"Func telechargementFichier(" & $s_URIcomplete & " / % " & $s_pc & _
"sur la ligne " & @ScriptLineNumber & " ERROR InetGetSize = 0")
abandonProcedure()
EndIf
EndIf
;$s_destination = $u_DossierSelect & "\" & StringReplace($s_URIpath, "/", "\", 0, 1) ; Remplacement des / par \
;MsgBox(0, "", "Track $s_destination = " & $s_destination); Tracking d'information
MsgBox(0, "", "Track $s_destination = " & $s_cheminComplet)
;If NOT FileExists($s_destination) Then ; vérification de l'existance de l'arborescence
If NOT FileExists($s_cheminComplet)Then
Dim $s_msgDestination
$s_msgDestination = MsgBox(4+32, "Erreur", "Il semble que la structure de téléchargement ne soit pas correcte," & _
@CR & "Désirez-vous continuer ?")
If $s_msgDestination = 7 Then
MsgBox(0+16, "Erreur", "Abandons de procédure par action utilisateur ; " & @CR & _
"Veuillez reporter l'erreur suivante sur les forums : " & @CR & _
"Func telechargementFichier(" & $s_cheminComplet & "/ % " & $s_pc & _
"sur la ligne " & @ScriptLineNumber & " ERROR FileExists = -1 => " & $s_cheminComplet)
abandonProcedure()
EndIf
EndIf
;$s_destination = $s_destination & $s_nomFichier
;MsgBox(0, "", "Track $s_destination (2) = " & $s_destination) ; Tracking d'information
$s_cheminComplet = $s_cheminComplet & $s_nomFichier
MsgBox(0, "", "Track $s_destination (2) = " & $s_cheminComplet)

;$s_URIpath = $s_URI & $s_URIpath & $s_nomFichier
;MsgBox(0, "", "Track $s_URIpath (full) = " & $s_URIpath) ; Tracking d'information
MsgBox(0, "", "Track $s_URIpath (full) = " & $s_URIcomplete) 

; Reprise totale des variables
MsgBox(0, "", "Track" & @CR & @CR & _
"$s_URIcomplete = " & $s_URIcomplete & @CR & _
"$s_cheminComplet = " & $s_cheminComplet & @CR & _
"$s_tailleFichier = " & $s_tailleFichier & @CR)

InetGet($s_URIcomplete, $s_cheminComplet, 1, 1); Téléchargement du fichier
While @InetGetActive; Téléchargement actif
ProgressSet($s_pc, "Téléchargement " & $s_nomFichier & "(" & _; Mise à jour du Progress
@InetGetBytesRead & "/" & $s_tailleFichier & " bytes)")
Sleep(250); Attente
WEnd
EndFunc

Le tour est joué.
Bientôt le script en entier…

AutoIt : imbriquer des fonctions

, ,

Alors que le javascript permet aisément d'imbriquer des fonctions les unes dans les autres, AutoIt ne le permet pas...

Le script suivant :
function chiffre() { 
var x; 
x = prompt('Chiffre entre 0 et 10 \?', '0');
if (x > 10) { function stop() { alert('Num\éro incorrect !'); } ; stop(); }
else { function ok(){ alert('Votre numéro est \: ' + x); } ; ok(); } }

devrait être représenté en AutoIt de la manière suivante :
Func chiffre()
Dim $x
$x =InputBox("Chiffre", "Chiffre entre 0 et 10", "0", "", -1, -1,
-1, -1)
If $x > 10 Then 
Func stop() 
MsgBox(0+16, "Erreur", "Numéro Incorrect")
Exit
EndFunc
EndIf
MsgBox(0+64, "Information", "Votre chiffre est : " & $x)
Exit
EndFunc

Malheureusement cela ne fonctionne pas...

Est-ce une chose de positif pour la clarté du code ? Ou négatif aussi dans le sens de la facilité de compréhension ?
Ce sont de petites questions que je me pose.

En effet lorsque j'utilise « l'imbrication de fonction », je trouve qu'on suit « une logique de pensée directe », ce que l'on a besoin dans la condition ou la structure conditionnelle suit directement sans aller faire référence à une extériorisation ou une fonction se trouvant en fin de fichier.

Certe une facilité de lecture et de compréhension bien souvent utilisée mais aussi au détriment de la compréhension du code. Ce qui est évidement souhaitable dans un cas similaire serait de documenter le code au maximum...
Malheureusement pas fait dans tous les cas.

Pour ou contre l'imbrication de fonction ? C'est une question que je me pose... Je suis résolument pour, mais une partie de moi me dit qu'il ne faut pas le faire pour continuer à le (code) faire évoluer.
January 2010
M T W T F S S
December 2009February 2010
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31