|
ru.perl- RU.PERL ---------------------------------------------------------------------- From : Alan Long 2:5030/1082.72 02 Sep 2002 02:43:32 To : Sergey Sventitski Subject : оптимальное решение -------------------------------------------------------------------------------- * Originally from Sergey Sventitski (2:450/118.31) to All. SS> может кто поможет ? SS> есть .... текстовый файл с записями типа : _name_ _e-mail_ _score_ SS> надо .... все это считать, local *IN; my @file_txt; open( IN, "< file.txt" ) or die "Error open input file.txt: $!"; while( <IN> ) { push( @file_txt, [ split(/\s+/, $_ ) ] ); } close( IN ); SS> отсортировать по _score_ my @sorted = sort { $a->[2] <=> $b->[2] } @file_txt; SS> и,скажем, перезаписать. local *OUT; open( OUT, "> file.txt ) or die "Error open output file.txt: $!"; foreach ( @sorted ) { print OUT join( " ", @{ $_ } ); } close( OUT ); В случае записи/чтения я в приведенном выше примере не стал заморачиватся с локами на запись/чтение. Hо общий принцип понять можно. Так-же тут есть тонкость с концами строк. Да. Данные примеры я не проверял на работоспособность, но за основную идею можно взять. SS> Очень слабо представляю, как заменить массив C'шных структур типа. SS> struct my_struct { SS> char name[20]; SS> char email[20]; SS> int score; SS> }; SS> Каким типом данных можно реализовать это в Perl. Можно без SS> ограничений на длину строк. Показанный выше пример использует массив ссылок на массивы (двумерный массив). SS> Пришло в голову использовать массив SS> хэшей. Hе много не понятна начальная инициализация переменных. SS> Можно как-нибудь без нее. При включенной -w и _use strict_ на вещи SS> типа $count = 1; или %hash = (); ругается SS> _explicit package name_. Hапример my $count = 1; все ОК. Правильно ругается, так без my это считается глобальной переменной. При решении данной задачи можно было применить и массив указателей на хеши, то тогда в цикле while(<IN>) нужно было-бы написать: chomp; my @ar = split(/\s+/, $_); push( @file_txt, { name => $ar[0], email => $ar[1], score => $ar[2] } ); после выполнения в @file_txt будет хранится список ссылок на хеши. SS> Можно ли SS> без обьявления типа данных считывать в него записи их файла ?????? Hесколько не понял вопроса, смотря что подразумевать под объявлением типа данных. Если не сложно - поясни. просто в perl $var и @var - это две разные переменные а не переменные разных типов. Первая из них скаляр в которой можно хранить и целые и строковые и числа в формате с плавающей точкой. Hу а вторая переменная может содержать список из 0 и более скаляров. Я-бы порекомендовал для начала почитать что-нибудь про perl для начинающих (идеально было-бы Lama book). -- With best, Ъ-· Ъ Е-ЧLaі\і <alan@x-rays.eu.org> --- timEd/386 1.10+ * Origin: X - Rays Station (2:5030/1082.72) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/4581d7294d42.html, оценка из 5, голосов 10
|