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

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Boulanza
Niveau 10
Niveau 10
Messages : 711
Enregistré le : mer. 31 juil. 2013 15:49
Status : Hors ligne

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

#21

Message par Boulanza »

traitement un par un:
n1.ini
n2.ini
n3.ini
n4.ini
.
.
.
nn.ini
Modifié en dernier par Boulanza le jeu. 24 avr. 2014 23:57, modifié 1 fois.
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

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

#22

Message 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
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
jguinch
Modérateur
Modérateur
Messages : 2515
Enregistré le : lun. 14 févr. 2011 22:12
Status : Hors ligne

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

#23

Message 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:
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

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

#24

Message 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)
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Boulanza
Niveau 10
Niveau 10
Messages : 711
Enregistré le : mer. 31 juil. 2013 15:49
Status : Hors ligne

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

#25

Message 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 !
Avatar du membre
jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 2284
Enregistré le : lun. 30 mars 2009 22:57
Localisation : Sud-Ouest de la France (43.622788,-1.260864)
Status : Hors ligne

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

#26

Message par jchd »

mikell,

Tu as aussi \N* un poil plus proche de la spécification "tout jusqu'à la fin de la ligne".
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
Boulanza
Niveau 10
Niveau 10
Messages : 711
Enregistré le : mer. 31 juil. 2013 15:49
Status : Hors ligne

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

#27

Message 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.
Boulanza
Niveau 10
Niveau 10
Messages : 711
Enregistré le : mer. 31 juil. 2013 15:49
Status : Hors ligne

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

#28

Message 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.
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

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

#29

Message 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é
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 2284
Enregistré le : lun. 30 mars 2009 22:57
Localisation : Sud-Ouest de la France (43.622788,-1.260864)
Status : Hors ligne

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

#30

Message 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.
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
Boulanza
Niveau 10
Niveau 10
Messages : 711
Enregistré le : mer. 31 juil. 2013 15:49
Status : Hors ligne

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

#31

Message 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
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

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

#32

Message 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
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Boulanza
Niveau 10
Niveau 10
Messages : 711
Enregistré le : mer. 31 juil. 2013 15:49
Status : Hors ligne

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

#33

Message 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.
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

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

#34

Message 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)
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Boulanza
Niveau 10
Niveau 10
Messages : 711
Enregistré le : mer. 31 juil. 2013 15:49
Status : Hors ligne

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

#35

Message 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
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

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

#36

Message 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
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Boulanza
Niveau 10
Niveau 10
Messages : 711
Enregistré le : mer. 31 juil. 2013 15:49
Status : Hors ligne

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

#37

Message 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.
Modifié en dernier par Boulanza le sam. 26 avr. 2014 22:09, modifié 2 fois.
Avatar du membre
jguinch
Modérateur
Modérateur
Messages : 2515
Enregistré le : lun. 14 févr. 2011 22:12
Status : Hors ligne

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

#38

Message par jguinch »

Boulanza, essaye de penser à la balise
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
Boulanza
Niveau 10
Niveau 10
Messages : 711
Enregistré le : mer. 31 juil. 2013 15:49
Status : Hors ligne

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

#39

Message par Boulanza »

Bonsoir jguinch,
Merci pour la remarque. C'est fait.
Cordialement.
Répondre