Я знаю как это сделать путём полной перезаписи существующего файла (т.е. загнать инфу из файла в память и все замены провести там, после чего перезаписать существующий файл), но это, имхо, не совсем правильно и память жрёт



Код: Выделить всё
$sFile = @ScriptDir & '\test.txt'; путь до текстового файла, который подлежит обработке - должен существовать
$tmpFile = @ScriptDir & '\test_new.txt'; путь до нового файла, который получится после обработки - если не существует создаться автоматически
$hRead = FileOpen($sFile, 0); открываем первый файл для чтения
$hWrite = FileOpen($tmpFile, 2); открываем/создаем второй файл для записи/перезаписи
$template = 'string must exist in file'; фраза которая должна существовать в строке для начала обработки
$sAdd = ';'; символы которые добавятся перед найденной строкой
While 1
$sLine = FileReadLine($hRead); считывание строк первого файла одна за другой
If @error Then ExitLoop; если конец файла выходим из скрипта
If StringInStr($line, $template) Then; условие нахождения нужной строки
FileWriteLine($hWrite, $sAdd & $sLine); добавление символов для найденной строки
Else; условие когда строка не искомая
FileWriteLine($hWrite, $sLine); просто перезаписываем эту строку как есть
EndIf; конец условия
WEnd; конец цикла
FileClose($hRead)
FileClose($hWrite); закрываем файлы для соблюдения правил приличия и хороших манерКод: Выделить всё
#include
$aRecords = ""
_FileReadToArray("my.txt", $aRecords)
For $i = 1 To $aRecords[0]
If StringInStr($aRecords[$i], "То что ищем") > 0 Then
_FileWriteToLine("my.txt", $i, StringReplace($aRecords[$i], $aRecords[$i], ";" & _
$aRecords[$i]), 1)
EndIf
NextКод: Выделить всё
$aArray = 0
Код: Выделить всё
$sFile = @DesktopDir & "\File.txt"
$sInStr = "Some Data"
$hFile = FileOpen($sFile, 0)
While 1
$sLine = FileReadLine($hFile)
If @error 0 Then ExitLoop
If StringRegExp($sLine, "(?i)^[^;].*" & $sInStr & ".*$") Then
$iPos = FileGetPos($hFile) - StringLen($sLine) - StringLen(@CRLF)
FileClose($hFile)
$hFile = FileOpen($sFile, 1)
FileSetPos($hFile, $iPos, 0) ;$FILE_BEGIN
FileWrite($hFile, ";" & $sLine)
ExitLoop
EndIf
WEnd
FileClose($hFile)
Благодарю, вроде как работает.
Благодарю, вроде как работает.