Что нового

[Автоматизация] Удаление строки из файла

ZanMax

Тестер
Сообщения
120
Репутация
5
Всем привет.
Возникла проблемка.
есть файл такого формата :
Код:
123;Бла бла бла
234;Бла бла бла
123123;бла бла бла
;бла бла бла
6743;бла бла бла
Нужно удалить все строки которые начинаютса из ";" их будет порядка 50 - 80.
Сейчас пользователи сами удаляют все строки. Убивает много времени и много пропускаю.

Помогите.
Нужно просто Форма з одно кнопочкой.
Юзер нажымает и появляется диалоговое окно "Выбрать файл"
Юзер выбирает файл и програма сразу удаляет все строки.

Буду очень признателен.
 

Medic84

Омега
Команда форума
Администратор
Сообщения
1 542
Репутация
327
Код:
$hOpen = FileOpenDialog("Выберите файл", @DesktopDir , "TXT (*.TXT)")
$sRead = FileRead($hOpen)
$sNew = StringRegExpReplace($sRead, ";.*","")
FileWrite("New.txt",$sNew)
FileClose($hOpen)


ДУмаю ты сможешь подстроить под себя)

P.s. Скрипт удаляет все что находится за ; вплоть до конца строки :smile:
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8 175
Репутация
2 331
Medic84 [?]
Код:
$sNew = StringRegExpReplace($sRead, ";.*","")
Это удалит все строчки содержащие «;».

Оно не используется для FileOpenDialog, который возвращает путь к файлу а не дескриптор файла ;)

Код:
$sFile = FileOpenDialog("Выберите файл", @DesktopDir , "Текстовый файл (*.txt)")
If @error Then Exit

$sNewRead = StringRegExpReplace(FileRead($sFile), "(?m)^;.*[\n\r]+?", "")

$sNewFile = StringTrimRight($sFile, 4) & "_new.txt"

$hFile = FileOpen($sNewFile, 2)
FileWrite($hFile, $sNewRead)
FileClose($hFile)
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4 020
Репутация
622
Medic84 [?]
P.s. Скрипт удаляет все что находится за ; вплоть до конца строки
возможно я ошибаюсь, но автор вроде хочет удалить только те строки, которые начинаются на ";" а не удалить кусок строки за произвольным ";".
Для этого надо переделать скрипт примерно так:
Код:
$sPath = FileOpenDialog('File', '', 'Text files (*.txt)')
If @error Then Exit
$hRead = FileOpen($sPath, 0)
$hWrite = FileOpen($sPath & '_new.txt', 2)
While 1
	$sLine = FilereadLine($hRead)
	If @error = -1 Then ExitLoop
	$sLine_new = StringRegExpReplace($sLine, '^;.*', '')
	FileWriteLine($hWrite, $sLine_new)
WEnd
FileClose($hRead)
FileClose($hWrite)

В итоге получится файл с пустыми строками на местах, где раньше были строки начинающиеся на "; и находится он будет там же где и исходный файл, только немного с модифицированными именем


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

CreatoR [?]
Это удалит все строчки содержащие «;».
не, прально он говорит, только часть строки после ; до CRLF
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8 175
Репутация
2 331
Kaster [?]
не, прально он говорит, только часть строки после ; до CRLF
Но это не то что нужно ZanMax'у.
Для этого надо переделать скрипт примерно так:
Я тебе рекомендую отключить в профиле опцию «Не предупреждать о появившихся ответах во время написания собственного сообщения.» (т.е снять там птичку) ;) - См. пример выше, цикл не нужен.
 
Автор
Z

ZanMax

Тестер
Сообщения
120
Репутация
5
Мне нужно удалить строку !
Если есть
Код:
123;bla bla bla
;bla bla bla
234;bla bla bla
то на выходе получаем :

Код:
123;bla bla bla
234;bla bla bla
Всем СПАСИБО большое.
 
Автор
Z

ZanMax

Тестер
Сообщения
120
Репутация
5
Сейчас при удалении строки из файла :
Код:
123;bla bla bla
;bla bla bla
234;bla bla bla
получаем :

Код:
123;bla bla bla

234;bla bla bla
Как удалить пустую сткроку ????

Нужно получать на выходе :

Код:
123;bla bla bla
234;bla bla bla
 

XpycT

Скриптер
Сообщения
380
Репутация
132
ZanMax [?]
Нужно получать на выходе :
Попробуй так
Код:
#NoTrayIcon

$sFilePath = FileOpenDialog("File", "", "Text files (*.txt)")
If @error Then Exit

$hOldFile = FileOpen($sFilePath, 0)
$hNewFile = FileOpen(StringTrimRight($sFilePath, 4) & "_New.txt", 2)
While 1
	$sLine = FilereadLine($hOldFile)
	If @error = -1 Then ExitLoop

	If StringLeft($sLine, 1) <> ";" Then FileWriteLine($hNewFile, $sLine)
WEnd
FileClose($hNewFile)
FileClose($hOldFile)
 

Suppir

Продвинутый
Сообщения
967
Репутация
62
ZanMax [?]
Как удалить пустую сткроку
Очень просто. Проверяй все строки файла в цикле. Если строка начинается на ^;
то пропускай строку (Continue Loop). Если строка НЕ начинается с ^;
то печатай эту строку в другой файл.

Если нужно напечатать в тот же самый файл, то выводи все в массив, затем стирай исходный файл (можно переименовать в bak) и создавай из полученного массива новый файл.
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8 175
Репутация
2 331
Suppir [?]
У вас проблемы с чтением? :reading_book: Уже дали несколько рабочих примеров, зачем после этого заниматься (ленивой я бы подметил)) теорией?
 
Верх