Page 1 sur 2
[R] Copier une chaîne de caractère
Posté : mer. 23 avr. 2014 11:02
par Boulanza
Bonjour,
J'aimerai connaître la marche a suivre pour 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 ». J’ai utilisé les fonctions: _ReplaceStringInFile et FileCopy. malheureusement je n’ai pas pu les utiliser dans mon cas.
Il faut dire que j’ai trouvé sur ce forum plusieurs exemples pour remplacer une chaîne de caractère par une autre, mais pas d'exemple pour copier une chaîne de caractère situé dans un fichier texte 1 et la collet dans un autre fichier texte 2.
Voici l'exemple que j'ai trouvé pour remplacer une chaine de caractère par une autre:
► Afficher le texte
#include <file.au3>
; On fait une sauvegarde du fichier à traiter.
FileCopy("test.txt","test.txt.bak",1)
; Remplacement de la chaine.
If Not _ReplaceStringInFile( "test.txt", "Chaine1, "Chaine2" ) > 0 Then
; Si le remplacement ne s'est pas effectué, on supprimer le fichier backup.
FileDelete("test.txt.bak")
EndIf
Merci d’avance pour votre aider…
Cordialement
Re: [..] Copier une chaîne de caractère
Posté : mer. 23 avr. 2014 13:44
par scorp84
Bonjour,
Voici un petit exemple de code pour t'aider :
► Afficher le texte
Code : Tout sélectionner
; Ouverture des fichiers
Local $file1 = FileOpen("test.txt", 0)
Local $file2 = FileOpen("test2.txt",2)
; 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,"AAAA","ZZZZ")
; 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)
Pour faire le test, créé un fichier test.txt (dans le même répertoire que ton script) avec les lignes suivantes :
AAAA
BBBB
CCCC
DDDD
EEEE
FFFF
Amicalement.
BM
Re: [..] Copier une chaîne de caractère
Posté : mer. 23 avr. 2014 13:46
par lesolutionneur
Comment envisages-tu de t'y prendre pour trouver la chaîne à extraire ? Est-elle reconnaissable ?
Peut-être qu'il faudra utiliser une expression régulière.
Si tes fichiers ne sont pas trop gros, je pense que ça sera plus simple de les ouvrir, effectuer les opérations puis les enregistrer.
Peux-tu nous donner un exemple de fichier 1 et de fichier 2 et ce que tu souhaites remplacer ?
Re: [..] Copier une chaîne de caractère
Posté : mer. 23 avr. 2014 14:51
par Boulanza
Je vous remercie pour vos aides !
Le script de scorp84 marche très bien lorsque on connait la chine de caractère.
Oui lesolutionneur, dans mon cas elle n'est pas reconnaissable.
Donc, j'ai encore un souci pour copier tout le contenu d'une ligne par exemple la ligne 6.
J'ai essayé la fonction _FileCountLines : impossible
Avez vous une idée?
Merci.
Re: [..] Copier une chaîne de caractère
Posté : mer. 23 avr. 2014 15:05
par jguinch
Si la chaîne n'est pas reconnaissable, comment comptes-tu la récupérer ?
Comme l'a dit lesolutionneur, il faut nous fournir des exemples de fichiers, sinon je ne vois pas comment nous pourrons t'aider.
Re: [..] Copier une chaîne de caractère
Posté : mer. 23 avr. 2014 15:15
par Boulanza
D’accord...
Voici l'exemple de fichier:
[parametres]
Nom et prénom=Boulanza
E-mail=
Boulanza@gmail.com
Numéro de téléphone=xxxxxxxxxxxxxxxx
Commande du=23 04 2014 à 08H08M00S541F
$MP=0x1B659738372809B64FF43AE1C030EA4CBE1A95E5
C'est la dernière ligne que je souhaite copier
Re: [..] Copier une chaîne de caractère
Posté : mer. 23 avr. 2014 15:18
par TommyDDR
Quand on demande si la chaine est reconnaissable, la réponse "Elle se situe après '$MP='" est une réponse attendue ^^.
Donc : Est ce que la chaine sera TOUJOURS après "$MP=" ?
Re: [..] Copier une chaîne de caractère
Posté : mer. 23 avr. 2014 15:22
par jguinch
+1 pour Tommy
Ca ressemble à un fichier INI, non ? Tu as regardé IniRead et IniWrite ?
Re: [..] Copier une chaîne de caractère
Posté : mer. 23 avr. 2014 15:27
par TommyDDR
En effet... je boss avec des ini une bonne partie de la journée et je n'avais même pas vu que c'en était un...

Re: [..] Copier une chaîne de caractère
Posté : mer. 23 avr. 2014 15:36
par Boulanza
TommyDDR: Donc : Est ce que la chaine sera TOUJOURS après "$MP=" ?
RE:Oui absolument.
Re: [..] Copier une chaîne de caractère
Posté : mer. 23 avr. 2014 15:44
par TommyDDR
Et à la question : est-ce un fichier ini ?
Si ini :
Code : Tout sélectionner
Local $chaine = IniRead("Chemin\De\Votre\Fichier.ini", "parametres", "$MP", "")
MsgBox(0, "Chaine", $chaine)
Sinon :
Code : Tout sélectionner
Local $chaine = ""
Local $content = FileRead("Chemin\De\Votre\Fichier.xxx")
Local $split = StringSplit($content, "$MP=", 3)
If(Ubound($split, 1) >= 2) Then
$chaine = $split[1]
EndIf
MsgBox(0, "Chaine", $chaine)
Re: [R] Copier une chaîne de caractère
Posté : mer. 23 avr. 2014 16:15
par Boulanza
Merci pour cette réponse, je viens de tester, ça marche parfaitement, mais si dans le cas ou le nom du fichier .ini et/ou .txt sont inconnus ça ne marche pas ! Je ne comprends ?
Voir test :
Script .ini
► Afficher le texte
Local $chaine = IniRead("Chemin\De\Votre\*.ini", "parametres", "$MP", "")
MsgBox(0, "Chaine", $chaine)
Script .text
► Afficher le texte
Local $chaine = ""
Local $content = FileRead("Chemin\De\Votre\*.txt")
Local $split = StringSplit($content, "$MP=", 3)
If(Ubound($split, 1) >= 2) Then
$chaine = $split[1]
EndIf
MsgBox(0, "Chaine", $chaine)
Re: [..] Copier une chaîne de caractère
Posté : mer. 23 avr. 2014 16:53
par TommyDDR
FileRead et IniRead attendent un nom de fichier précis, vous ne pouvez pas mettre "*".
Si vous voulez traiter tous les fichier .ini/.txt d'un dossier, penchez vous du coté de FileFindFirstFile/FileFindNextFile ou _FileListToArray/_FileListToArrayRec.
Re: [..] Copier une chaîne de caractère
Posté : mer. 23 avr. 2014 17:46
par Boulanza
TommyDDR:FileRead et IniRead attendent un nom de fichier précis, vous ne pouvez pas mettre "*".
Si vous voulez traiter tous les fichier .ini/.txt d'un dossier, penchez vous du coté de FileFindFirstFile/FileFindNextFile ou _FileListToArray/_FileListToArrayRec.
RE: Pour mon cas ça ne marche pas, j'ai testé avec ces fonctions ça ne donne rien.
svp Y a-t-il une autre solution pour 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 ».
La solution de scorp84 ça marche parfaitement, mais si dans le cas ou le nom du fichier .ini et/ou .txt sont inconnus ça ne marche pas !
► Afficher le texte
; Ouverture des fichiers
Local $file1 = FileOpen("test.txt", 0)
Local $file2 = FileOpen("test2.txt",2)
; 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,"AAAA","ZZZZ")
; 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)
Re: [..] Copier une chaîne de caractère
Posté : mer. 23 avr. 2014 20:54
par TommyDDR
Boulanza a écrit :RE: Pour mon cas ça ne marche pas, j'ai testé avec ces fonctions ça ne donne rien.[/spoiler]
Ça ne donne rien <> Je n'arrive pas à le faire fonctionner
La solution est pourtant dans ces fonctions.
Re: [..] Copier une chaîne de caractère
Posté : mer. 23 avr. 2014 21:07
par jguinch
Boulanza a écrit :mais si dans le cas ou le nom du fichier .ini et/ou .txt sont inconnus ça ne marche pas
Si tu ne connais pas le nom du fichier, tu sais au moins où il est censé être, non ?
Boulanza a écrit :Pour mon cas ça ne marche pas
Tiens, tu es tombé sur cas de figure extrêmement rare ?

Re: [R] Copier une chaîne de caractère
Posté : mer. 23 avr. 2014 21:34
par Boulanza
Bonsoir tous le monde,
Pour TommyDDR j’ai essayé à utiliser ces fonctions mais comme je suis un débutant en programmation j’n’ai pas pu atteindre le but souhaité, désolai…
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
Encore une fois merci pour vos aides…
Cordialement.
Re: [..] Copier une chaîne de caractère
Posté : mer. 23 avr. 2014 21:47
par jguinch
Euh, pour être bien clair : dans c:\Temp\ExportDrvpi il n'y a qu'un seul fichier ini ?
Re: [..] Copier une chaîne de caractère
Posté : mer. 23 avr. 2014 21:53
par Boulanza
Non plusieurs fichiers dans le même répertoire.
Re: [..] Copier une chaîne de caractère
Posté : mer. 23 avr. 2014 21:54
par jguinch
Si tu as plusieurs fichiers, dans lequel devras-tu extraire les données ? Tous ? Un seul ?
