[решено] Как заменить строку [27] в файле?

Ответить
Аватара пользователя
semiono

[решено] Как заменить строку [27] в файле?

Сообщение semiono »

Как заменить строку [27] в файле?

Все другие строки должны сохраниться.
Аватара пользователя
proxy

Re: [решено] Как заменить строку [27] в файле?

Сообщение proxy »

1

Код:

Код: Выделить всё

_ReplaceStringInFile

2 Написать свою функцию замены: прочиать файл > найти строку > заменить > записать файл с заменой содержимого
Аватара пользователя
semiono

Re: [решено] Как заменить строку [27] в файле?

Сообщение semiono »

А нельзя номер строки [25] конкретно? Без Find!
Аватара пользователя
proxy

Re: [решено] Как заменить строку [27] в файле?

Сообщение proxy »

пример:





Код:

Код: Выделить всё

#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] в файле?

Сообщение semiono »

Стоп-стоп-стоп! Изображение

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

Я тут на самом деле в тупик зашёл...



Дело в том, что вот кусок файла "test"



Код:

Код: Выделить всё

[Main]
Left=278
Top=192
Width=596
Height=434
....

И по сути надо заменить строку Top=192, но всё дело в том, что значение может быть любым!

То-есть Top=192 Top=193 Top=190 итп. Неизвестно изначально! Top=???

А как тогда быть?

Изображение



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

Re: [решено] Как заменить строку [27] в файле?

Сообщение proxy »

Цитата:



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



а так:





Код:

Код: Выделить всё

$iNewVal = 190
_ReplaceStringInFileByindex($sFilePath, 3, 'Top=' & $iNewVal)
$iNewVal = 191
_ReplaceStringInFileByindex($sFilePath, 3, 'Top=' & $iNewVal)

и т.д.




Цитата:



Стоп-стоп-стоп!

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



Буду благодарен если оптимизируите, а это проще не додумался ))




Цитата semiono:



Нет ли каких масок типа *.* или ? для кода?
[решено] Как заменить строку [27] в файле?




оооо, да - есть!!!

И самое лучшее:





Код:

Код: Выделить всё

StringRegExp
StringRegExpReplace
Аватара пользователя
Creat0R

Re: [решено] Как заменить строку [27] в файле?

Сообщение Creat0R »

Можно ещё так:





Код:

Код: Выделить всё

#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] в файле?

Сообщение semiono »

Ура! New Line вписалось!



А ето ещё лучше!!!



Код:

Код: Выделить всё

IniWrite(@ScriptDir & "\appmain.ini","Main","Top","191")

Вот то что и хотелось, одной строкой Изображение

Хотя, спасибо все навороты тоже были интересными, пригодиться потом!



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

чтоб он затирал его INI и возвращал на место инициализации, раз уж производители криво зделали Изображение

Видимо он отсчитывает X:Y от края экрана, и переписывает инифайл невзирая на то что нормальные проги,

считают от таскбара...

Блин, инифайлы - это вообще очень хорошо! Весьма часто нужно такое! Я и не знал что такое имеется в AutoIt !
Аватара пользователя
proxy

Re: [решено] Как заменить строку [27] в файле?

Сообщение proxy »

а том, что у вас тсруктура файла обычного INI файла - с самого начала стоило начинать!

.................)



+ для этих целей (у меня просто много таких нарушителей программ)

есть хорошая и очень легкая
утилиа
Ответить

Вернуться в «AutoIt»