Главная страница


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)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 оптимальное решение   Sergey Sventitski   01 Sep 2002 16:29:54 
 Re: оптимальное решение   Anthony Dragunov   02 Sep 2002 22:29:38 
 оптимальное решение   Alan Long   02 Sep 2002 02:43:32 
Архивное /ru.perl/4581d7294d42.html, оценка 3 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional