Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Парсер строк TXT файла

Ответить
Настройки темы
CMD/BAT - [решено] Парсер строк TXT файла

Новый участник


Сообщения: 7
Благодарности: 0

Профиль | Отправить PM | Цитировать


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

Отправлено: 01:10, 15-10-2011

 

Старожил


Сообщения: 415
Благодарности: 257

Профиль | Отправить PM | Цитировать


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

Отправлено: 02:46, 15-10-2011 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


Сообщения: 7
Благодарности: 0

Профиль | Отправить PM | Цитировать


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

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

Отправлено: 03:37, 15-10-2011 | #3


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


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

Отправлено: 05:53, 15-10-2011 | #4


Новый участник


Сообщения: 7
Благодарности: 0

Профиль | Отправить PM | Цитировать


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

Пример слов:
Цитата:
легко, понять, общаться
Конечный результат:
Цитата:
Не легко остановить
Можно понять
Приятно общаться
Сохранить в текстовый файл.

Последний раз редактировалось Flayer, 15-10-2011 в 07:23.


Отправлено: 06:59, 15-10-2011 | #5


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


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
Цитата:
Код: Выделить весь код
Меня трудно приручить
Со мной можно дружить
Приятно общаться
Невозможно забыть
Я вас не заставляю
Это сообщение посчитали полезным следующие участники:

Отправлено: 07:27, 15-10-2011 | #6


Новый участник


Сообщения: 7
Благодарности: 0

Профиль | Отправить PM | Цитировать


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

Отправлено: 07:32, 15-10-2011 | #7


Старожил


Сообщения: 415
Благодарности: 257

Профиль | Отправить PM | Цитировать


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, 15-10-2011 в 09:24.

Это сообщение посчитали полезным следующие участники:

Отправлено: 09:14, 15-10-2011 | #8


Новый участник


Сообщения: 7
Благодарности: 0

Профиль | Отправить PM | Цитировать


Anonymоus, спасибо. Еще такой вопрос, с первым кодом только почему-то сохраняются две строки.
Цитата:
Не легко остановить
Можно понять
В коде слово укоротил:
Цитата:
Set Words=легко,понять,аться
Тогда все три строки.
Цитата:
Не легко остановить
Можно понять
Приятно общаться
Пробовал с другим текстом, тоже самое, какое слово полностью можно оставить, какое нужно урезать. В чем может быть дело?

Отправлено: 09:41, 15-10-2011 | #9


Старожил


Сообщения: 415
Благодарности: 257

Профиль | Отправить PM | Цитировать


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

Отправлено: 09:44, 15-10-2011 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Парсер строк TXT файла

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Печать последних 10 строк из txt файла. valen Скриптовые языки администрирования Windows 9 01-02-2016 11:31
CMD/BAT - Удалить несколько строк из файла GhostKU Скриптовые языки администрирования Windows 1 01-09-2011 18:40
CMD/BAT - [решено] Вставка строк в конкретные строки (txt) alexey_vf Скриптовые языки администрирования Windows 2 06-06-2011 14:58
CMD/BAT - [решено] Созд.*.txt по имени файла, с перемещением *.txt и файла в папку с именем файла. OSArev Скриптовые языки администрирования Windows 2 30-01-2011 11:58
CMD/BAT - [решено] Разработать программу которая будет считать кол-во символов,строк,слов в .txt klenb Скриптовые языки администрирования Windows 10 18-05-2010 15:19




 
Переход