2013-10-09 2 views
0

У меня есть текстовый файл, который мы будем называть info.txt, этот текстовый файл содержит несколько длинных строк, каждый из которых имеет несколько тегов в строке, подобной этой :Batch Script, найдите строку в текстовом файле и разделите на несколько выходных файлов

A bunch of usless info {tag15}data data{Tag1}data {Tag2}data {Tag11}data {Tag1}data {Tag2} 

Так что в этом документе, мне нужно найти {Tag15} и тянуть все между {Tag15} и {Tag11}, или это может быть другой {Tag15} и падение этого сегмента данных в новый текстовый файл. Так что у меня есть один 15.txt и один 11.txt, которые содержат правильные сегменты данных, включая все теги между ним и следующей строкой тега. Таким образом, в этом примере 15.txt будет содержать:

{tag15}data data{Tag1}data {Tag2}data data 
{tag15}data data{Tag1}data {Tag2}data data data data {Tag3}data 
{tag15}data data{Tag1}data {Tag2}data 

И 11.txt будет содержать:

{Tag11}data {Tag1}data {Tag2}data data data {Tag3}data 
{Tag11}data {Tag1}data {Tag2}data 
{Tag11}data {Tag1}data {Tag2}data data 

Это, говорит, что наиболее логичным способом я могу видеть, сделать это было бы найти все Tag15-х и Tag11, и переместите их на новую строку, поэтому нам не нужно определять, сколько времени набор данных, так как он может очень для каждого набора тегов. Затем обработайте файл через другой findstr и вытащите каждую соответствующую строку в соответствующий файл. То, что я не знаю, как это сделать, - это вставить новую строку в точную точку в строке, найденной {tag15} или {tag11}. Есть предположения?

Всего текстовый файл будет содержать около 200-300 этих наборов тегов, которые необходимо разобрать и отсортировать по соответствующим файлам txt. Заранее благодарю вас за любую помощь, которую вы можете предоставить.

Я открыт для других решений, нежели просто пакет, это просто то, с чем мне больше всего нравится.

редактировать:

Я могу понять, почему необходимо больше информации здесь и извиниться за непредоставление его начала. Таким образом, сегменты тега в каждой строке исходного файла всегда начинаются с {tag15} или {tag11}, но теги, которые следуют за этим сегментом, могут меняться в зависимости от данных, которые проталкиваются, например, если Tag2 заполнен Y, чем Tag3 требуется, но если Tag2 равен N, чем Tag3 не будет существовать в сегменте, но tag5,6 или 200 могут. Вот почему я счел нужным найти Tag15 или 11 и перенести его на свою собственную линию, чтобы вам не пришлось зависеть от попытки определить длину строки, которую вы хотите переместить. Пример 15.txt и 11.txt были предназначены, чтобы проиллюстрировать то, что она может выглядеть как из-за различных данных в сегменте, но вот то, что исходный файл может выглядеть так, что получают те:

Line1: FirstLast 55555555 10092013 0000000 {tag15}data data{Tag1}data {Tag2}data data {tag15}data data{Tag1}data {Tag2}data data data data {Tag3}data {Tag11}data {Tag1}data {Tag2}data data data {Tag3}data 
Line2: FirstLast 444444444 10092013 000000005 {Tag11}data {Tag1}data {Tag2}data {tag15}data data{Tag1}data {Tag2}data {Tag11}data {Tag1}data {Tag2}data data 

Мои мысли ты принять этот файл, все данные в нем и найти Tag15 и Tag11 и переместить их в свою собственную линию, чтобы файл будет выглядеть примерно так:

FirstLast 55555555 10092013 0000000 
{tag15}data data{Tag1}data {Tag2}data data 
{tag15}data data{Tag1}data {Tag2}data data data data {Tag3}data 
{Tag11}data {Tag1}data {Tag2}data data data {Tag3}data 
FirstLast 444444444 10092013 000000005 
{Tag11}data {Tag1}data {Tag2}data 
{tag15}data data{Tag1}data {Tag2}data 
{Tag11}data {Tag1}data {Tag2}data data 

Теперь, когда каждая строка является его собственный сегмент мы просто запустите цикл For с помощью Findstr и выделите строки в правильный файл txt или я что-то пропустил? Моя самая большая проблема, о которой я упоминал ранее, я не знаю, как получить файл из исходного состояния в приведенный выше пример, чтобы его можно было отсортировать без необходимости знать точную длину строки, которую мы пытаемся извлечь. Я надеюсь, что это помогает

+2

Пожалуйста, дайте лучшее описание того, что вы извлекаете и чего хотите в целевом файле. Вы указали одну строку в исходном файле и имеете три строки в целевом файле. Пожалуйста, четко укажите ввод и вывод. – foxidrive

+1

Я согласен с foxidrive. Я не могу понять, как вы можете логически ожидать получить ваши файлы 15.txt и 11.txt из одной строки ввода, которую вы опубликовали. – dbenham

+0

Нет рисунка. Пример: как насчет '{Tag3}'? Или где идут последние данные в данных данных {tag15} данных {Tag1} данных {Tag2}? Море необходимо. – Endoro

ответ

0

Итак, я закончил с помощью инструмента, с которым мне было удобнее и было установлено Sed для окон. Я получил эту идею из предложения использовать AWK. Поскольку этот скрипт будет работать только в одном месте, я решил, что установка не родного инструмента не является проблемой. Вот что я придумал для решения этой проблемы:

Set sed=(the path to sed.exe for windows) 
set filedir=Dir the source file is in 
set file=name of source file 
set wout=tag15.txt 
set win=tag11.txt 

:: Locate "FTI0811 " which occurs prior to every {Tag15} tag and call a new line 
%sed% -i -c --expression="s/FTI0811 /&\n/g" %filedir%%file% 
:: Locate XFT811 which occurs prior to every {Tag11} tag and call a new line 
%sed% -i -c --expression="s/XFT811 /&\n/g" %filedir%%file% 
:: Find all strings that start with {Tag15} and echo them out to the Wires Out file variable 
findstr "{tag15}" %filedir%%file% >> %wout% 
:: Find all strings that start with {tag11} and echo them out to the Wires In file variable 
findstr "{tag11}" %filedir%%file% >> %win% 

Спасибо всем за вашу помощь и идеи. Пожалуйста, не стесняйтесь редактировать/комментировать мой метод для этого. Я всегда более чем счастлив получить обратную связь. Извините, что вопрос был немного мрачным для некоторых, из-за моей работы я не мог опубликовать весь исходный файл и то, что он содержит. Еще раз спасибо!

0

Это использует вспомогательный командный файл repl.bat из - http://www.dostips.com/forum/viewtopic.php?f=3&t=3855

Поместите repl.bat в той же папке, что и пакетный файл и текстовый файл.

Попробуйте эту команду на образце вашего файла - i в ix - это сделать его регистрозависимым, поскольку ваши теги в другом случае.

type file.txt |repl "{tag15}" "\r\n{tag15}" ix |repl "{tag11}" "\r\n{tag11}" ix >newfile.txt 

Задача по-прежнему очень мутная/неясная.

Смежные вопросы