Page 1 sur 2
[R] Remplacer une ligne dans un fichier txt
Posté : mar. 17 juin 2014 18:14
par Andranik
Bonjour,
Je n'arrive pas a remplacer une ligne dans un fichier.
Voici les condition
J'ai un fichier "C:\test.txt"
Dans ce fichier j'ai un tableau "idu" @TAB "Version du Logiciel"
Idu est un id unique.
Pour modifier idu je peux utiliser _ReplaceStringInFile car il ne se répète pas... mais pour la Version du Logiciel je n'arrive pas.
J'ai pensé a utilisé _FileWriteToLine mais j'ai pas la ligne a remplacer ...
Comme j'ai créer un tableau dans le fichier txt avec idu[1] et version logiciel[2] je me suis dit que le 0 me retournera la ligne mais non

Pouvez vous m'aider svp!!!
Merci
Re: [..] Remplacer une ligne dans un fichier txt
Posté : mar. 17 juin 2014 18:28
par PandiPanda
Bonsoir,
pouvez vous fournir un fichier test.txt "complet" d'exemple ? ^^
Re: [..] Remplacer une ligne dans un fichier txt
Posté : jeu. 19 juin 2014 09:41
par Andranik
Bonjour,
Oui bien sur. Voici le contenu du fichier
3121 @tab 1.18
3122 @tab 1.16
3123 @tab 1.16
3124 @tab 1.16
3125 @tab 2.28
3126 @tab 3.72
3127 @tab 1.16
3128 @tab 3.72
3129 @tab 1.18
Merci
Re: [..] Remplacer une ligne dans un fichier txt
Posté : jeu. 19 juin 2014 09:54
par PandiPanda
Bonjour,
vous voulez quelque chose comme ceci?
► Afficher le texte
Code : Tout sélectionner
Local $s = ""& _
"3121"&@tab&"1.18"&@CRLF& _
"3122"&@tab&"1.16"&@CRLF& _
"3123"&@tab&"1.16"&@CRLF& _
"3124"&@tab&"1.16"&@CRLF& _
"3125"&@tab&"2.28"&@CRLF& _
"3126"&@tab&"3.72"&@CRLF& _
"3127"&@tab&"1.16"&@CRLF& _
"3128"&@tab&"3.72"&@CRLF& _
"3129"&@tab&"1.18"&@CRLF
MsgBox(0,"","Avant"&@CRLF&$s&@CRLF&"------"&@CRLF&"Apres"&@CRLF&replaceLine($s,3126,"3126"&@TAB&"4.02"))
Func replaceLine($sFile,$id,$replace)
Return StringRegExpReplace($sFile,"("&$id&")(.*)\n",$replace&@CRLF)
EndFunc
Re: [..] Remplacer une ligne dans un fichier txt
Posté : jeu. 19 juin 2014 10:07
par Andranik
Huh je viens de faire le test de se que tu m'a envoyer et cela ne fonctionne pas.

Re: [..] Remplacer une ligne dans un fichier txt
Posté : jeu. 19 juin 2014 10:08
par PandiPanda
Fonctionne pas c'est a dire? '^^
ca s'execute au moins?
Re: [..] Remplacer une ligne dans un fichier txt
Posté : jeu. 19 juin 2014 10:29
par Andranik
Oui ca s'execute

Mais ne remplace pas

Re: [..] Remplacer une ligne dans un fichier txt
Posté : jeu. 19 juin 2014 10:39
par jguinch
En fait, tu veux remplacer quoi par quoi ?
Re: [..] Remplacer une ligne dans un fichier txt
Posté : jeu. 19 juin 2014 10:45
par Andranik
Si la version du logiciel a changer je remplace la version...
Si c'est idu donc je remplace idu
Mais cela peut arrivé que il faut remplacer les deux !
J'ai donc une Gui dans la quel j'ai les deux version "idu" et "version logiciel" et que si je clique sur Modifier toute la ligne va être remplacer et non pas juste la valeur du idu ou version logiciel...
Re: [..] Remplacer une ligne dans un fichier txt
Posté : jeu. 19 juin 2014 11:06
par PandiPanda
Je donne un exemple;
Si vous voulez remplacer la ligne 3126 @tab 3.72, dont l'idu = 3126 et la version = 3.72
par un idu = 3130 et dont la version est 4.02
ce script n'est pas bon? Ou j'ai completement mal compris ce que vous demandiez ...
► Afficher le texte
Code : Tout sélectionner
Local $s = ""& _
"3121"&@tab&"1.18"&@CRLF& _
"3122"&@tab&"1.16"&@CRLF& _
"3123"&@tab&"1.16"&@CRLF& _
"3124"&@tab&"1.16"&@CRLF& _
"3125"&@tab&"2.28"&@CRLF& _
"3126"&@tab&"3.72"&@CRLF& _
"3127"&@tab&"1.16"&@CRLF& _
"3128"&@tab&"3.72"&@CRLF& _
"3129"&@tab&"1.18"&@CRLF
Local $oldId = "3126"
Local $newId = "3130"
Local $newVers = "4.02"
MsgBox(0,"","Avant"&@CRLF&$s&@CRLF&"------"&@CRLF&"Apres"&@CRLF&replaceLine($s,$oldId,$newId&@TAB&$newVers))
Func replaceLine($sFile,$id,$replace)
Return StringRegExpReplace($sFile,"("&$id&")(.*)\n",$replace&@CRLF)
EndFunc
Re: [..] Remplacer une ligne dans un fichier txt
Posté : jeu. 19 juin 2014 11:23
par jguinch
PandiPanda a écrit :Ou j'ai completement mal compris ce que vous demandiez
Je crois qu'en fait c'est pas clair...
L'idéal serait que Andranik nous donne un exemple avec un fichier de départ (ça on l'a) et un fichier d'arrivée.
Re: [..] Remplacer une ligne dans un fichier txt
Posté : jeu. 19 juin 2014 14:22
par Andranik
Bon déjà merci pour votre aide.
Voici un exemple :
► Afficher le texte
Code : Tout sélectionner
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <GUIListBox.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <MsgBoxConstants.au3>
#include <GUIConstants.au3>
#include <GUIListview.au3>
#include <File.au3>
#include <Array.au3>
$Form1 = GUICreate("Version", 511, 636, 192, 124)
$List1 = GUICtrlCreateListView("Version", 32, 192, 345, 383)
GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 0, 324)
$quit = GUICtrlCreateButton("Exit", 240, 584, 121, 41, $WS_GROUP)
$Button5 = GUICtrlCreateButton("Modifier", 384, 432, 113, 33, $WS_GROUP)
GUISetState(@SW_SHOW)
Global $file = "C:\temp\ids.txt", $Countfile = _FileCountLines($file), $fileHandle = FileOpen($file)
Global $res, $var1, $tempID, $fSortSense = False
For $i = 1 To $Countfile
$var1 = FileReadLine($fileHandle, $i)
$res = StringSplit($var1, @TAB)
$tempID = GUICtrlCreateListViewItem($res[1], $List1)
If $res[2] = "" Then
GUICtrlSetBkColor(-1, 0xFFFFCC)
Else
;GUICtrlSetBkColor(-1,$COLOR_GREEN)
EndIf
Next
_GUICtrlListView_SimpleSort($List1, $fSortSense, 0, False)
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $quit
Exit
Case $Button5
Call("_mod")
EndSwitch
WEnd
Func _mod()
$Form3 = GUICreate("Modification", 430, 291, 325, 240)
$Label11 = GUICtrlCreateLabel("Version", 40, 16, 354, 41)
GUICtrlSetFont(-1, 18, 400, 0, "MS Sans Serif")
$Label2 = GUICtrlCreateLabel("IUD", 40, 80, 83, 17)
$Label4 = GUICtrlCreateLabel("Version Logiciel", 40, 144, 76, 17)
$msg = GUICtrlCreateLabel("", 144, 128, 132, 41)
$new1 = GUICtrlCreateInput("", 32, 104, 105, 21)
$new3 = GUICtrlCreateInput("", 32, 176, 105, 21)
$modif = GUICtrlCreateButton("Modifier", 144, 224, 137, 33, $WS_GROUP)
GUISetState(@SW_SHOW)
$nuid = GUICtrlRead(GUICtrlRead($List1))
$liste = "C:\temp\ids.txt"
$vrFchConf = FileOpen($liste, 0)
While 1
$vrLignConf = FileReadLine($vrFchConf)
If @error Then ExitLoop
$vrChmRepCiblConf = StringSplit($vrLignConf, @TAB)
Global $uid = $vrChmRepCiblConf[1]
Global $vers = $vrChmRepCiblConf[2]
If $nuid = $uid & "|" Then
GUICtrlSetData($new1, $uid)
GUICtrlSetData($new3, $vers)
Else
EndIf
WEnd
While 1
Global $neuid = GUICtrlRead($new1)
Global $newvers = GUICtrlRead($new3)
Global $msg
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
ExitLoop
Case $modif
If ($neuid And $newvers) = "" Then
MsgBox(64, "Info", "Le nom du magasin ou l'ID Ammyy ne peut pas être vide")
Else
MsgBox(0,"","Remplacer la ligne")
ExitLoop
EndIf
EndSwitch
WEnd
GUISetState(@SW_HIDE, $Form3)
EndFunc
Re: [..] Remplacer une ligne dans un fichier txt
Posté : jeu. 19 juin 2014 15:06
par Andranik
Ton scripte est bon PandiPanda... Mais j'ai pas l'impression qu'il fonctionne
Re: [..] Remplacer une ligne dans un fichier txt
Posté : jeu. 19 juin 2014 15:29
par jguinch
Tout comme le tiens Andranik.

Re: [..] Remplacer une ligne dans un fichier txt
Posté : jeu. 19 juin 2014 15:44
par Andranik
Tout comme le mien = bon ou fonctionne pas

Je viens de le modifier
Re: [..] Remplacer une ligne dans un fichier txt
Posté : jeu. 19 juin 2014 18:34
par mikell
jguinch a écrit :L'idéal serait que Andranik nous donne un exemple avec un fichier de départ (ça on l'a) et un fichier d'arrivée.
Andranik, jguinch parle d'exemple d'un fichier txt de départ et du fichier txt d'arrivée souhaité

Re: [..] Remplacer une ligne dans un fichier txt
Posté : ven. 20 juin 2014 09:51
par Andranik
Bonjour,
Voici le contenu du fichier avant modification :
3121 @tab 1.18
3122 @tab 1.16
3123 @tab 1.16
3124 @tab 1.16
3125 @tab 2.28
3126 @tab 3.72
3127 @tab 1.16
3128 @tab 3.72
3129 @tab 1.18
Si je fait la modification de la version du logiciel 1.18 => 2.11 pour idu 3121
3121 @tab 2.11
3122 @tab 1.16
3123 @tab 1.16
3124 @tab 1.16
3125 @tab 2.28
3126 @tab 3.72
3127 @tab 1.16
3128 @tab 3.72
3129 @tab 1.18
Si je fait une modification du idu 3122 => 3222
3121 @tab 2.11
3222 @tab 1.16
3123 @tab 1.16
3124 @tab 1.16
3125 @tab 2.28
3126 @tab 3.72
3127 @tab 1.16
3128 @tab 3.72
3129 @tab 1.18
Si je change la version du logiciel + idu 3123 => 3223 et la version du logiciel 1.16 => 2.11
3121 @tab 2.11
3222 @tab 1.16
3223 @tab 2.11
3124 @tab 1.16
3125 @tab 2.28
3126 @tab 3.72
3127 @tab 1.16
3128 @tab 3.72
3129 @tab 1.18
Merci
Re: [..] Remplacer une ligne dans un fichier txt
Posté : ven. 20 juin 2014 10:27
par PandiPanda
Bonjour ceci?
petite modification ^^
► Afficher le texte
Code : Tout sélectionner
Local $s = ""& _
"3121"&@tab&"1.18"&@CRLF& _
"3122"&@tab&"1.16"&@CRLF& _
"3123"&@tab&"1.16"&@CRLF& _
"3124"&@tab&"1.16"&@CRLF& _
"3125"&@tab&"2.28"&@CRLF& _
"3126"&@tab&"3.72"&@CRLF& _
"3127"&@tab&"1.16"&@CRLF& _
"3128"&@tab&"3.72"&@CRLF& _
"3129"&@tab&"1.18"&@CRLF
Local $oldId
Local $newId
Local $newVers
; (1) Si je fait la modification de la version du logiciel 1.18 => 2.11 pour idu 3121
$oldId = "3121"
$newId = ""
$newVers = "2.11"
MsgBox(0,"(1)","Avant"&@CRLF&$s&@CRLF&"------"&@CRLF&"Apres"&@CRLF&replaceLine($s,$oldId,$newId,$newVers))
; (2) Si je fait une modification du idu 3122 => 3222
$oldId = "3122"
$newId = "3222"
$newVers = ""
MsgBox(0,"(2)","Avant"&@CRLF&$s&@CRLF&"------"&@CRLF&"Apres"&@CRLF&replaceLine($s,$oldId,$newId,$newVers))
; (3) Si je change la version du logiciel + idu 3123 => 3223 et la version du logiciel 1.16 => 2.11
$oldId = "3123"
$newId = "3223"
$newVers = "2.11"
MsgBox(0,"(3)","Avant"&@CRLF&$s&@CRLF&"------"&@CRLF&"Apres"&@CRLF&replaceLine($s,$oldId,$newId,$newVers))
Func replaceLine($sFile,$oldId,$newId = "",$vers = "")
Local $replace = ""
If $newId <> "" And $vers <> "" Then $vers = @TAB&$vers
If $newId = "" Then
$replace&="$1"&@TAB
Else
$replace&=$newId
EndIf
If $vers = "" Then
$replace&="$2"
Else
$replace&=$vers&@CRLF
EndIf
Return StringRegExpReplace($sFile,"("&$oldId&")(.*)\n",$replace)
EndFunc
Re: [..] Remplacer une ligne dans un fichier txt
Posté : lun. 23 juin 2014 10:02
par Andranik
Bonjour,
Désolé mais j'ai fait un copié/collé et le résultat avant et après est le même.

Re: [..] Remplacer une ligne dans un fichier txt
Posté : lun. 23 juin 2014 11:12
par PandiPanda
Bonjour,
Moi j'ai aucun problème :/
Je ne peux vous aider ...
