The OpenNET Project / Index page

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

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"построчная считка значений из файла"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"построчная считка значений из файла" 
Сообщение от Sasha emailИскать по авторуВ закладки(??) on 21-Фев-05, 12:13  (MSK)
Народ, помогите плииз.
Есть у меня файл, допустим 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)сумировало их и выводило эти значения в  новый файл???
Помогите плииз, а то повесят на работе.(((

  Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

 Оглавление

Индекс форумов | Темы | Пред. тема | След. тема
Сообщения по теме

1. "построчная считка значений из файла" 
Сообщение от allez Искать по авторуВ закладки(ok) on 21-Фев-05, 13:22  (MSK)
А пробелы после знака равенства в этом файле, так же как и в примере, то есть, то нет?
Это я к тому, что они могут сделать бяку при разделении строки с помощью 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

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

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


  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

3. "построчная считка значений из файла" 
Сообщение от XMan Искать по авторуВ закладки(ok) on 21-Фев-05, 14:18  (MSK)
Как вариант:

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

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

4. "построчная считка значений из файла" 
Сообщение от allez Искать по авторуВ закладки(ok) on 21-Фев-05, 14:32  (MSK)
#!/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\=/,$_);

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

5. "построчная считка значений из файла" 
Сообщение от XMan Искать по авторуВ закладки(ok) on 21-Фев-05, 17:01  (MSK)
Встречная поправка для случая, если читается в $_ (например, посредством while (<>)):

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

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

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

6. "построчная считка значений из файла" 
Сообщение от Sasha Искать по авторуВ закладки(??) on 21-Фев-05, 17:31  (MSK)
спасибо, получилось. Правда своими силами. Выводится массив в текстовый файл. такого вида:
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
Подскажите плиз

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

7. "построчная считка значений из файла" 
Сообщение от Vladimir D Belousov emailИскать по авторуВ закладки on 25-Фев-05, 10:22  (MSK)
>спасибо, получилось. Правда своими силами. Выводится массив в текстовый файл. такого вида:
>
>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);

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

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх


Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Пожалуйста, прежде чем написать сообщение, ознакомьтесь с данными рекомендациями.




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

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