разбор определенных данных из файла .txt в excel или что-то еще

Я извлек данные из одного источника в файл .txt. Источником является какая-то адресная книга, и я использовал макрорекордер для извлечения. Теперь у меня есть несколько файлов, которые отформатированы именно так (пример на 4-х контактах):

Abbrucharbeiten
ATR Armbruster
Werkstr. 28
78727 Oberndorf  
Tel. 0175 7441784
Fax 07423 6280
Abbrucharbeiten
Jensen & Sohn, Karl
Schallenberg 6A
25587 Münsterdorf
Tel. 04821 82538
Fax 04821 83381
Abbrucharbeiten
Kiwitt, R.
Auf der Heide 54
48282 Emsdetten
Tel. 02572 88559
Tel. 0172 7624359
Abbrucharbeiten, Sand und Kies, Transporte, Kiesgruben, Erdbau
Josef Grabmeier GmbH
Reitgesing 1
85560 Ebersberg
Tel. 08092 24701-0
Fax 08092 24701-24

1-я строка всегда представляет собой поле (название) бизнеса 2-я строка всегда представляет собой название компании/фирмы 3-я строка всегда представляет собой адрес улицы 4-я строка всегда представляет собой почтовый индекс и место, а затем 5-я строка и следующие несколько строк (иногда две строки, а иногда и больше) Эйтар Тел. или факс.

Я хочу отформатировать его, чтобы это было что-то вроде листа excel, например:

Branche:    Name:     Address:   Place:    contact1:   contact2:
1st row     2nd row   3rd row    4th row   5th row     6th row.....

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


person dzordz    schedule 29.05.2013    source источник
comment
Итак, вы хотите написать код для извлечения?   -  person Nida Sahar    schedule 29.05.2013
comment
если это можно решить с помощью некоторого кода, чем да, у меня есть небольшой опыт работы с python и vbs, но не так много, чтобы решить эту проблему   -  person dzordz    schedule 29.05.2013
comment
да, у каждого name есть Branche, хотя branche не всегда одно и то же, в верхнем примере вы можете видеть, иногда это просто один элемент, иногда несколько элементов, например, иногда только 'Abbrucharbeiten' или 'Transporte', а иногда его 'Abbrucharbeiten, Transporte'   -  person dzordz    schedule 29.05.2013


Ответы (1)


Ни python, ни visual basic, но не должно быть очень сложно перевести на эти языки. Это perl.

perl -lne '
        ## Print header. Either the header and data will be separated with pipes.
        ## Contacts(contact1, contact2, etc) are not included because at this 
        ## moment I can not know how many there will be. It could be done but script
        ## would be far more complex.
        BEGIN { 
                push @header, q|Branche:|, q|Name:|, q|Address:|, q|Place:|;
                printf qq|%s\n|, join q{|}, @header;
        }

        ## Save information for each contact. At least six lines. Over that only
        ## if lines begins with strings "Tel" or "Fax".
        if ( $line < 6 || m/\A(?i)tel|fax/ ) {
                push @contact_info, $_;
                ++$line;

                ## Not skip the printing of last contact.
                next unless eof;
        }

        ## Print info of contact, initialize data structures and repeat process
        ## for the next one.
        printf qq|%s\n|, join q{|}, @contact_info;

        $line = 0;
        undef @contact_info;

        push @contact_info, $_;
        ++$line;

' infile

Это однострочник (я знаю, что это не кажется, но вы можете избавиться от комментариев и удалить новые строки, чтобы получить его), поэтому запускайте его прямо из вашей оболочки. Это дает:

Branche:|Name:|Address:|Place:
Abbrucharbeiten|ATR Armbruster|Werkstr. 28|78727 Oberndorf  |Tel. 0175 7441784|Fax 07423 6280
Abbrucharbeiten|Jensen & Sohn, Karl|Schallenberg 6A|25587 Münsterdorf|Tel. 04821 82538|Fax 04821 83381
Abbrucharbeiten|Kiwitt, R.|Auf der Heide 54|48282 Emsdetten|Tel. 02572 88559|Tel. 0172 7624359
Abbrucharbeiten, Sand und Kies, Transporte, Kiesgruben, Erdbau|Josef Grabmeier GmbH|Reitgesing 1|85560 Ebersberg|Tel. 08092 24701-0|Fax 08092 24701-24

Учтите, что я не печатал полный заголовок и что поля разделены вертикальной чертой. Я думаю, что не проблема импортировать его в Excel.

person Birei    schedule 29.05.2013
comment
@pnuts: я не знаю, что вы имеете в виду под колонкой для факса. Насколько я понимаю вопрос, у одних контактов не может быть ни одного факса, а у других их несколько. То же самое для телефонов. В любом случае, это только начало решения его проблемы, и вполне вероятно, что ему придется настроить ее под свои нужды. - person Birei; 29.05.2013