CMD/BAT - [решено] Парсер строк TXT файла

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

CMD/BAT - [решено] Парсер строк TXT файла

Сообщение Flayer »

Цитата:



Меня трудно приручить

Не легко остановить

Можно понять

Со мной можно дружить

Приятно общаться

Невозможно забыть

Я вас не заставляю



Взят текст в пример. Как сохранить вторую и третью строчку по словам в *.тхт файл? Буду благодарен за помощь.
Аватара пользователя
Guest

Re: CMD/BAT - [решено] Парсер строк TXT файла

Сообщение Guest »

Уточните задание, вам нужно сохранить именно вторую и третью строки любого txt-файла, или строки, в которых есть заданные слова?
Аватара пользователя
Guest

Re: CMD/BAT - [решено] Парсер строк TXT файла

Сообщение Guest »

Anonymоus, по заданным словам.



P.S. Если не затруднит, можно еще пример, как по заданным словам удалить строки?
Аватара пользователя
Flayer

Re: CMD/BAT - [решено] Парсер строк TXT файла

Сообщение Flayer »

Цитата Flayer:



Anonymоus, по заданным словам.
CMD/BAT - [решено] Парсер строк TXT файла




Flayer, по приведённому примеру исходного файла, дайте пример заданных слов и пример получаемого конечного файла.
Аватара пользователя
Flayer

Re: CMD/BAT - [решено] Парсер строк TXT файла

Сообщение Flayer »

Примерно такого вида, взял три слова.



Пример слов:


Цитата:



легко, понять, общаться



Конечный результат:


Цитата:



Не легко остановить

Можно понять

Приятно общаться



Сохранить в текстовый файл.
Аватара пользователя
Iska

Re: CMD/BAT - [решено] Парсер строк TXT файла

Сообщение Iska »

Flayer, ага. Теперь ясно.



Пусть «0001.txt» — исходный файл:



Код:

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

Меня трудно приручить
Не легко остановить
Можно понять
Со мной можно дружить
Приятно общаться
Невозможно забыть
Я вас не заставляю

«0002.txt» — файл, содержащий целевые слова:



Код:

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

легко
понять

Тогда:



Код:

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

findstr.exe /i /g:0002.txt 0001.txt >0003.txt

даст в файле «0003.txt» следующий результат:


Цитата:





Код:

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

Не легко остановить
Можно понять





Flayer, это оно?



Для удаления (точнее, для фильтрации строк, не содержащих целевых слов) — добавить параметр «/v»:



Код:

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

findstr.exe /v /i /g:0002.txt 0001.txt >0004.txt


Цитата:





Код:

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

Меня трудно приручить
Со мной можно дружить
Приятно общаться
Невозможно забыть
Я вас не заставляю
Аватара пользователя
Flayer

Re: CMD/BAT - [решено] Парсер строк TXT файла

Сообщение Flayer »

Iska, не оно.

Не из файла слова брать, через переменную set.
Аватара пользователя
Flayer

Re: CMD/BAT - [решено] Парсер строк TXT файла

Сообщение Flayer »

Flayer, вот вариант для выделения строк, содержащих заданные слова



Код:

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

@Echo Off
:: Текстовый файл (и батник, и файл должны быть в одной кодировке - 1251 или 866)
Set File=file.txt
:: Слова для поиска
Set Words=легко,понять,общаться
:Loop
For /F "tokens=1,* delims=," %%A In ("%Words%") Do (
If "%%A"=="" (Exit)
Findstr /I "%%A" %file%>>out_%file%
Set Words=%%B
GoTo Loop
)

А вот для строк, НЕ содержащих ни одно из заданных слов



Код:

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

@Echo Off
SetLocal EnableDelayedExpansion
:: Текстовый файл (и батник, и файл должны быть в одной кодировке - 1251 или 866)
Set File=file.txt
:: Слова, которые НЕ должны содержаться в генерируемом файле
Set Words=легко,понять,общаться
Set TotalWords=1
Call :Check
For /F "tokens=*" %%S In (%File%) Do (
Set ContainWords=false
Set String=%%S
For /L %%A In (1,1,%TotalWords%) Do (
Echo !String!|Findstr "!Word%%A!">nul&& Set ContainWords=true
)
If !ContainWords!==false (Echo %%S>>out_%File%)
)
Exit
:Check
For /F "tokens=1,* delims=," %%A In ("%Words%") Do (
If "%%A"=="" (Exit /B)
Set /A TotalWords+=1
Set Word%TotalWords%=%%A
Set Words=%%B
GoTo Check
)
Set /A TotalWords-=1
Exit /B

Не забудьте, что и скрипт, и файл с нужными строками, должны быть сохранены в кодировке DOS 866, если вы планируете работать с кириллицей. Файл с результатом создатся в той же кодировке.



Хотя не пойму, чем вам не угодил вариант Iska с файлом - важен ведь результат, а не метод.
Аватара пользователя
Flayer

Re: CMD/BAT - [решено] Парсер строк TXT файла

Сообщение Flayer »

Anonymоus, спасибо. Еще такой вопрос, с первым кодом только почему-то сохраняются две строки.


Цитата:



Не легко остановить

Можно понять



В коде слово укоротил:


Цитата:



Set Words=легко,понять,аться



Тогда все три строки.


Цитата:



Не легко остановить

Можно понять

Приятно общаться



Пробовал с другим текстом, тоже самое, какое слово полностью можно оставить, какое нужно урезать. В чем может быть дело?
Аватара пользователя
Guest

Re: CMD/BAT - [решено] Парсер строк TXT файла

Сообщение Guest »

Flayer, я же специально указал, сохраняйте в кодировке 866 и текст, и скрипт. Подозреваю, что проблема в букве "щ", когда я тестировал с кодировкой 1251 - тоже последняя строка не писалась в создаваемый файл, когда убрал - все в порядке стало. С 866 нормально всё.
Ответить

Вернуться в «Скриптовые языки администрирования Windows»