2013-09-07 2 views
0

Я пытаюсь экспортировать определенные данные из большого блока непрерывного текста. Я понимаю, что PERL был предназначен для такого. Из примеров в Интернете и в том числе здесь у меня есть некоторые подсказки о том, как это сделать, однако я не могу переносить или модифицировать что-то сразу к моей проблеме.Perl экспортировать/проанализировать данные из большого блока текста

Я считаю, что я делаю довольно просто.

Пример исходные данные (rawdata.txt) появляется так:

<id>0001</id><first name>John</first name><last name>Smith</last name><height>180</height><weight>95</weight><id>0002</id><first name>David</first name><last name>Jones</last 
name><height>175</height><weight>120</weight><id>0003</id><first name>Jacob</first 
name><last name>Fitzpatrick</last name><height>165</height><weight>105</weight> 

(это не удобно разделены линией, только один непрерывный блок)

Цель 1 выход должен выводиться на (или просто распечатать на экран) идентификаторы всех людей, присутствующих в rawdata, в виде разделенной запятой строки (так что сканирование файла для всей информации, которая содержится в тегах id)

Пример цели 1 вывод из вышеперечисленных исходных данных :

0001,0002,0003 

родственный, но не самостоятелен, цель 2 выхода для печати (опять же на экране или в файл, не имеет значения) первое имя вместе с фамилией, а затем высотой, на построчном -линии основа для каждого человека

Пример цели 2 выход сверху RAWDATA:

John Smith, 180 
David Jones, 175 
Jacob Fitzpatrick, 165 

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

Также с удовольствием посмотрим на любые ресурсы, которые относятся к очень сходные вещи, что мы пытаемся сделать здесь

Спасибо и добрые пожелания, SK

+3

Данные XML, поэтому вы должны использовать синтаксический анализатор XML, а не регулярные выражения. –

ответ

1

Данные похожи на XML. Если зафиксировать формат (т.е. путем изменения <first name> к <first_name>, вы можете использовать правильный XML-парсер, чтобы делать тяжелую работу, например, это как получить ожидаемый результат в XML::XSH2, обертку XML::LibXML:.

open data.xml ; 
echo xsh:join(',', //id) ; 
for //first_name 
    echo :s (.) " " following-sibling::last_name[1] ", " following-sibling::height[1] ; 
+0

Спасибо Sniffer и Choroba за то, что вы вернулись к нам. Что-то вроде этого: http://www.w3schools.com/xml/tryit.asp?filename=tryxml_display_table похоже на то, что мы пытаемся сделать. Вопрос в том, как мы можем это сделать. Есть ли программа, которая почти полностью повторяет то, что сделал веб-сайт? т.е. загружать XML-файл необработанных данных (cd_catalog.xml в этом примере), иметь большой блок, где можно вставить «исходный код», а затем отобразить результат/«Результат»? В основном, что веб-сайт сделал, но офлайн и использовать наш собственный 'cd_catalog.xml' вместо своих? С благодарностью, SK –

+0

@SergeiKrutznetski: Если вы установите 'xsh', вы можете запустить сценарий, который я вам дал, и получить ожидаемый результат в STDOUT. – choroba

0

с помощью простых регулярных выражений,

  if (m/<id>(.*?)</) 
        { 
         push(@rrr, $1); 
        } 
      my $id = join(',', @rrr); 
      print $id; 

Это даст вам идентификаторы, небольшое изменение регулярного выражения получит вам первые имена, фамилию и высоту вы требуете .. Любопытного noobish, потому что я своего рода нового на Perl, и кто-то помог мне с похожим регулярным выражением. Надеюсь, это помогает.

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