Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Парсер строк TXT файла (http://forum.oszone.net/showthread.php?t=218009)

Flayer 15-10-2011 01:10 1773649

Парсер строк TXT файла
 
Цитата:

Меня трудно приручить
Не легко остановить
Можно понять
Со мной можно дружить
Приятно общаться
Невозможно забыть
Я вас не заставляю
Взят текст в пример. Как сохранить вторую и третью строчку по словам в *.тхт файл? Буду благодарен за помощь.

Anonymоus 15-10-2011 02:46 1773675

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

Flayer 15-10-2011 03:37 1773684

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

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

Iska 15-10-2011 05:53 1773694

Цитата:

Цитата Flayer
Anonymоus, по заданным словам. »

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

Flayer 15-10-2011 06:59 1773699

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

Пример слов:
Цитата:

легко, понять, общаться
Конечный результат:
Цитата:

Не легко остановить
Можно понять
Приятно общаться
Сохранить в текстовый файл.

Iska 15-10-2011 07:27 1773703

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 15-10-2011 07:32 1773706

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

Anonymоus 15-10-2011 09:14 1773731

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 15-10-2011 09:41 1773736

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

Не легко остановить
Можно понять
В коде слово укоротил:
Цитата:

Set Words=легко,понять,аться
Тогда все три строки.
Цитата:

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

Anonymоus 15-10-2011 09:44 1773739

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


Время: 05:38.

Время: 05:38.
© OSzone.net 2001-