Что нового

[Данные, строки] поиск и замена слова в файле

sasha-ld

Новичок
Сообщения
48
Репутация
0
Привет!
Есть такой вопрос, есть файл с текстом, в нём надо найти слово и заменить его, с поиском вроде всё нормально а вот с перезаписью файла что то не получается.
К примеру:
в файле такие строки

Код:
gameOpt commonOption.spectateModeAllowed "2" // [ 0, 1, 2 ]
gameOpt commonOption.timeLimit "10.0000" // [ 0-30 ]
gameOpt commonOption.waveRespawnDelay "0" // [ 0, 5, 10, 15, 30 ]

И мне надо заменить значение 10.0000 из второй строки и сохранить эти изменения

Код:
$file = fileopen("test.txt")
$txt = 1
$sym = 7
$l = 1
while 1
	$line = filereadline($file, $l)
	$pr = stringmid($line, $txt, $sym)
	$compare = stringcompare($line, 'gameOpt commonOption.timeLimit "10.0000" // [ 0-30 ]')
	if @error = -1 then ExitLoop
if $pr = "10.0000" then
$line = stringreplace($line, $txt,  "15.0000")
endif
	if $pr = "10.0000" then exitloop
	if $compare = 0 then
		if $pr <> "10.0000" Then
		$txt += 1
		endif
elseif $compare <> 0 Then
		$l += 1
			endif
if $pr = "" Then
	$txt = 1
	$l += 1
	endif
	wend
msgbox(0, '', "Строка " & $l & @CR & $line & @cr & $txt & "  '" & $pr & "'")


прошу помощи
 

mef-t

Осваивающий
Сообщения
306
Репутация
30
Код:
$hFile	= fileopen("test.txt")
$txt	= FileRead($hFile)
FileClose($hFile)

$txt	= stringreplace($txt, 'gameOpt commonOption.timeLimit "10.0000" // [ 0-30 ]',  'gameOpt commonOption.timeLimit "15.0000" // [ 0-30 ]')

$hFile	= fileopen("test.txt", 2)
FileWrite ($hFile, $txt)
FileClose($hFile)
 
Автор
S

sasha-ld

Новичок
Сообщения
48
Репутация
0
Спасибо, но не совсем то, неашёл функцию UDF которая как раз подошла к моим нуждам _FileWriteToLine
получилось так

Код:
#include <File.au3>
$file = fileopen("test.txt")
$txt = 1
$sym = 7
$l = 1
while 1
    $line = filereadline($file, $l)
    $pr = stringmid($line, $txt, $sym)
    $compare = stringcompare($line, 'gameOpt commonOption.timeLimit "10.0000" // [ 0-30 ]')
    if @error = -1 then ExitLoop
if $pr = "10.0000" then
$line = stringreplace($line, $txt,  "15.0000")
_FileWriteToLine (@ScriptDir & "\" & "test.txt", $l, $line, 1)
endif
    if $pr = "10.0000" then exitloop
    if $compare = 0 then
        if $pr <> "10.0000" Then
        $txt += 1
        endif
elseif $compare <> 0 Then
        $l += 1
            endif
if $pr = "" Then
    $txt = 1
    $l += 1
    endif
    wend
msgbox(0, '', "Строка " & $l & @CR & $line & @cr & $txt & "  '" & $pr & "'")
 
Верх