1 Востаннє редагувалося Дмитро-Чебурашка (18.05.2016 00:44:28)

Тема: Допоможить будь ласка програмно створити таблицю

Добрій ночі! Допоможіть, будь ласка. треба виконати завдання будь-яким зручним або незручним засобом.  Потрібно можливо вже завтра, а я за два тижні взагалі неспромігся зробити, а вкрай, аж закрай треба. Аж дуже.

Спробую якось сформулювати завдання.
Треба скласти таблицю з рядків, що знаходяться усередині файлу ЛІКАРСЬКІ РОСЛИНИДовідник- покажчик.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.

Отже. Рядок розпочинається з цифри потім крапка. Елемент складається з: подвійна квадр. відкривающя дужка, потім цифри, потім крапка, потім різні символи  і подвійні квадратні дужки, яки закриваються.

Тобто я бажаю екзешник або таку прогу на якоїсь мові, щоб таблиця сама складалася.

2 Востаннє редагувалося 221VOLT (19.05.2016 08:07:48)

Re: Допоможить будь ласка програмно створити таблицю

:D  тричі промедитував, читаючи це завдання)
:D  :D  :D відчув себе блондинчиком, що це за мантри?))

напевно я можу це зробити - на php, erlang чи навіть з екзешником,
проте я гублюся серед цих мантр ...

Подякували: Дмитро-Чебурашка1

Re: Допоможить будь ласка програмно створити таблицю

Так, я баран .... я не вмію чітко зрозуміло писати.
Будь ласка запитайте будь-які деталі конкретно.
Я прямо зараз відійду, я вийду за цукром, мене тато посилає.

4

Re: Допоможить будь ласка програмно створити таблицю

Вам треба парсер бази написати? Де сама база? (яка мова), і яка кінцева мета?

5

Re: Допоможить будь ласка програмно створити таблицю

Наскільки я зрозумів, вам треба позбирати символьні стрічки з однаковими індексами (цифрами на початку) по рядках з відповідними номерами, а стовпчик має відповідати послідовності, в якій вони зустрілися в файлі.
Наприклад, початковий файл

[[1.A]]пустийвміст[[2.B]]пустийвміст[[1.C]]

дає таблицю

A C
B

В файлі 6 мегабайт - тобто для сучасної програми немає жодної проблеми його завантажити в пам'ять. Все правильно?

6 Востаннє редагувалося Дмитро-Чебурашка (19.05.2016 15:21:48)

Re: Допоможить будь ласка програмно створити таблицю

Так, абсолютно точно.  треба позбирати символьні стрічки з однаковими індексами.
Хвилинку..

Ще ось типовий приклад того, як воно зустрічається у файлі.
Фактично нижче повністю репрезентативний образець того, що зустрічаеться в файлі.


<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. !!!!!!!!!!!!!!!!!!!!!


Зараз я вручну сформулюю таблицю, хоч частково.

7

Re: Допоможить будь ласка програмно створити таблицю

Отже, треба:
- розпарсити файл;
- зустрічні стрічки записати у цю вашу структуру (це по факту навіть не таблиця, а масив масивів);
- зберегти її в другий файл з вашими позначками.
Із чим виникають проблеми?

Подякували: 221VOLT1

8 Востаннє редагувалося Дмитро-Чебурашка (19.05.2016 16:17:23)

Re: Допоможить будь ласка програмно створити таблицю

|! 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.ДророБуимиРваробнуы]] |

Так. Так. А це один горизонтальний рядок таблиці.
Я написав програму на перл, але не можу впоратися з масивами. Я запускаю її батником, але програма просто падає, зникає .. Я покажу код, він щоправда края ,,брудний,,. Компілятора С ++ я не можу запустити жодного, вже тиждень .. Я трохи пізніше цим обов'язково займуся. Мені казали (писали) що я повинен поправити якись.. жорстки покажчики, з плагином NTFSLinks до TotalCommander-а.  Я цей NTFSLinks зкачав але ничого ще не зробив, я поспішаю, голова горить, я їх не знаю з чим їх їдять, текст англійською, я взагалі поки гублюся .. Я зрозумів що швидко не поправлю.

 #!/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__

9 Востаннє редагувалося FakiNyan (19.05.2016 15:51:42)

Re: Допоможить будь ласка програмно створити таблицю

Прихований текст

тег code вам о чьом-то говоріт?
поки писав, вже пофіксили

Re: Допоможить будь ласка програмно створити таблицю

Так, було забув