|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » Как в файле изменить определённые строки? |
|
|
Как в файле изменить определённые строки?
|
Новый участник Сообщения: 27 |
Профиль | Отправить PM | Цитировать Есть файл с большим количеством строк. Нужно найти определённые строки (вхождения фраз) и, при их обнаружении, добавить к началу каждой из них, скажем, символ комментария - ;.
Я знаю как это сделать путём полной перезаписи существующего файла (т.е. загнать инфу из файла в память и все замены провести там, после чего перезаписать существующий файл), но это, имхо, не совсем правильно и память жрёт |
|
Отправлено: 13:01, 28-01-2010 |
Ветеран Сообщения: 812
|
Профиль | Отправить PM | Цитировать NewOLDi,
_FileWriteToLine() посмотрите в библиотечных функциях, которые Цитата:
|
|
Отправлено: 13:11, 28-01-2010 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Старожил Сообщения: 367
|
Профиль | Отправить PM | Цитировать $sFile = @ScriptDir & '\test.txt'; путь до текстового файла, который подлежит обработке - должен существовать $tmpFile = @ScriptDir & '\test_new.txt'; путь до нового файла, который получится после обработки - если не существует создаться автоматически $hRead = FileOpen($sFile, 0); открываем первый файл для чтения $hWrite = FileOpen($tmpFile, 2); открываем/создаем второй файл для записи/перезаписи $template = 'string must exist in file'; фраза которая должна существовать в строке для начала обработки $sAdd = ';'; символы которые добавятся перед найденной строкой While 1 $sLine = FileReadLine($hRead); считывание строк первого файла одна за другой If @error Then ExitLoop; если конец файла выходим из скрипта If StringInStr($line, $template) Then; условие нахождения нужной строки FileWriteLine($hWrite, $sAdd & $sLine); добавление символов для найденной строки Else; условие когда строка не искомая FileWriteLine($hWrite, $sLine); просто перезаписываем эту строку как есть EndIf; конец условия WEnd; конец цикла FileClose($hRead) FileClose($hWrite); закрываем файлы для соблюдения правил приличия и хороших манер |
------- Отправлено: 13:22, 28-01-2010 | #3 |
Ветеран Сообщения: 812
|
Профиль | Отправить PM | Цитировать kaster и NewOLDi,
У меня через массив вот так работает: |
Отправлено: 13:42, 28-01-2010 | #4 |
Новый участник Сообщения: 27
|
Профиль | Отправить PM | Цитировать kaster, у Вас используются два файла, а нужно всё проворачивать в одном, т.е. и читать и записывать (при необходимости) одновременно.
madmasles, массив-память - одно и тоже (в условиях я указал на это), а нужно напрямую, без загона инфы в память. Представьте, что файл размером в 1 Гб И это, любить библиотечные функции - не означает все их знать и уметь пользоваться, любовь здесь с точки зрения разумности использования того, что уже давно придумано и просчитано (типа - зачем изобретать велосипед). |
|
Отправлено: 13:55, 28-01-2010 | #5 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать Цитата NewOLDi:
|
|
------- Отправлено: 14:03, 28-01-2010 | #6 |
Новый участник Сообщения: 27
|
Профиль | Отправить PM | Цитировать Нууу.... нет так нет, бум использовать память и полностью перезаписывать имеющийся файл
|
Отправлено: 14:30, 28-01-2010 | #7 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать Цитата NewOLDi:
$sFile = @DesktopDir & "\File.txt" $sInStr = "Some Data" $hFile = FileOpen($sFile, 0) While 1 $sLine = FileReadLine($hFile) If @error <> 0 Then ExitLoop If StringRegExp($sLine, "(?i)^[^;].*" & $sInStr & ".*$") Then $iPos = FileGetPos($hFile) - StringLen($sLine) - StringLen(@CRLF) FileClose($hFile) $hFile = FileOpen($sFile, 1) FileSetPos($hFile, $iPos, 0) ;$FILE_BEGIN FileWrite($hFile, ";" & $sLine) ExitLoop EndIf WEnd FileClose($hFile) |
|
------- Отправлено: 14:43, 28-01-2010 | #8 |
Новый участник Сообщения: 27
|
Профиль | Отправить PM | Цитировать Creat0R, нууу - строка не файл, как никак Благодарю, вроде как работает.
|
Отправлено: 14:49, 28-01-2010 | #9 |
Ветеран Сообщения: 812
|
Профиль | Отправить PM | Цитировать Интересно, сколько таких способов и какой из них наиболее оптимальный и почему.
|
Отправлено: 16:02, 28-01-2010 | #10 |
|
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Как изменить разрешение экрана из командной строки во время установки системы? | Zibit | Автоматическая установка Windows 2000/XP/2003 | 29 | 29-01-2018 23:00 | |
[решено] Как удалить строки в текстовом файле при отсутсвии файла в опрелеленном месте? | Pozia | AutoIt | 23 | 14-05-2009 21:41 | |
Интерфейс - как изменить интерфейс адресной строки? | Ingolder | Microsoft Windows Vista | 2 | 12-05-2009 22:37 | |
[решено] Работа из командной строки | Убрать все пробелы в текстовом файле | Greyman | Хочу все знать | 11 | 17-06-2007 22:44 | |
Как изменить из командной строки DNS на клиенте? | Myckyc | Сетевые технологии | 1 | 26-08-2003 04:20 |
|