🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.lang.perl
3 messages
3 total messages Started by Zbigniew Zych Thu, 29 Jan 1998 19:58
hash'e
#941
Author: Zbigniew Zych
Date: Thu, 29 Jan 1998 19:58
46 lines
1840 bytes
Mam maila...

W nim nagłówki postaci:
     cosik: insze-cosik
albo:
     cosik insze-cosik

I teraz bym to chciał mieć w tablicy hashowanej, bo tak ładniej :-)

Wydaje mi się że robię to straaasznie na okrętkę, może się da prościej?
(Bo że TMTOWTDI to wiem ;-)


$header = 1;

while(<>) {
  chomp;
  if(/^$/ && $header) {
    $header = 0;
  } elsif ($header) {
    if(/^\t/) {                     # jesli nastepna linia zaczyna sie \t
      $header[$#header] .= "\n$_";  # to jest to kontynuacja poprzedniej
    } else {
      push(@header, $_);
    }
  } else {  # body
    push(@body, $_);
  }
}

foreach(@header) {
  $klucz = $_;
  $tresc = $_;
  $klucz =~ s/([^\s:]+:?)\s(.*)/$1/s;   # to mi sie okrutnie ni podoba, po
  $tresc =~ s/([^\s:]+:?)\s(.*)/$2/s;   # prostu musi sie dac prosciej ;-)
  $header{$klucz} = $tresc;             # i w koncu mamy hasha...
}


Aż mnie boli jak to oglądam.... ;-)
Ja to chce w 3 linijkach!!!!


Zbigniew Zych
-- 
http://onet.pl/~zych/                                mailto:zych@onet.pl
Re: hash'e
#942
Author: Robert Richard George 'reptile' ...
Date: Fri, 30 Jan 1998 16:51
60 lines
3139 bytes
On 98.01.29 Zbigniew Zych pressed the following keys:

> $header = 1;
> 
> while(<>) {
>   chomp;
>   if(/^$/ && $header) {
>     $header = 0;
>   } elsif ($header) {
>     if(/^\t/) {                     # jesli nastepna linia zaczyna sie \t
>       $header[$#header] .= "\n$_";  # to jest to kontynuacja poprzedniej
>     } else {
>       push(@header, $_);
>     }
>   } else {  # body
>     push(@body, $_);
>   }
> }

Do tego to nie mam się gdzie przyczepić, bo sam robię podobną magię.

> foreach(@header) {
>   $klucz = $_;
>   $tresc = $_;
>   $klucz =~ s/([^\s:]+:?)\s(.*)/$1/s;   # to mi sie okrutnie ni podoba, po
>   $tresc =~ s/([^\s:]+:?)\s(.*)/$2/s;   # prostu musi sie dac prosciej ;-)
>   $header{$klucz} = $tresc;             # i w koncu mamy hasha...
> }

foreach(@header) {
   /^([^:]+:\s+(.*)$/;
   $klucz = $1;
   $klucz =~ tr/A-Z/a-z/;                 # pamiętaj o tym, że pole 'name'
                                          # nagłówka w/g rfc822 jest case instensitive!
   $tresc = $2;

   if ($header{$klucz}) {                 # pola w nagłówku mogą się powtarzać
      $header{$klucz} .= ", $tresc"       # należy więc wtedy raczej dodać wartość
   } else {                               # do już istniejącego pola o tej nazwie,
      $header{$klucz} = $tresc            # po przecinku (albo się źle doczytałem :)
   }
}


> 
> Aż mnie boli jak to oglądam.... ;-)
> Ja to chce w 3 linijkach!!!!

No i teraz głowa boli jeszcze bardziej, ale zawsze jak dochodzę do tego,
pocieszam się, że gdybym żył z kopania dołów, nie bolała by mnie głowa, ale
za to bolałby mnie kręgosłup :)

> Zbigniew Zych

Gad

-- 
                                 mailto:reptile@pdi.net :)
                  Women are more complicated than PC... :(
          Look into my headers and you'll see who I am. :)
Re: hash'e
#943
Author: Krzysztof Koczyjan
Date: Sat, 31 Jan 1998 00:10
55 lines
1912 bytes

Zbigniew Zych <zych@use.address.from.sig.onet.pl> wrote in article 
> 
> $header = 1;
> 
> while(<>) {
>   chomp;
>   if(/^$/ && $header) {
>     $header = 0;
>   } elsif ($header) {
>     if(/^\t/) {                     # jesli nastepna linia zaczyna sie \t
>       $header[$#header] .= "\n$_";  # to jest to kontynuacja poprzedniej
>     } else {
>       push(@header, $_);
>     }
>   } else {  # body
>     push(@body, $_);
>   }
> }
> 
> foreach(@header) {
>   $klucz = $_;
>   $tresc = $_;
>   $klucz =~ s/([^\s:]+:?)\s(.*)/$1/s;   # to mi sie okrutnie ni podoba,
po
>   $tresc =~ s/([^\s:]+:?)\s(.*)/$2/s;   # prostu musi sie dac prosciej
;-)
>   $header{$klucz} = $tresc;             # i w koncu mamy hasha...
> }
> 
> 
> Aż mnie boli jak to oglądam.... ;-)
> Ja to chce w 3 linijkach!!!!

Oryginal mial rzeczywiscie 3 linie ( + petla while ), ale ignorowal linie
przedluzenia , dodalem to i wynik ponizej:

while(<>){
        chomp;
        last unless $_;
        if( /([^:]+):\s+(.*)/ ){
                $header{lc($1)} = $2;
                $lkey = lc($1);
        }
        else{
                s/^\s+//;
                $header{$lkey} .= "\n$_";
        }
}
.....  Czytanie tresci....


Pozdrowienia
	KK
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads