The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
построчная считка значений из файла, !*! Sasha, 21-Фев-05, 12:13  [смотреть все]
Народ, помогите плииз.
Есть у меня файл, допустим tst.123
В нём приблизительно такая инфа:
Name:xxx   Src:0   Max=3000.123   Min=  92.234
Name:yyy   Src:0   Max= 125.222   Min=   0.354
.
.
.
Name:xxx   Src:0   Max=4567.482   Min= 195.567

Вопрос, как мне на перле написать прогу которая бы считывала числовые значения Max и Min (для конкретной строки по имени (yyy, xxx, zzz)сумировало их и выводило эти значения в  новый файл???
Помогите плииз, а то повесят на работе.(((

  • построчная считка значений из файла, !*! allez, 13:22 , 21-Фев-05 (1)
    А пробелы после знака равенства в этом файле, так же как и в примере, то есть, то нет?
    Это я к тому, что они могут сделать бяку при разделении строки с помощью split.

    И второй вопрос: насколько критично в данном случае использование perl? Если пробелов после знаков равенства не будет, то достаточно такой строчки:
    $ cat tst.123 | gawk '{print $3 " " $4}' | gawk -F= '{print $2 " " $3}' | gawk 'BEGIN {min=0; max=0} {max=max+$1; min=min+$3} END {print "Max = " max " Min = " min }' >> tst.out

    • построчная считка значений из файла, !*! Sasha, 14:00 , 21-Фев-05 (2)
      да пробелы то есть то нет.
      И использование перла очень критично. А ещё горит конкретно, как говорится нужно было ещё на позавчера


      • построчная считка значений из файла, !*! XMan, 14:18 , 21-Фев-05 (3)
        Как вариант:

        $var =~ s/\s+//g;
        ($garbage,$max,$min)=split(/Max\=|Min\=/,$var);

      • построчная считка значений из файла, !*! allez, 14:32 , 21-Фев-05 (4)
        #!/usr/bin/perl

        open (IN, "tst.123");

        $max_sum=0;
        $min_sum=0;

        while (<IN>) {

          for ($i=0; $i<6; $i++) {
            ~s/= /=/;
            ~s/  / /;
            ~s/\t/ /;
          }

          @array=split (' ',$_);
          @max=split ('=',$array[2]);
          @min=split ('=',$array[3]);
          $max_sum+=$max[1];
          $min_sum+=$min[1];
        }

        close IN;
        open (OUT, ">tst.out");
        print OUT "Max = $max_sum\tMin = $min_sum\n";
        close OUT;

        P.S.: Пока писал, XMan дал ответ, причем гораздо лучше, чем мой. Внесу единственную поправку:

        $var=$_; # без этого присваивания - не сработает
        $var=~ s/\s+//g;
        ($garbage,$max,$min)=split(/Max\=|Min\=/,$var);

        или, как вариант:

        $_=~ s/\s+//g;
        ($garbage,$max,$min)=split(/Max\=|Min\=/,$_);

        • построчная считка значений из файла, !*! XMan, 17:01 , 21-Фев-05 (5)
          Встречная поправка для случая, если читается в $_ (например, посредством while (<>)):

          s/\s+|\n|\r//g;
          ($garbage,$max,$min)=split(/Max\=|Min\=/);

          PS. \n и \r это на случай, если до этого chomp не делается.

          • построчная считка значений из файла, !*! Sasha, 17:31 , 21-Фев-05 (6)
            спасибо, получилось. Правда своими силами. Выводится массив в текстовый файл. такого вида:
            VitaR -> 47.286
            mc_all -> 0
            Galch -> 20.394
            Pamap -> 0
            Zuk -> 0
            Rakzi -> 0.579
            Myhiv -> 0
            Redex -> 0
            sal -> 0
            Но возник новый вопрос, как написать скрипт, который бы теперь через логин и пароль в html-странице выдавал значение из этого текстового файла (конкретное)ю
            Например логин Login:  VitaR
                           Passwd: 1234
            И результатом исполнения выводится: 47.286
            Подскажите плиз

            • построчная считка значений из файла, !*! Vladimir D Belousov, 10:22 , 25-Фев-05 (7)
              >спасибо, получилось. Правда своими силами. Выводится массив в текстовый файл. такого вида:
              >
              >VitaR -> 47.286
              >mc_all -> 0
              >Galch -> 20.394
              >Pamap -> 0
              >Zuk -> 0
              >Rakzi -> 0.579
              >Myhiv -> 0
              >Redex -> 0
              >sal -> 0
              >Но возник новый вопрос, как написать скрипт, который бы теперь через логин
              >и пароль в html-странице выдавал значение из этого текстового файла (конкретное)ю
              >
              >Например логин Login:  VitaR
              >            
              >   Passwd: 1234
              >И результатом исполнения выводится: 47.286
              >Подскажите плиз


              D httpd.conf включить авторизацию и пользоваться REMOTE_USER в окружении:

              #!/usr/bin/perl
              use strict;

              my $result;
              open(DATA, "</your/file") || die $!;
              while(<DATA>){
                if(/^$ENV{REMORTE_USER}[^\d.]*([\d.]+)[^\d.]+$/){$result = $1; last;}
              }
              close(DATA);
              print "Content-type: text/plain\n\n";
              print $result || "No such user\n";

              Если файл небольшой, то можно

              #!/usr/bin/perl
              use strict;
              $/='';
              open(FILE,"/your/file");
              my $lines=<FILE>;
              close(FILE);
              my $result = ($lines =~ /\b$ENV{REMOTE_USER}\b[^\d.]+([\d.]+)/gsx)[0];
              print "Content-type: text/plain\n\n".($result eq '' ? "No such user" : $result);

              Только $/ восстановить надо




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру