🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.perl
Article #51918

Re: Jak wyciagnac linie z pliku?

#51918
From: Szymon Sokół
Date: Sat, 22 May 2010 21:28
43 lines
2876 bytes
On Thu, 20 May 2010 07:34:55 +0000 (UTC), tomjas wrote:

> On Thu, 20 May 2010 06:59:41 +0000 (UTC), Stachu 'Dozzie' K. wrote:
>>
>> No to kombinuj, bo to podstawy programowania _w ogóle_.
>>
> Tos mi doradzil. Kombinuje i wymyslilem takie cos:
> 
> while (<IN>) {
>    push (@lista,$_)
>    if (/vert/) {
>       $line = pop @lista;
>       push(@plik,$line);
>    }
> }
> print @plik;
> 
> ale odnosze nieodparte wrazenie, ze jest to, delikatnie mowiac, malo
> eleganckie rozwiazanie.

Przede wszystkim to nie robi tego, co chcesz. Jak już wykonasz ten pierwszy
push, to w @lista masz na końcu *bieżącą*, nie poprzednią linię - i pop
właśnie tę linię umieści w $line, i do @plik trafi bieżąca, nie poprzednia. 

Rozwiązanie poprawne, a raczej kilkanaście jego wersji, już Ci podano, ja
tylko dodam, że jeśli chciałbyś jednak te linie mieć w tablicy, a nie tylko
wypisać, to kombinowałeś w dobrą stronę, tylko nie do końca dobrze - i to
nie jest problem z Twoją znajomością Perla, tylko z myśleniem
algorytmicznym. A można było to zrobić tak:

while (<IN>) {
  # jeśli bieżąca linia *nie* zawiera vert, to usuwamy ostatnio dopisaną
  pop @lista unless /vert/; 
  # a teraz dodajemy bieżącą  
  push @lista, $_;
}
# w tym miejscu w @lista są wyłącznie te linie, po których nastąpiło vert

-- 
Szymon Sokół (SS316-RIPE) -- Network Manager                                 B
Computer Center, AGH - University of Science and Technology, Cracow, Poland  O
http://home.agh.edu.pl/szymon/ PGP key id: RSA: 0x2ABE016B, DSS: 0xF9289982  F
Free speech includes the right not to listen, if not interested -- Heinlein  H
Technical Details
Message-ID: <qu0g9njof5js.dlg@falcon.sloth.hell.pl>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.rmf.pl!agh.edu.pl!news.agh.edu.pl!dustpuppy.sloth.hell.pl!not-for-mail
References: <slrnhv9krv.q2.tomjas@krusty.localdomain> <ht2lp9$uan$1@solani.org> <slrnhv9nc7.6re.tomjas@krusty.localdomain> <ht2mkt$uan$2@solani.org> <slrnhv9pgv.7eh.tomjas@krusty.localdomain>

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.rmf.pl!agh.edu.pl!news.agh.edu.pl!dustpuppy.sloth.hell.pl!not-for-mail
From: Szymon Sokół
 <szymon@bastard.operator.from.hell.pl>
Newsgroups: pl.comp.lang.perl
Subject: Re: Jak wyciagnac linie z pliku?
Date: Sat, 22 May 2010 23:28:57 +0200
Organization: Guy Fawkes Society
Lines: 43
Sender: szymon@news.agh.edu.pl
Message-ID: <qu0g9njof5js.dlg@falcon.sloth.hell.pl>
References: <slrnhv9krv.q2.tomjas@krusty.localdomain> <ht2lp9$uan$1@solani.org> <slrnhv9nc7.6re.tomjas@krusty.localdomain> <ht2mkt$uan$2@solani.org> <slrnhv9pgv.7eh.tomjas@krusty.localdomain>
NNTP-Posting-Host: chello089079192200.chello.pl
Mime-Version: 1.0
X-Trace: news.agh.edu.pl 1274563965 27385 89.79.192.200 (22 May 2010 21:32:45 GMT)
X-Complaints-To: abuse@agh.edu.pl
NNTP-Posting-Date: Sat, 22 May 2010 21:32:45 +0000 (UTC)
User-Agent: 40tude_Dialog/2.0.15.1 Hamster/2.1.0.11
X-Face: xic?6f"rD)k-tM.]L]A6l4W7_aGt({}&{D,hiRI.8cPtf,1F.w@Qkl!vr23o1UY-BfXO$p< hk5>ijB?eBy)?!C<@)+%U\&`1X)MJ>.i.qgkY]4mvL62j<|xJRG/5:7:l8q]x;v!)Bz^r/!yG8DxoD -@fnC,g]BAXj
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit