Page 2 sur 2

Re: [R] Copier une chaîne de caractère

Posté : mer. 23 avr. 2014 22:11
par Boulanza
traitement un par un:
n1.ini
n2.ini
n3.ini
n4.ini
.
.
.
nn.ini

Re: [..] Copier une chaîne de caractère

Posté : mer. 23 avr. 2014 22:27
par mikell
?

Code : Tout sélectionner

$dir = "c:\Temp\ExportDrvpi\"
Local $hSearch = FileFindFirstFile($dir & "*.ini"), $res
While 1
        $sFileName = FileFindNextFile($hSearch)
        $txt = FileRead($dir & $sFileName)
        $tilt = StringRegExp($txt, '\$MP=(\V+)', 3)
        If IsArray($tilt) Then
            $res = $tilt[0]
            Exitloop
        EndIf
Wend
FileClose($hSearch)
If $res = "" Then 
   Msgbox(0,"", "pas trouvé")
Else
   Msgbox(0,"", $res)
EndIf

Re: [..] Copier une chaîne de caractère

Posté : mer. 23 avr. 2014 22:35
par jguinch
Mikell, je crois qu'il voulait faire du traitement fichier par fichier, pas une recherche :roll: ...

Edit : \V+ ? Je t'avais jamais vu utilisé ça... :shock:

Re: [..] Copier une chaîne de caractère

Posté : mer. 23 avr. 2014 22:56
par mikell
Boulanza a écrit :Pour jguinch oui, effectivement je ne connais pas le nom du fichier, mais par contre je connais son emplacement dans le fichier temporaire :c:\Temp\ExportDrvpi\*.ini
J'en ai conclu qu'il cherchait une chaine dans un fichier ini de nom inconnu mais d'emplacement connu, mais vu la clarté de l'énoncé c'est vrai que je peux me tromper :roll:

\V+ j'utilise ça des fois comme "tout jusqu'à la fin de la ligne" (non- CR, LF, VT, FF)

Re: [..] Copier une chaîne de caractère

Posté : mer. 23 avr. 2014 23:09
par Boulanza
Oui mikell avec votre scripte on connait l'adresse exacte du fichier.ini bonne idée.
Celle de la doc l'est aussi pour un traitement en serie:
► Afficher le texte

Maintenant, ce qui reste à faire c'est d'intégrer cette application dans le script de scorp84 !

Re: [..] Copier une chaîne de caractère

Posté : mer. 23 avr. 2014 23:29
par jchd
mikell,

Tu as aussi \N* un poil plus proche de la spécification "tout jusqu'à la fin de la ligne".

Re: [R] Copier une chaîne de caractère

Posté : jeu. 24 avr. 2014 10:37
par Boulanza
Bonjour,

L’avantage de ce forum AutoIt c’est que tout le monde y participe activement à la décision… Bravo…

Pour ne pas sortir de la question objet de cette aide, peut on améliorer le scripte de mikell ci-dessus pour un traitement fichier par fichier:
Script mikell
► Afficher le texte
Puis intégrer cette solution "mikell" dans le script de scorp84 afin de permetre de copier une chaîne de caractère depuis le fichier « texte 1 » et la collet à la place d’une autre chaîne de caractère se trouvant dans un autre fichier « texte 2 ».
Script scorp84
► Afficher le texte
Cordialement.

Re: [..] Copier une chaîne de caractère

Posté : jeu. 24 avr. 2014 14:10
par Boulanza
Bonjour,
Je suis arrivé à intégrer les deux scriptes, mais j'ai un souci avec la fonction:
;Remplacement de chaîne
$line=StringReplace($line,"????",$chaine)
► Afficher le texte
svp, pouvriez vous me guider à trouver mon erreur merci.

Re: [..] Copier une chaîne de caractère

Posté : jeu. 24 avr. 2014 14:39
par mikell
Si le problème avait dès le début été clairement énoncé avec précision, il aurait été résolu en 3 ou 4 messages au lieu des 28 actuels ^^

Code : Tout sélectionner

Local $file2 = FileOpen($sFilePath,2)
Le mode 2 efface tout le contenu du fichier avant écriture, tu es sûr que c'est ce que tu veux ?
FileWrite
Write text/data to the end of a previously opened file.
ça serait pas plutôt ça ?

@jchd
C'est vrai mais j'ai découvert \N sur le tard dans ta nouvelle doc, après on a des habitudes tu sais ce que c'est... et franchement entre \V et \N la différence n'est pas outrageuse même si effectvt \N est approprié

Re: [..] Copier une chaîne de caractère

Posté : jeu. 24 avr. 2014 15:00
par jchd
Mon intention n'est certainement pas de t'outrager !
Je constate au contraire que tu interviens de plus en plus -à bon escient et ici ou ailleurs- dans les fils mettant en oeuvre des expressions régulières, ce qui est tout à fait à ton honneur.

Re: [..] Copier une chaîne de caractère

Posté : jeu. 24 avr. 2014 15:53
par Boulanza
je compte sur votre compréhension...
Mikell : Le mode 2 efface tout le contenu du fichier avant écriture, tu es sûr que c'est ce que tu veux ?
RE : Oui, il faut garder le mode 2

Re: [..] Copier une chaîne de caractère

Posté : jeu. 24 avr. 2014 16:19
par mikell
@jchd
Boudu non, c'est juste que j'ai bien conscience d'être un newbie encore hésitant en matière d'expressions régulières, qui sont un labyrinthe dans lequel il vaut mieux naviguer avec une forte lampe, l'exemple cy-dessus en étant une parfaite illustration :mrgreen:

Code : Tout sélectionner

.   : Matches any single character except, by default, a newline sequence
\N  : Matches any character except a newline sequence
\V  : Matches any character that is not a vertical whitespace character. (ref: \v is equivalent to "[\x0A-\x0D]" by default)

Boulanza
► Afficher le texte

Re: [..] Copier une chaîne de caractère

Posté : jeu. 24 avr. 2014 17:09
par Boulanza
Re-Bonjour mikell,
Je suis arrivé à intégrer votre premier script avec celui de scorp84, les deux scriptes répondent parfaitement à ma demande, mais j'ai un problème pour remplacer une chaîne de caractère. Voici la fonction qui ne marche pas dans le script ci-dessous:
;Remplacement de chaîne
$line=StringReplace($line,"????",$chaine)
► Afficher le texte
Cordialement.

Re: [..] Copier une chaîne de caractère

Posté : jeu. 24 avr. 2014 17:45
par mikell
ça peut-être ?

Code : Tout sélectionner

   $txt1 = FileRead("fichier1")   ; lit fichier1
   $txt1 = StringReplace($txt1, "????", $chaine)   ; remplace "????" par $chaine
   Local $file2 = FileOpen("fichier2", 2)  ; ouvre "fichier2" en écriture avec effacement  du contenu
   FileWrite($file2, $txt1)      ; écrit le nouveau texte
   FileClose($file2)

Re: [..] Copier une chaîne de caractère

Posté : jeu. 24 avr. 2014 18:39
par Boulanza
Pour mikell
Oui, J'ai testé... ça donne un fichier .ini vide ! en plus lorsque je modifie la fonction Local $file2 = FileOpen("fichier2", 2) en mode 0: FileOpen("fichier2", 0) pas de remplacement de chaîne de caractère: "????" par $chaine pas de réaction de la part de la fonction : $txt1 = StringReplace($txt1, "????", $chaine). Peut être je n'ai pas su insérè votre modiication dans le script ! ci-joint:
► Afficher le texte

Re: [..] Copier une chaîne de caractère

Posté : jeu. 24 avr. 2014 23:22
par mikell
Bon on résume
Avec un fichier ini comme ça
► Afficher le texte
le code suivant
► Afficher le texte
retourne bien dans la msgbox la chaine recherchée
J'ai testé le code ci-dessus avec des fichiers txt et il fait parfaitement tout ce que tu demandes
Donc
Pour la partie 'copie' (commentée dans le script) tu as dû faire quelque part une erreur de syntaxe
Alors
Vérifie bien les chemins des fichiers, et sous chaque ligne de la partie 'copie' du script mets une msgbox de debug, comme ça tu trouveras où ça merdoie

Re: [R] Copier une chaîne de caractère

Posté : ven. 25 avr. 2014 19:07
par Boulanza
Bonsoir mikell,
Merci à toi et à tous les intervenants qui m'ont aidé à monter ce script, c'est grasse à vos aides que j'ai enfin pu trouver la solution parfaite, objet de ma demande.

Code : Tout sélectionner

#NoTrayIcon
#RequireAdmin
#include <FileConstants.au3>
#include <MsgBoxConstants.au3>
#include <Array.au3>
#Include <File.au3>
;=================================

Global $dir = @TempDir&"\ExportDrvpi\"
Global $hSearch = FileFindFirstFile($dir & "*.ini"), $res

While 1
        $sFileName = FileFindNextFile($hSearch)     ; lit un fichier ini après l'autre
        $txt = FileRead($dir & $sFileName)
         Msgbox(0,"$sFilePath", $sFileName)
        $tilt = StringRegExp($txt, '\$Key=(\V+)', 3)   ; cherche une chaine $MP="chaine"
        If IsArray($tilt) Then
            $res = $tilt[0]       ; si chaine trouvée, $res = la chaine
           Exitloop         ; et on sort de la boucle
        EndIf
Wend

;==========================
Global $sFilePath=$sFileName
;Msgbox(0,"$sFilePath", $sFilePath)
Global $Key=$res
Global $chaine = $res
MsgBox(0, "Chaine", $chaine)
Global $chaine = IniRead($sFilePath, "parametres", "$Key", "")
;Msgbox(0,"trouvé", $res)

; Ouverture des fichiers
Global $file1 = FileOpen(@ScriptDir&"\test1.au3", 0)
Global $file2 = FileOpen($sFilePath,2)
Msgbox(0,"trouvé", $file2)

;Vérifie si fichier 1 OK
If $file1 = -1 Then
MsgBox(0, "Error", "Unable to open file.")
Exit
EndIf

; Vérifie si fichier 2 OK
If $file2 = -1 Then
MsgBox(0, "Error", "Unable to open file.")
Exit
EndIf

; Déclare contenu fichier 2
Dim $contenu2

; Lecture ligne à ligne du fichier 1
While 1
    Local $line = FileReadLine($file1)

    ; SI EOF, sortie de la boucle
    If @error = -1 Then ExitLoop

    ; Remplacement de chaîne
    $line=StringReplace($line,"????",$res)
     ; Ajout au contenu du fichier 2
    $contenu2=$contenu2 & $line & @CRLF
WEnd

; Ecriture du fichier 2
FileWrite($file2,$contenu2)

; Fermeture des fichiers
FileClose($file1)
FileClose($file2)

; Si le remplacement ne s'est pas effectué, on supprimer le fichier backup.
;Msgbox(0,"$sFileName", $sFileName)
FileDelete($dir&$sFileName)
Cordialement.

Re: [R] Copier une chaîne de caractère

Posté : ven. 25 avr. 2014 22:00
par jguinch
Boulanza, essaye de penser à la balise

Re: [R] Copier une chaîne de caractère

Posté : sam. 26 avr. 2014 22:12
par Boulanza
Bonsoir jguinch,
Merci pour la remarque. C'est fait.
Cordialement.