Что нового

Перезаписать строку,как?

Ivan4310

Новичок
Сообщения
16
Репутация
0
Никак не могу перезаписать строку!Ситуация следующая,есть файл тхт,в нем выполняется поочередное прочтение всех строк,и если найдено нужно совпадение,то необходимо перезаписать строку в которой оно найдено!Имеется переменная со строкой в текстовом файле,имеется переменная с текстом который нужно записать вместо старого,как это сделать?Все варианты перепробовал,то все удаляется в текстовом файле,то ничего...
Допустим имеется текстовый файл с текстом:
123
456
789

Программе задано найти 456 и перезаписать ее например на 000,как это сделать?подскажите пожалуйста :(
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Ivan4310,
1. Самое простое.
Код:
$sFile = @ScriptDir & '\test.txt'

$sText = StringReplace(FileRead($sFile), '456', '000')
ConsoleWrite('Replace count: ' & @extended & @LF)
$hFile = FileOpen($sFile, 2)
FileWrite($hFile, $sText)
FileClose($hFile)

2. Если надо перезаписать всю строку, в которой есть искомая подстрока.
Код:
Global $sFile = @ScriptDir & '\test.txt', $sSearch = '\E', $sReplace = '\r\n', $sText;, $hFile

$sSearch = StringReplace($sSearch, '\', '\\')
$sReplace = StringReplace($sReplace, '\', '\\')
$sText = FileRead($sFile)
$sText = StringRegExpReplace($sText, '(?s)(.*(?:^|\r\n))([^\r\n]*?\Q' & $sSearch & '\E[^\r\n]*?)((?:\r\n|$).*$)', '${1}' & $sReplace & '${3}')
ConsoleWrite($sText & @LF)
;$hFile = FileOpen($sFile, 2)
;FileWrite($hFile, $sText)
;FileClose($hFile)
Файл test.txt:
Код:
какой-то текст 123 и еще что-нибудь.
какой-то текст \E и еще что-нибудь.
Какой-то текст 789 и еще что-нибудь.
Или, если читать-писать построчно.
Код:
Global $sFile = @ScriptDir & '\test.txt', $sFileTmp = $sFile & '.tmp', $sSearch = '\E', $sReplace = '\r\n', $sText, $hFile, $hFileTmp

If FileExists($sFileTmp) Then FileDelete($sFileTmp)
$hFile = FileOpen($sFile)
$hFileTmp = FileOpen($sFileTmp, 1)
While 1
	$sTmp = FileReadLine($hFile)
	If @error Then ExitLoop
	If StringInStr($sTmp, $sSearch) Then $sTmp = $sReplace
	FileWriteLine($hFileTmp, $sTmp)
WEnd
FileClose($hFile)
FileClose($hFileTmp)
;FileMove($sFileTmp, $sFile, 1)
Так в конце будет добавлен перенос строки (@CRLF) даже, если его не было в исходном файле.
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
http://autoit-script.ru/index.php/topic,12091.0.html
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
joiner,
А где здесь дублирующиеся строки?
 
Верх