Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите пожалуйста написать программу, парсить файл и составить таблицу из найд 
:(
    Опции темы
Dmm
Дата 20.5.2016, 14:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 3.12.2015

Репутация: нет
Всего: нет



Я получается не умею хорошо и коротко описать что я хочу.
Я отвечу на всякие уточняющие вопросы.

Значит, надо:
- Распарсить файл;
- Встречные ленты записать в эту вашу структуру (это по факту даже не таблица, а массив массивов)
- Сохранить ее в другой файл в виде таблицы.

Мне надо собрать символьные ленты с одинаковыми индексами (цифрами вначале) по строкам с соответствующими номерами, а вертикальный столбик должен соответствовать цифре в найденной ленте, с которой они встретились в файле.

Помогите, пожалуйста. надо выполнить задание любым удобным или неудобным средством. Нужно было уже вчера, сегодня надо до очень, а я за две недели вообще неспромигся сделать, а очень, вплоть закрай надо. Уж очень.

Попробую как-то сформулировать задачи.
Надо составить таблицу из строк, находятся внутри файла ЛЕКАРСТВЕННЫЕ РОСЛИНИДовидник- покажчик.htm

Кодирования UTF8.

Важно составить все найденные строки в таблицу, разделители элементов этой таблицы выглядят так |!

есть

|! А |! б |! В |
|! Г |! Д |! Е |

Итак, программа читает файл.

Находит среди него строчки, начинающиеся на число с точки. Вроде 112. трумрлое боротрумкдеродереваспрвовидабаорпмуне
Это - начало будущей таблицы, первый ее столбец, соответственно первый элемент массива, @KonstruktorRj [0] [N].

Далее нужно искать элементы виду [[01.Буонуымаркючуы, прукропджуючуы, Бутрумр зтрумртрумтрумрльнозмуыцнюючуы. ]]
[[14.ЭслунРваово-РваиЭсРваовуы (Бутрумр прукропджуючуы трумрДроеБуиБу)]]
[[15.Дророноснуы]]
[[18.ЗтрумрсБуосовувтрумрнуы Дрор виртрумрзРваовуый ботрйробуы]]
[[25.ткуржачотрумуыннуы, зтрумрсБуосовувтрумрнуы Дрор зтрумрботрйрювтрумрннях Дроеченуы, ткуржачних Эсляхутурумуыв, ткуржачнотрумо муыхутурумуру.]]
[[37.ЗтрумрсБуосовувтрумрнуы Дрор БууберРваульомаркы летруменуыв]]
[[40.РваровосДроинюючуы]]
[[41.Ртрумрнозтрумртрумоювтрумрльнуы]]
[[43.ДророБуиблювоБунуы]]
[[44.ДророБуизтрумрДротрумрльнуы]]
[[50.ЗтрумрсБуосовувтрумрнуы Дрор кабанов зтрумрботрйрювтрумрннях]]
[[54.ДророБуимиРваробнуы]]

Каждый из них, надо вписывать по адресу [14] [N], [15] [N], [18] [N] и так далее.

Если снова встречается строка, начинается с цифры и точки, начинается следующий, расположенный ниже строка таблицы [14] [N 1] соответственно.

Ну, это, вся таблица имеет 58 ячеек, длина ее вниз заранее неизвестна.

И вся она пороздилена знаками

|! 1.Росбирлинтрумр |! [[01.Буонимаркючуы, прукропджуючуы, Бутрумр зтрумртрумтрумрльнозмуыцнюючуы. ]] |! [[02.ЗтрумрсДрооРвауыйливуы]] |! [[03.ЗтрумрсБуосовувтрумрнуы Дрор безсоннуы]] |! [[04.БолдрбреуБуохутубормраочуы]] |! Нифига Нет (Туда сюда) |! ............... [[58.ЗтрумрсБуосовувтрумрнуы Дрор зтрумрботрйрювтрумрннях нироРва уы Боитсечовыкрумпрапиэыых Эсляхутурумуыв]] |

Каждая строка этой таблицы начинается |! и заканчивается |.

Все это находится в файле 20090224.1006370211.20160310.1000110484.html (Пофиг, неважно где)

длиной 5 * 931 * 783 байт

Полезные, необходимые строки, это 1) Цифра и точка от края 2) в кавычках цифра и текст. 3) Цифра в кавычках
она же является номером в горизонтальном ряду.

Примерно вот так выглядит в файле нужны, необходимы места, те которые надо втиснуть в таблицу.

123. трумрсБуртрумртрумтрумрл дтрумрБусьРваий
[[01.Буонуымаркючуы, прукропджуючуы, Бутрумр зтрумртрумтрумрльнозмуыцнюючуы. ]]
[[02.зтрумрсДрооРвауыйливуы]]
[[14.ЭслунРваово-РваиЭсРваовуы (Бутрумр прукропджуючуы трумрДроеБуиБу)]]
[[15.Дророноснуы]]
[[18.зтрумрсБуосовувтрумрнуы Дрор виртрумрзРваовуый ботрйробуы]]
[[25.ткуржачотрумуыннуы, зтрумрсБуосовувтрумрнуы Дрор зтрумрботрйрювтрумрннях Дроеченуы, ткуржачних Эсляхутурумуыв, ткуржачнотрумо муыхутурумуру.]]
[[37.зтрумрсБуосовувтрумрнуы Дрор БууберРваульомаркы летруменуыв]]
[[40.РваровосДроинюючуы]]
[[41.Ртрумрнозтрумртрумоювтрумрльнуы]]
[[43.ДророБуиблювоБунуы]]
[[44.ДророБуизтрумрДротрумрльнуы]]
[[50.зтрумрсБуосовувтрумрнуы Дрор кабанов зтрумрботрйрювтрумрннях]]
[[54.ДророБуимиРваробнуы]]

124. трумрртрумрлуыя мтрумрнчжурсьРватрумр
[[01.Буонуымаркючуы, прукропджуючуы, Бутрумр зтрумртрумтрумрльнозмуыцнюючуы. ]]
[[08.зтрумрсБуосовувтрумрнуы Дрор Хетикаапиэыых уы Дросихутурумуычних зтрумрботрйрювтрумрннях]]

971.

Итак. Строка начинается с цифры затем точка. Элемент состоит из: двойная кв. видкривающя скобка, затем цифры, затем точка, затем различные символы и двойные квадратные скобки, яки закрываются.

То есть я хочу экзешник или такую ​​прогу на какой-то языке, чтобы таблица сама состояла. 


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

Код

     #!/usr/bin/perl -w
    use utf8;                  # говорит Perl что код нашей программа написан в кодировке utf8.
    use open qw(:std :utf8);   # говорит Perl что все потоки STDIN, STDOUT, STDERR должны работать с utf8.
    use warnings;
    sleep(10);
     
    my $str = "abc";
        $str =~ /(((a)(b))(c))/;
        print "1: $1 2: $2 3: $3 4: $4 5: $5\n";
        # prints: 1: abc 2: ab 3: a 4: b 5: c
    sleep(10);
     
     
     
    @BUFFER_temp = ();
    $GLOBAL_lichylnyk = 0; $zvIryuvalnik = 0;
     
    $FileNazva_1   =  'OPAfile.txt';
    $Nazvadopovnjuvach = 'New_';
    $FileNazva_2 = $Nazvadopovnjuvach.$FileNazva_1;
    $FileNazva_3 = $Nazvadopovnjuvach.$FileNazva_2;
     
     
    $Rjadky = 0;
     
    $N = 1;
    @KonstruktorRjadkiv = ([59][$N]);
                         for($U=0;$U<=58;$U++)  
                                { 
                                    @KonstruktorRjadkiv [$U][$N-1]= ('|!    Немає значення     ');
                                      @KonstruktorRjadkiv [58][$N-1]= ('|!    Немає значення  |  '. "\n";);
                                }    
     
    print "$FileNazva_2";
     
    open FILEHANDLE_2, ">>$FileNazva_2";
           #Відкриємо файл для читання Ñ– створимо іншого файлу, для запису в нього зміненого тексту.
    open FILEHANDLE_1, $FileNazva_1;
     
    open FILEHANDLE_3, ">>$FileNazva_3";
     
     
    sub Vpysuvats{
                       
                       
           if($zvIryuvalnik-$N >=2)
                       {     
                            $N = $zvIryuvalnik;
                                                     for($U=0;$U<=57;$U++)  
                                { 
                                    @KonstruktorRjadkiv [$U][$N-1]= ('|!    Немає значення     ');
                                    @KonstruktorRjadkiv [58][$N-1]= ('|!    Немає значення  |  '. "\n";);                                  
                                }    
                        }
     
    }
     
     
    while (defined (my $file_line = <FILEHANDLE_1>)) {
     
        sub Ste
        {
            if ($zvIryuvalnik-$GLOBAL_lichylnyk>=2)
            {                                   #блок стеження за лічильниками
                     print 'Ste Ste Ste Ste Ste Ste Ste Ste Ste Ste Ste Ste';
                       
                     print $file_line; print "/n";
                     #push @BUFFER_temp, $file_line;
                                    Vpysuvats;
                                       $temp2= @BUFFER_temp[$GLOBAL_lichylnyk];
                                       $temp3= $temp2. ' |';
                                       $temp4= $temp3. "\n";
                                       @BUFFER_temp[$GLOBAL_lichylnyk]=  $temp4;
                                       print FILEHANDLE_2 "$BUFFER_temp[$GLOBAL_lichylnyk]";
                     $GLOBAL_lichylnyk++;
     
     
     
            }
        }
     
            $Rjadky++;
            print " Tse rjadok $Rjadky\n";
            for ($i=0; $i<=$GLOBAL_lichylnyk; $i++)
                 {
                    print  "A sho my maemo $i @BUFFER_temp[$GLOBAL_lichylnyk]\n";
                 }
                 #sleep 30;
            
            #@BUFFER_temp = ();
            if ($file_line =~ m/(^.*(([0-9]{3}) (.*) )$)/) #Шукаємо число з трьох цифр в кожному рядку Ñ– виділяємо окремо число Ñ– залишившийсь у залишку подальший рядок
               {
                       print 'elsif 0';
                       
                       $zvIryuvalnik++;
                       Ste;
                       print "1: $1 2: $2 3: $3 4: $4 5: $5 6: $6 7: $7 8: $8\n";
                       $temp = $1;
                       $temp =~ s/\s+$//;#Чтобы отсечь "хвостовые" Ð¿Ñ€Ð¾Ð±ÐµÐ»Ñ‹, годится
                       $temp = ' |!'. $temp;# дописати спочатку роздільник таблиці
                                print "GLOBAL_lichylnyk: $GLOBAL_lichylnyk  temp: $temp \n";
                                      #push $BUFFER_temp[$GLOBAL_lichylnyk], $temp;
                                       $temp2= @BUFFER_temp[$GLOBAL_lichylnyk];
                                       $temp3= $temp2.$temp;
                                       @BUFFER_temp[$GLOBAL_lichylnyk]=  $temp3;
                                       
                        $nomer = $2;
     
                        @KonstruktorRjadkiv [0][$N-1]=  $temp3;                    
                       
     
                }
     
                elsif ($file_line =~ /(^.*([0-9]{3})(.*)$)/)
                {
                       $zvIryuvalnik++;
                       print 'elsif 1';
                       
                       print 'Ste';
                       
                       Ste;
                       
                       print "1: $1 2: $2 3: $3 4: $4 5: $5 6: $6 7: $7 8: $8\n";
                       $temp = $1;
                       $temp =~ s/\s+$//;#Чтобы отсечь "хвостовые" Ð¿Ñ€Ð¾Ð±ÐµÐ»Ñ‹, годится
                       $temp = ' |!'. $temp;# дописати спочатку роздільник таблиці
                                       print "GLOBAL_lichylnyk: $GLOBAL_lichylnyk  temp: $temp \n";
                                       #push $BUFFER_temp[$GLOBAL_lichylnyk], $temp;
                                       $temp2= @BUFFER_temp[$GLOBAL_lichylnyk];
                                       $temp3= $temp2.$temp;
                                       @BUFFER_temp[$GLOBAL_lichylnyk]=  $temp3;
                                       
                        @KonstruktorRjadkiv [0][$N-1]=  $temp3;               
                       
                }
     
                elsif ($file_line =~/(\[{2}([0-9]{2})\.[^\[\]]*\]{2})/)
                {
                       print 'elsif 2';
                       
     
                       
                       
                       $temp = $1;
                       $temp =~ s/\s+$//;#Чтобы отсечь "хвостовые" Ð¿Ñ€Ð¾Ð±ÐµÐ»Ñ‹, годится
                       $temp = ' |!'. $temp;# дописати спочатку роздільник таблиці
                                      #push $BUFFER_temp[$GLOBAL_lichylnyk], $temp;
                                       $temp2= @BUFFER_temp[$GLOBAL_lichylnyk];
                                       $temp3= $temp2.$temp;
                                       @BUFFER_temp[$GLOBAL_lichylnyk]=  $temp3;
                                       
                        $nomer = $2;
     
                        @KonstruktorRjadkiv [$nomer][$N-1]=  $temp3;                   
                                       
                }
     
     
     
     
            #sleep(25);
            #print "A thi zminulysja zminni? 1: $1 2: $2 3: $3 4: $4 5: $5 6: $6 7: $7 8: $8\n";
            #sleep(25);
     
    }
     
    print FILEHANDLE_3 "@KonstruktorRjadkiv";
     
    # $file_line =~ m/^.([0-9]{3}s (.*) )$/;
    #$file_line =~ m/^.([0-9]{3}[A-Za-z]+(\.[09]*)?)([CF])$/;
     
    # s - це спеціальний символ, який вказує на будь-який символ з підмножини пробільних (пробіл, табуляція, etc ...) Ð£Ñ‚очню.  Ð²ÐºÐ°Ð·ÑƒÑ” на одиничний пробільний символ.
    # ^ - в контейнері заперечення     ÐÑƒ тобто перевертання значення
    # Часто використовується послідовність .* для позначення будь-якої кількості будь-яких символів між двома частинами регулярного виразу.
     
     
     
     
    close FILEHANDLE_2;
     
    close FILEHANDLE_1;
     
    close FILEHANDLE_3;
     
     
     
    #(*) -
     
    #Операція, яка позначається крапкою "." Ð¿Ð¾Ñ”днує дві текстові змінні. Результатом цієї дії Ñ” третій рядок, який дорівнює першому Ñ– другому рядкам разом взятим. Англійською мовою операція об'єднання двох рядків зветься "concatenation". Не маючи кращого варіанту, я буду звати Ñ—Ñ— конкатенацією (на слух сприймається як дуже розумне слово - Ñ– це основна причина його вживання).
     
     
      __END__



Вот еще наглядный пример и образца.
Еще вот типичный пример того, как оно встречается в файле.
Фактически ниже полностью репрезентативный образец того, что встречается в файле.


<pre>
.......*****************....
112. трумрлоє боротрумкдеродереваспрвовидабаорпмунє
[[01.Буонуымаркючуы, прукропджуючуы, Бутрумр зтрумртрумтрумрльнозмуыцнюючуы. ]]
[[14.ЭслунРваово-РваиЭсРваовуы (Бутрумр прукропджуючуы трумрДроеБуиБу)]]
[[15.Дророноснуы]]
[[18.ЗтрумрсБуосовувтрумрнуы Дрори виртрумрзРваовуый ботрйробуы]]
[[25.ткуржачотрумуыннуы, зтрумрсБуосовувтрумрнуы Дрори зтрумрботрйрювтрумрннях Дроеченуы, ткуржачних Эсляхутурумуыв, ткуржачнотрумо муыхутурумуру.]]
[[37.ЗтрумрсБуосовувтрумрнуы Дрори БууберРваульомаркы лєтрумєнуыв]]
[[40.РваровосДроинюючуы]]
[[41.Ртрумрнозтрумртрумоювтрумрльнуы]]
[[43.ДророБуиблювоБунуы]]
[[44.ДророБуизтрумрДротрумрльнуы]]
[[50.ЗтрумрсБуосовувтрумрнуы Дрори кабаних зтрумрботрйрювтрумрннях]]
[[54.ДророБуимиРваробнуы]]

123. трумрсБуртрумртрумтрумрл дтрумрБусьРваий
[[01.Буонуымаркючуы, прукропджуючуы, Бутрумр зтрумртрумтрумрльнозмуыцнюючуы. ]]
[[02.зтрумрсДрооРвауыйливуы]]
[[14.ЭслунРваово-РваиЭсРваовуы (Бутрумр прукропджуючуы трумрДроеБуиБу)]]
[[15.Дророноснуы]]
[[18.зтрумрсБуосовувтрумрнуы Дрори виртрумрзРваовуый ботрйробуы]]
[[25.ткуржачотрумуыннуы, зтрумрсБуосовувтрумрнуы Дрори зтрумрботрйрювтрумрннях Дроеченуы, ткуржачних Эсляхутурумуыв, ткуржачнотрумо муыхутурумуру.]]
[[37.зтрумрсБуосовувтрумрнуы Дрори БууберРваульомаркы лєтрумєнуыв]]
[[40.РваровосДроинюючуы]]
[[41.Ртрумрнозтрумртрумоювтрумрльнуы]]
[[43.ДророБуиблювоБунуы]]
[[44.ДророБуизтрумрДротрумрльнуы]]
[[50.зтрумрсБуосовувтрумрнуы Дрори кабаних зтрумрботрйрювтрумрннях]]
[[54.ДророБуимиРваробнуы]]

124. трумрртрумрлуыя мтрумрнчжурсьРватрумр
[[01.Буонуымаркючуы, прукропджуючуы, Бутрумр зтрумртрумтрумрльнозмуыцнюючуы. ]]
[[08.зтрумрсБуосовувтрумрнуы Дрори Хетикаапиэыых уы Дросихутурумуычних зтрумрботрйрювтрумрннях]]

971. !!!!!!!!!!!!!!!!!!!!!


Сейчас я вручную сформулирую таблицу, хоть частично.
А это одна горизонтальная строка таблицы.

|! 112. трумрлоє боротрумкдеродереваспрвовидабаорпмунє |! [[01.Буонуымаркючуы, прукропджуючуы, Бутрумр зтрумртрумтрумрльнозмуыцнюючуы. ]]|! [[02.Немає. ]]|! |! [[03.Немає. ]] |! [[04.Немає. ]] |! [[05.Немає. ]] |! [[06.Немає. ]] |! [[07.Немає. ]]|! [[08.Немає. ]] |! [[09.Немає. ]] |! [[10.Немає. ]] |! [[11.Немає. ]] |! [[12.Немає. ]] |! [[13.Немає. ]] |! [[14.ЭслунРваово-РваиЭсРваовуы (Бутрумр прукропджуючуы трумрДроеБуиБу)]]|! [[15.Дророноснуы]]|! |! [[16.Немає. ]] |! [[17.Немає. ]] |! [[18.ЗтрумрсБуосовувтрумрнуы Дрори виртрумрзРваовуый ботрйробуы]] |! [[19.Немає. ]] |! [[20.Немає. ]] |! [[21.Немає. ]] |! [[22.Немає. ]] |! [[23.Немає. ]] |! [[24.Немає. ]] |! [[25.ткуржачотрумуыннуы, зтрумрсБуосовувтрумрнуы Дрори зтрумрботрйрювтрумрннях Дроеченуы, ткуржачних Эсляхутурумуыв, ткуржачнотрумо муыхутурумуру.]] |! [[26.Немає. ]] |! [[27.Немає. ]] |! [[28.Немає. ]] |! [[29.Немає. ]] |! [[30.Немає. ]]  |! [[31.Немає. ]] |! [[32.Немає. ]] |! [[33.Немає. ]] |! [[34.Немає. ]] |! [[35.Немає. ]] |! [[36.Немає. ]] |! [[37.ЗтрумрсБуосовувтрумрнуы Дрори БууберРваульомаркы лєтрумєнуыв]] |! [[38.Немає. ]] |! [[39.Немає. ]] |! [[40.РваровосДроинюючуы]] |! [[41.Ртрумрнозтрумртрумоювтрумрльнуы]] |! [[42.Немає. ]] |! [[43.ДророБуиблювоБунуы]] |! [[44.ДророБуизтрумрДротрумрльнуы]] |! [[45.Немає. ]] |! [[46.Немає. ]] |! [[47.Немає. ]] |! [[48.Немає. ]] |! [[49.Немає. ]] |! [[50.ЗтрумрсБуосовувтрумрнуы Дрори кабаних зтрумрботрйрювтрумрннях]] |! [[50.Немає. ]] |! [[51.Немає. ]] |! [[53.Немає. ]] |! [[54.ДророБуимиРваробнуы]] |
PM MAIL   Вверх
Dmm
Дата 20.5.2016, 15:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 3.12.2015

Репутация: нет
Всего: нет



Ну, покажите как с массивами справляться.  Я не до конца понимаю, в чем загвоздка.
Возможно, дайте ссылку на подобный код, с такой вот работой с массивами. 

Может, нам будет быстрее и легче, если вы мне покажите цикл массива.
PM MAIL   Вверх
igorold
Дата 22.5.2016, 18:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 557
Регистрация: 22.12.2005
Где: Россия->Урал-& gt;Миасс

Репутация: 3
Всего: 17



Нам будет легче и проще, если вы скажете, что вам надо ... вкратце, не растекаясь мыслью по дереву ...

Этот ответ добавлен с нового Винграда - http://vingrad.com
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1156 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.