Article View: pl.comp.lang.perl
Article #51918Re: Jak wyciagnac linie z pliku?
From: Szymon Sokół
Date: Sat, 22 May 2010 21:28
Date: Sat, 22 May 2010 21:28
43 lines
2876 bytes
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-mailReferences:
<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