Je tente de remplacer une ligne dans un fichier.
Mon problème : Je n'arrive jamais à trouver la ligne que je cherche dans un fichier. Ma fonction trouve la ligne que je veux remplacer mais ne l'identifie pas correctement comme étant celle que je veux remplacer ou peut-être qu'elle ne parvient pas à ouvrir le fichier (le chemin d'accès au fichier est correct).
Si vous testez la fonction my avec le fichier texte simple suivant, elle échoue toujours :
abc
test
données
Pouvez-vous m'aider à faire en sorte que ma fonction remplace correctement une ligne dans un fichier ?
# usage that fails to work
Push "C:\Users\blah\Desktop"
Push "test.txt"
Push "abc"
Push "def"
Call ReplaceLineInFile
Function ReplaceLineInFile
# T-3 = nDir
# T-2 = nFile
# T-1 = targetLine
# TOP = replaceLine # TOP is top of stack
# $4 = tempName
# $5 = numTargetLinesFound
Pop $3 # replaceLine
Pop $2 # targetLine
Pop $1 # nFile
Pop $0 # nDir
StrCpy $1 "$0\$1" # create the string 'C:\users\blah\mytext.txt'
IntOp $5 0 + 0
MessageBox MB_OK "ReplaceLineInFile: dir: $0$\r$\nfile: $1$\r$\ntarget: $2$\r$\nreplace: $3"
ClearErrors
FileOpen $8 $1 "r" ; open target file for reading
GetTempFileName $4 ; get new temp file name
FileOpen $7 $4 "w" ; open temp file for writing
loop:
FileRead $8 $6 ; read line from target file
IfErrors done ; check if end of file reached
MessageBox MB_OK "Line: $6$\r$\nTarg: $2"
StrCmp $6 "$2$\r$\n" 0 +3 ; compare line with search string with CR/LF
StrCpy $6 "$3$\r$\n" ; change line
IntOp $5 $5 + 1
StrCmp $6 "$2" 0 +3 ; compare line with search string without CR/LF (at the end of the file)
StrCpy $6 "$3" ; change line
IntOp $5 $5 + 1
FileWrite $7 $6 ; write changed or unchanged line to temp file
Goto loop
done:
FileClose $8 ; close target file
FileClose $7 ; close temp file
Delete $1 ; delete target file
CopyFiles /SILENT $4 $1 ; copy temp file to target file
Delete $4 ; delete temp file
MessageBox MB_OK "Targets found: $5"
FunctionEnd