ファイルの行を置き換えようとしています。
私の問題:探している行をファイルで見つけることができません。私の関数は、置き換えたい行を見つけましたが、置き換えたい行として正しく識別していません。または、ファイルを開くことができない可能性があります(ファイルへのパスが正しい)。
次の単純なテキストファイルを使用してmy関数をテストしても、失敗します。
abc
テスト
データ
関数でファイルの行を正しく置き換えるのを手伝ってもらえますか?
# 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