Что нового

Как правильно перезаписать значение с увеличением на единицу

ason

Новичок
Сообщения
12
Репутация
0
Здравствуйте!
Имеем текстовый файл и 1000 строк со значением <!-- question: 1 -->, требуется в каждой следующей найденной строке перезаписать это значение с увеличением на единицу (<!-- question: 2 -->, ..3, ..4 ... и так до конца файла ...<!-- question: 1000 -->). Прошу подсказать или показать, как правильно выполнить поиск и замену.
Накидал, что-то, стыдно показать, но тем не менее:
Код:
$File = @ScriptDir & '\000.txt'
$Read = FileRead($File)
$Str1 ='<!-- question: 1  -->'

While 1
		$Replace = StringRegExpReplace($Read, $Str1, $Str1+1)
		FileDelete($File)
		FileWrite($File, $Replace)
WEnd

Добавил текстовый файл с куском кода в котором произвожу поиск. В файле 5 блоков из 1000 (все блоки одинаковые, поэтому привел только кусок кода этого файла). Искомая строка <!-- question: 1 -->
 

Вложения

  • 7,8 КБ Просмотры: 2
A

Alofa

Гость
Код:
Local $File, $Str1, $hFile, $sText

$File = @ScriptDir & '\000.txt'
$i = 0
$hFile = FileOpen($File, 0)
If $hFile = -1 Then Exit MsgBox(4096 + 16, "Ошибка", "Невозможно открыть файл.")

While 1
	$sLine = FileReadLine($hFile)
	If @error = -1 Then ExitLoop
	$sLine = StringRegExpReplace($sLine, '^(<\!--\h?question\:\h?)1(\h*-->)', '${1}' & ($i + 1) & '$2', 1)
	If @extended Then $i += 1
	$sText &= $sLine & @CRLF
WEnd
$sText = StringTrimRight($sText, 2)
FileClose($hFile)

;ConsoleWrite('[' & $sText & ']' & @LF) ; <<<<<<<<<< П Р О В Е Р К А >>>>>>>>>>

$hFile = FileOpen($File, 2)
FileWrite($hFile, $sText)
FileClose($hFile)
 
Автор
A

ason

Новичок
Сообщения
12
Репутация
0
Alofa Спасибо! Работает. Прошу прокоментировать вот эту строку:
Код:
'${1}' & ($i + 1) & '$2'
 
A

Alofa

Гость
ason сказал(а):
... прокоментировать вот эту строку:
Код:
'${1}' & ($i + 1) & '$2'
Сначала вычисляется значение $i и затем строка будет иметь примерно следующий вид:
Код:
'${1}2$2'

Про фигурные скобки в обратных ссылках читайте Примечания.
 
Верх