[решено] Как заменить строку [27] в файле?
-
semiono
[решено] Как заменить строку [27] в файле?
Как заменить строку [27] в файле?
Все другие строки должны сохраниться.
Все другие строки должны сохраниться.
-
proxy
Re: [решено] Как заменить строку [27] в файле?
1
Код:
2 Написать свою функцию замены: прочиать файл > найти строку > заменить > записать файл с заменой содержимого
Код:
Код: Выделить всё
_ReplaceStringInFile2 Написать свою функцию замены: прочиать файл > найти строку > заменить > записать файл с заменой содержимого
-
semiono
-
proxy
Re: [решено] Как заменить строку [27] в файле?
пример:
Код:
Код:
Код: Выделить всё
#region: - Option
Opt('MustDeclareVars', 1)
Opt('TrayIconDebug', 1)
Opt('TrayIconHide', 0)
Opt('WinTitleMatchMode', 2)
#endregion
HotKeySet('{ESC}', '_Pro_Exit')
Local $sFilePath = 'c:\test.txt'
Local $iReplaceStringInFileByindex = _ReplaceStringInFileByindex($sFilePath, 4, '')
If $iReplaceStringInFileByindex == -1 Then
MsgBox(48, 'Внимание', 'Ошибка открытия файла' & @CRLF & 'Код ошибки: ' & $iReplaceStringInFileByindex)
Else
MsgBox(64, 'Результат замены', 'Колличество замен: ' & $iReplaceStringInFileByindex)
ShellExecute($sFilePath)
EndIf
Func _ReplaceStringInFileByindex($sFilePath, $iIndexString, $sReplaceString)
Local $hFile = FileOpen($sFilePath, 0)
If $hFile == -1 Then
;~ MsgBox(48, 'Внимание', 'Ошибка открытия файла' & @CRLF & 'Код ошибки: ' & $hFile)
Return -1
EndIf
Local $i = 1
Local $iCountReplace = 0
Local $sFileString, $sFileText
While 1
$sFileString = FileReadLine($hFile)
If @error == -1 Then ExitLoop
If $i == $iIndexString Then
$sFileText &= $sReplaceString & @CRLF
$iCountReplace += 1
Else
$sFileText &= $sFileString & @CRLF
EndIf
$i += 1
Wend
FileClose($hFile)
If NOT $iCountReplace Then Return 0
If StringRight($sFileText, 2) == @CRLF Then $sFileText = StringTrimRight($sFileText, 2)
$hFile = FileOpen($sFilePath, 2)
FileWrite($hFile, $sFileText)
FileClose($hFile)
Return $iCountReplace
EndFunc
Func _Pro_Exit()
Exit
EndFunc-
semiono
Re: [решено] Как заменить строку [27] в файле?
Стоп-стоп-стоп! 
Зачем так много кода на такое простое действие
Я тут на самом деле в тупик зашёл...
Дело в том, что вот кусок файла "test"
Код:
И по сути надо заменить строку Top=192, но всё дело в том, что значение может быть любым!
То-есть Top=192 Top=193 Top=190 итп. Неизвестно изначально! Top=???
А как тогда быть?

Нет ли каких масок типа *.* или ? для кода? Чтоб искать по слову "Top= плюс+AnySymbols"

Зачем так много кода на такое простое действие

Я тут на самом деле в тупик зашёл...
Дело в том, что вот кусок файла "test"
Код:
Код: Выделить всё
[Main]
Left=278
Top=192
Width=596
Height=434
....И по сути надо заменить строку Top=192, но всё дело в том, что значение может быть любым!
То-есть Top=192 Top=193 Top=190 итп. Неизвестно изначально! Top=???
А как тогда быть?

Нет ли каких масок типа *.* или ? для кода? Чтоб искать по слову "Top= плюс+AnySymbols"
-
proxy
Re: [решено] Как заменить строку [27] в файле?
Цитата:
Нет ли каких масок типа *.* или ? для кода? Чтоб искать по слову "Top= плюс+AnySymbols"
а так:
Код:
и т.д.
Цитата:
Стоп-стоп-стоп!
Зачем так много кода на такое простое действие
Буду благодарен если оптимизируите, а это проще не додумался ))
Цитата semiono:
Нет ли каких масок типа *.* или ? для кода?
оооо, да - есть!!!
И самое лучшее:
Код:
Нет ли каких масок типа *.* или ? для кода? Чтоб искать по слову "Top= плюс+AnySymbols"
а так:
Код:
Код: Выделить всё
$iNewVal = 190
_ReplaceStringInFileByindex($sFilePath, 3, 'Top=' & $iNewVal)
$iNewVal = 191
_ReplaceStringInFileByindex($sFilePath, 3, 'Top=' & $iNewVal)и т.д.
Цитата:
Стоп-стоп-стоп!
Зачем так много кода на такое простое действие
Буду благодарен если оптимизируите, а это проще не додумался ))
Цитата semiono:
Нет ли каких масок типа *.* или ? для кода?
[решено] Как заменить строку [27] в файле?
оооо, да - есть!!!
И самое лучшее:
Код:
Код: Выделить всё
StringRegExp
StringRegExpReplace-
Creat0R
Re: [решено] Как заменить строку [27] в файле?
Можно ещё так:
Код:
Цитата:
по сути надо заменить строку Top=192
Заменить или значение только поменять? В последнем случае см. функцию IniWrite().
Код:
Код: Выделить всё
#include
_FileReplaceLine("Test.txt", 25, "New Line")
Func _FileReplaceLine($sFile, $iLine, $sNewLineStr)
Local $aRead_File
If Not _FileReadToArray($sFile, $aRead_File) Then Return SetError(1, 0, 0)
For $i = 1 To $aRead_File[0]
If $i = $iLine Then
$aRead_File[$i] = $sNewLineStr
_FileWriteFromArray($sFile, $aRead_File, 1)
Return 1
EndIf
Next
Return SetError(2, 0, 0)
EndFuncЦитата:
по сути надо заменить строку Top=192
Заменить или значение только поменять? В последнем случае см. функцию IniWrite().
-
semiono
Re: [решено] Как заменить строку [27] в файле?
Ура! New Line вписалось!
А ето ещё лучше!!!
Код:
Вот то что и хотелось, одной строкой
Хотя, спасибо все навороты тоже были интересными, пригодиться потом!
offtop: У меня калькулятор каждый раз сдвигается игнорируя таск бар наверху, я решил ему Loader приписать,
чтоб он затирал его INI и возвращал на место инициализации, раз уж производители криво зделали
Видимо он отсчитывает X:Y от края экрана, и переписывает инифайл невзирая на то что нормальные проги,
считают от таскбара...
Блин, инифайлы - это вообще очень хорошо! Весьма часто нужно такое! Я и не знал что такое имеется в AutoIt !
А ето ещё лучше!!!
Код:
Код: Выделить всё
IniWrite(@ScriptDir & "\appmain.ini","Main","Top","191")Вот то что и хотелось, одной строкой

Хотя, спасибо все навороты тоже были интересными, пригодиться потом!
offtop: У меня калькулятор каждый раз сдвигается игнорируя таск бар наверху, я решил ему Loader приписать,
чтоб он затирал его INI и возвращал на место инициализации, раз уж производители криво зделали

Видимо он отсчитывает X:Y от края экрана, и переписывает инифайл невзирая на то что нормальные проги,
считают от таскбара...
Блин, инифайлы - это вообще очень хорошо! Весьма часто нужно такое! Я и не знал что такое имеется в AutoIt !
-
proxy
Re: [решено] Как заменить строку [27] в файле?
а том, что у вас тсруктура файла обычного INI файла - с самого начала стоило начинать!
.................)
+ для этих целей (у меня просто много таких нарушителей программ)
есть хорошая и очень легкая
.................)
+ для этих целей (у меня просто много таких нарушителей программ)
есть хорошая и очень легкая
утилиа