Что нового

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

tenitii

Новичок
Сообщения
26
Репутация
0
помогите написать скрипт который может переписывать значение в конце строки
пример файла
нужно в 5 строчке в конце 0 заменить на 2

R:001:00:000:00:000000:000000:000000:000000:0000:0062:0144:00
R:002:00:000:00:000000:000000:000000:000000:0000:0062:0144:00
R:003:00:000:00:000000:000000:000000:000000:0000:0062:0144:00
R:004:00:000:00:000000:000000:000000:000000:0000:0062:0144:00
R:005:00:000:00:000000:000000:000000:000000:0000:0062:0144:02
R:006:00:000:00:000000:000000:000000:000000:0000:0062:0144:00
R:007:00:000:00:000000:000000:000000:000000:0000:0062:0144:00
R:008:00:000:00:000000:000000:000000:000000:0000:0062:0144:00
R:009:00:000:00:000000:000000:000000:000000:0000:0062:0144:00
R:010:00:000:00:000000:000000:000000:000000:0000:0062:0144:00
R:011:00:000:00:000000:000000:000000:000000:0000:0062:0144:00
 

madmasles

Модератор
Глобальный модератор
Сообщения
7 790
Репутация
2 319
tenitii
Попробуйте так:
Код:
#include <File.au3>

$sFile = @ScriptDir & '\test.txt'
$iString = 5
$sReplase = '2'

$hFile = FileOpen($sFile, 0)
$sFindText = FileReadLine($hFile, $iString)
FileClose($hFile)
$sReplaseText = StringTrimRight($sFindText, 1) & $sReplase
$retval = _ReplaceStringInFile($sFile, $sFindText, $sReplaseText, 0, 0)
If $retval = -1 Then
	MsgBox(0, "ERROR", "The pattern could not be replaced in file: " & $sFile & " Error: " & @error)
	Exit
Else
	MsgBox(0, "INFO", "Found " & $retval & " occurances of the pattern: " & $sFindText & " in the file: " & $sFile)
EndIf
 
Автор
T

tenitii

Новичок
Сообщения
26
Репутация
0
все работает отлично

спасибо !
 

madmasles

Модератор
Глобальный модератор
Сообщения
7 790
Репутация
2 319
tenitii
Единственный нюанс: если есть одинаковые строки вместе с искомой и одна из них не 5-ая, а, например, 2-ая, то, в моем скрипте заменит 2-ую строку, а не 5-ую. Если заменить:
Код:
;...
$retval = _ReplaceStringInFile($sFile, $sFindText, $sReplaseText, 0, 0)
;...
; на
;...
$retval = _ReplaceStringInFile($sFile, $sFindText, $sReplaseText)
;...
то заменит все одинаковые строки. Т.е., если есть одинаковые строки вместе с искомой и менять нужно будет только одну конкретную, то надо скрипт переписывать. Если Вам надо, могу переписать.
 
Автор
T

tenitii

Новичок
Сообщения
26
Репутация
0
нет спасибо все работает как я и хотел
я для каждой строчки сделал отдельный скрипт
и установил на компютерах в сети каждый под своим номером.

все работает отлично!
 

gregaz

AutoIT Гуру
Сообщения
1 166
Репутация
299
Вот еще один простенький вариант :
Код:
#include<File.au3>
$sFile = @ScriptDir & '\test.txt'
$sText=FileRead($sFile)
MsgBox(0,'$sText',$sText)

$sReplaceString= StringRegExpReplace($sText,"(?s)(?:.+?[\r\n]){4}[\r\n](.+?):\d\d[\r\n].+","\1:02" )

_FileWriteToLine($sFile, 5, $sReplaceString, 1)
$sText=FileRead($sFile)
MsgBox(0,'$sText',$sText)



Добавлено:
Сообщение автоматически объединено:

Или еще проще :
Код:
#include<File.au3>
$sFile = @ScriptDir & '\test.txt'

$sFindString = FileReadLine($sFile, 5)
$sReplaceString= StringRegExpReplace($sFindString,"(.+?):\d\d$","\1:02" )
_FileWriteToLine($sFile, 5, $sReplaceString, 1)
$sText=FileRead($sFile)
MsgBox(0,'$sText',$sText)
 
Верх