Показать полную графическую версию : [решено] Парсер строк TXT файла
Меня трудно приручить
Не легко остановить
Можно понять
Со мной можно дружить
Приятно общаться
Невозможно забыть
Я вас не заставляю
Взят текст в пример. Как сохранить вторую и третью строчку по словам в *.тхт файл? Буду благодарен за помощь.
Anonymоus
15-10-2011, 02:46
Уточните задание, вам нужно сохранить именно вторую и третью строки любого txt-файла, или строки, в которых есть заданные слова?
Anonymоus, по заданным словам.
P.S. Если не затруднит, можно еще пример, как по заданным словам удалить строки?
Anonymоus, по заданным словам. »
Flayer, по приведённому примеру исходного файла, дайте пример заданных слов и пример получаемого конечного файла.
Примерно такого вида, взял три слова.
Пример слов:
легко, понять, общаться
Конечный результат:
Не легко остановить
Можно понять
Приятно общаться
Сохранить в текстовый файл.
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
Меня трудно приручить
Со мной можно дружить
Приятно общаться
Невозможно забыть
Я вас не заставляю
Iska, не оно.
Не из файла слова брать, через переменную set.
Anonymоus
15-10-2011, 09:14
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 с файлом - важен ведь результат, а не метод.
Anonymоus, спасибо. Еще такой вопрос, с первым кодом только почему-то сохраняются две строки.
Не легко остановить
Можно понять
В коде слово укоротил:
Set Words=легко,понять,аться
Тогда все три строки.
Не легко остановить
Можно понять
Приятно общаться
Пробовал с другим текстом, тоже самое, какое слово полностью можно оставить, какое нужно урезать. В чем может быть дело?
Anonymоus
15-10-2011, 09:44
Flayer, я же специально указал, сохраняйте в кодировке 866 и текст, и скрипт. Подозреваю, что проблема в букве "щ", когда я тестировал с кодировкой 1251 - тоже последняя строка не писалась в создаваемый файл, когда убрал - все в порядке стало. С 866 нормально всё.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC