Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Как заменить строку [27] в файле?

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

Аватара для semiono

Ветеран


Сообщения: 842
Благодарности: 33

Профиль | Отправить PM | Цитировать


Как заменить строку [27] в файле?
Все другие строки должны сохраниться.

-------
Полезное сообщение


Отправлено: 01:03, 05-04-2009

 

Аватара для proxy

Старожил


Сообщения: 460
Благодарности: 152

Профиль | Отправить PM | Цитировать


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

-------
Мысли-читатель сломался, может подробней расскажите?
А где исходный код? Или мы стихи обсуждаем?! )) Настройки темы > Решено ?

Это сообщение посчитали полезным следующие участники:

Отправлено: 01:11, 05-04-2009 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для semiono

Ветеран


Сообщения: 842
Благодарности: 33

Профиль | Отправить PM | Цитировать


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

-------
Полезное сообщение


Отправлено: 01:13, 05-04-2009 | #3


Аватара для proxy

Старожил


Сообщения: 460
Благодарности: 152

Профиль | Отправить PM | Цитировать


пример:

Код: Выделить весь код
#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, '<new текст>')

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

-------
Мысли-читатель сломался, может подробней расскажите?
А где исходный код? Или мы стихи обсуждаем?! )) Настройки темы > Решено ?

Это сообщение посчитали полезным следующие участники:

Отправлено: 01:29, 05-04-2009 | #4


Аватара для semiono

Ветеран


Сообщения: 842
Благодарности: 33

Профиль | Отправить PM | Цитировать


Стоп-стоп-стоп!
Зачем так много кода на такое простое действие
Я тут на самом деле в тупик зашёл...

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


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

-------
Полезное сообщение


Отправлено: 01:38, 05-04-2009 | #5


Аватара для proxy

Старожил


Сообщения: 460
Благодарности: 152

Профиль | Отправить PM | Цитировать


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

Код: Выделить весь код
$iNewVal = 190
_ReplaceStringInFileByindex($sFilePath, 3, 'Top=' & $iNewVal)

$iNewVal = 191
_ReplaceStringInFileByindex($sFilePath, 3, 'Top=' & $iNewVal)
и т.д.

Цитата:
Стоп-стоп-стоп!
Зачем так много кода на такое простое действие
Буду благодарен если оптимизируите, а это проще не додумался ))

Цитата semiono:
Нет ли каких масок типа *.* или ? для кода? »
оооо, да - есть!!!
И самое лучшее:

Код: Выделить весь код
StringRegExp
StringRegExpReplace

-------
Мысли-читатель сломался, может подробней расскажите?
А где исходный код? Или мы стихи обсуждаем?! )) Настройки темы > Решено ?

Это сообщение посчитали полезным следующие участники:

Отправлено: 01:53, 05-04-2009 | #6


Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


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

Код: Выделить весь код
#include <File.au3>

_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().

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community

Это сообщение посчитали полезным следующие участники:

Отправлено: 02:25, 05-04-2009 | #7


Аватара для semiono

Ветеран


Сообщения: 842
Благодарности: 33

Профиль | Отправить PM | Цитировать


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

А ето ещё лучше!!!
Код: Выделить весь код
IniWrite(@ScriptDir & "\appmain.ini","Main","Top","191")
Вот то что и хотелось, одной строкой
Хотя, спасибо все навороты тоже были интересными, пригодиться потом!

offtop: У меня калькулятор каждый раз сдвигается игнорируя таск бар наверху, я решил ему Loader приписать,
чтоб он затирал его INI и возвращал на место инициализации, раз уж производители криво зделали
Видимо он отсчитывает X:Y от края экрана, и переписывает инифайл невзирая на то что нормальные проги,
считают от таскбара...
Блин, инифайлы - это вообще очень хорошо! Весьма часто нужно такое! Я и не знал что такое имеется в AutoIt !

-------
Полезное сообщение


Отправлено: 02:49, 05-04-2009 | #8


Аватара для proxy

Старожил


Сообщения: 460
Благодарности: 152

Профиль | Отправить PM | Цитировать


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

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

-------
Мысли-читатель сломался, может подробней расскажите?
А где исходный код? Или мы стихи обсуждаем?! )) Настройки темы > Решено ?

Это сообщение посчитали полезным следующие участники:

Отправлено: 02:56, 05-04-2009 | #9



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Как заменить строку [27] в файле?

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Ресурсы - [решено] Как заменить курсоры в Windows 7? antipuh Оформление Windows 11/ 10 / 8 / 7 / Vista 5 13-04-2010 19:46
[решено] Найти и заменить в текстовом файле. Как? Pozia AutoIt 15 11-03-2010 19:12
[решено] Как переместить выделенную строку ListView malev AutoIt 3 15-11-2009 12:29
[решено] Как заменить строку в ENTRIES.INI средствами автоматизации. semiono AutoIt 17 08-04-2009 12:04
Как заменить строку <input type... Rustemal Вебмастеру 1 29-06-2003 15:26




 
Переход