Thread View: pl.comp.lang.perl
26 messages
26 total messages
Started by tomjas
Thu, 20 May 2010 06:15
Jak wyciagnac linie z pliku?
Author: tomjas
Date: Thu, 20 May 2010 06:15
Date: Thu, 20 May 2010 06:15
15 lines
998 bytes
998 bytes
Witam. Jak wyciagnac z pliku tekstowego linie, PO ktorych jest linia zawierajaca dany ciag? Np. ... wertywyt vert igo tkjedtkd gtyh sghdgnsxn an vert ... zatem interesuja mnie linie PO ktorych sa linie zawierajace ciag "vert" Z gory dzieki i pozdrawiam.
Re: Jak wyciagnac linie z pliku?
Author: Stachu 'Dozzie' K.
Date: Thu, 20 May 2010 06:44
Date: Thu, 20 May 2010 06:44
21 lines
1502 bytes
1502 bytes
On 2010-05-20, tomjas <tomjas@WYTNIJTOpoczta.onet.pl> wrote: > Witam. > Jak wyciagnac z pliku tekstowego linie, PO ktorych jest linia > zawierajaca dany ciag? Np. > > ... > wertywyt > vert igo > tkjedtkd > gtyh > sghdgnsxn > an vert > ... > > zatem interesuja mnie linie PO ktorych sa linie zawierajace ciag "vert" A jaki napotkałeś problem? -- Secunia non olet. Stanislaw Klekot
Re: Jak wyciagnac linie z pliku?
Author: tomjas
Date: Thu, 20 May 2010 06:58
Date: Thu, 20 May 2010 06:58
22 lines
1484 bytes
1484 bytes
On Thu, 20 May 2010 06:44:57 +0000 (UTC), Stachu 'Dozzie' K. wrote: > On 2010-05-20, tomjas <tomjas@WYTNIJTOpoczta.onet.pl> wrote: >> Witam. >> Jak wyciagnac z pliku tekstowego linie, PO ktorych jest linia >> zawierajaca dany ciag? Np. >> >> ... >> wertywyt >> vert igo >> tkjedtkd >> gtyh >> sghdgnsxn >> an vert >> ... >> >> zatem interesuja mnie linie PO ktorych sa linie zawierajace ciag "vert" > > A jaki napotkałeś problem? > Taki ze nie wiem jak skonstruowac wrzucanie do listy (bo zapewne tak to ma byc) linii poprzednich niz linie zawierajace dany ciag. Regexpy sa dla mnie dosc porste ale nei wiem jak w perlu zapisac POPRZEDNIA linie.
Re: Jak wyciagnac linie z pliku?
Author: Stachu 'Dozzie' K.
Date: Thu, 20 May 2010 06:59
Date: Thu, 20 May 2010 06:59
29 lines
2098 bytes
2098 bytes
On 2010-05-20, tomjas <tomjas@WYTNIJTOpoczta.onet.pl> wrote: > On Thu, 20 May 2010 06:44:57 +0000 (UTC), Stachu 'Dozzie' K. wrote: >> On 2010-05-20, tomjas <tomjas@WYTNIJTOpoczta.onet.pl> wrote: >>> Witam. >>> Jak wyciagnac z pliku tekstowego linie, PO ktorych jest linia >>> zawierajaca dany ciag? Np. >>> >>> ... >>> wertywyt >>> vert igo >>> tkjedtkd >>> gtyh >>> sghdgnsxn >>> an vert >>> ... >>> >>> zatem interesuja mnie linie PO ktorych sa linie zawierajace ciag "vert" >> >> A jaki napotkałeś problem? >> > Taki ze nie wiem jak skonstruowac wrzucanie do listy (bo zapewne tak to > ma byc) linii poprzednich niz linie zawierajace dany ciag. Regexpy sa > dla mnie dosc porste ale nei wiem jak w perlu zapisac POPRZEDNIA linie. No to kombinuj, bo to podstawy programowania _w ogóle_. -- Secunia non olet. Stanislaw Klekot
Re: Jak wyciagnac linie z pliku?
Author: tomjas
Date: Thu, 20 May 2010 07:34
Date: Thu, 20 May 2010 07:34
17 lines
1300 bytes
1300 bytes
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.
Re: Jak wyciagnac linie z pliku?
Author: Stachu 'Dozzie' K.
Date: Thu, 20 May 2010 08:42
Date: Thu, 20 May 2010 08:42
31 lines
2261 bytes
2261 bytes
On 2010-05-20, tomjas <tomjas@WYTNIJTOpoczta.onet.pl> 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.
O widzisz, zupełnie inaczej teraz wygląda twoje pytanie niż na początku
wątku.
Nieeleganckie jest dlatego, że @plik może ci bardzo urosnąć, poza tym
nie do końca ten kod jest zgodny z pytaniem oryginalnym.
Ja to zrozumiałem tak: wypisać wszystkie linie od początku pliku do
pierwszego wystąpnienia /vert/; pozostałe pominąć.
--
Secunia non olet.
Stanislaw Klekot
Re: Jak wyciagnac linie z pliku?
Author: tomjas
Date: Thu, 20 May 2010 12:04
Date: Thu, 20 May 2010 12:04
13 lines
1519 bytes
1519 bytes
On Thu, 20 May 2010 08:42:25 +0000 (UTC), Stachu 'Dozzie' K. wrote: > > Nieeleganckie jest dlatego, że @plik może ci bardzo urosnąć, poza tym > nie do końca ten kod jest zgodny z pytaniem oryginalnym. > No wiec jak to zrobic w bardziej elegancki i cywilizowany sposob? Bo jednak perl stanowi dla mnie caly czas czarna magie. > Ja to zrozumiałem tak: wypisać wszystkie linie od początku pliku do > pierwszego wystąpnienia /vert/; pozostałe pominąć. > Interesuje mnie kazda linia, PO ktorej wystepuje linia zawierajaca ciag "vert". Pozdrawiam.
Re: Jak wyciagnac linie z pliku?
Author: Stachu 'Dozzie' K.
Date: Thu, 20 May 2010 12:12
Date: Thu, 20 May 2010 12:12
21 lines
2149 bytes
2149 bytes
On 2010-05-20, tomjas <tomjas@WYTNIJTOpoczta.onet.pl> wrote: > On Thu, 20 May 2010 08:42:25 +0000 (UTC), Stachu 'Dozzie' K. wrote: >> >> Nieeleganckie jest dlatego, że @plik może ci bardzo urosnąć, poza tym >> nie do końca ten kod jest zgodny z pytaniem oryginalnym. >> > No wiec jak to zrobic w bardziej elegancki i cywilizowany sposob? Bo > jednak perl stanowi dla mnie caly czas czarna magie. >> Ja to zrozumiałem tak: wypisać wszystkie linie od początku pliku do >> pierwszego wystąpnienia /vert/; pozostałe pominąć. >> > Interesuje mnie kazda linia, PO ktorej wystepuje linia zawierajaca > ciag "vert". O widzisz. To zapamiętujesz poprzednią linię i wypisujesz jeśli bieżąca pasuje do /vert/. Filozofii tu nie ma. Zresztą to naprawdę *podstawy* programowania. -- Secunia non olet. Stanislaw Klekot
Re: Jak wyciagnac linie z pliku?
Author: Bartosz Feński aka fEnIo
Date: Thu, 20 May 2010 12:15
Date: Thu, 20 May 2010 12:15
40 lines
2250 bytes
2250 bytes
W artykule tomjas napisał(a):
>> Nieeleganckie jest dlatego, że @plik może ci bardzo urosnąć, poza tym
>> nie do końca ten kod jest zgodny z pytaniem oryginalnym.
>>
> No wiec jak to zrobic w bardziej elegancki i cywilizowany sposob? Bo
> jednak perl stanowi dla mnie caly czas czarna magie.
>> Ja to zrozumiałem tak: wypisać wszystkie linie od początku pliku do
>> pierwszego wystąpnienia /vert/; pozostałe pominąć.
>>
> Interesuje mnie kazda linia, PO ktorej wystepuje linia zawierajaca
> ciag "vert".
No skoro interesuje Cię 1 linia poprzedzająca to raczej nie ma sensu
pamiętać wszystkich, nie?
#v+
#!/usr/bin/perl
use strict;
use warnings FATAL => qw( all );
my $previous="";
while (<STDIN>) {
chomp;
print $previous . "\n" if (/vert/);
$previous=$_;
}
#v-
Na przykład tak, chociaż zaraz Ci ktoś jednolinijkowca wklei ;)
pozdr,
fEnIo
--
,''`. Bartosz Fenski | mailto:fenio@debian.org | pgp:0x13fefc40 | irc:fEnIo
: :' : 32-050 Skawina - Glowackiego 3/15 - malopolskie v. - Poland
`. `' phone:+48602383548 | proud Debian maintainer and user
`- http://fenski.pl | xmpp:fenio@jabber.org | rlu:172001
Re: Jak wyciagnac linie z pliku?
Author: lrem
Date: Thu, 20 May 2010 12:38
Date: Thu, 20 May 2010 12:38
24 lines
1613 bytes
1613 bytes
W poście <slrnhva9ub.5je.fenio@serwer.fenski.pl>,
Bartosz Feński aka fEnIo nabazgrał:
> #v+
> #!/usr/bin/perl
>
> use strict;
> use warnings FATAL => qw( all );
>
> my $previous="";
>
> while (<STDIN>) {
> chomp;
> print $previous . "\n" if (/vert/);
> $previous=$_;
> }
> #v-
>
> Na przykład tak, chociaż zaraz Ci ktoś jednolinijkowca wklei ;)
#v+
perl -e 'use strict; use warnings FATAL => qw( all ); my $previous=""; while (<STDIN>) { chomp; print $previous . "\n" if (/vert/); $previous=$_; }'
#v-
Proszę bardzo ;]
Re: Jak wyciagnac linie z pliku?
Author: Bartosz Feński aka fEnIo
Date: Thu, 20 May 2010 12:46
Date: Thu, 20 May 2010 12:46
35 lines
2020 bytes
2020 bytes
W artykule lrem@localhost.localdomain napisał(a):
>> #v+
>> #!/usr/bin/perl
>>
>> use strict;
>> use warnings FATAL => qw( all );
>>
>> my $previous="";
>>
>> while (<STDIN>) {
>> chomp;
>> print $previous . "\n" if (/vert/);
>> $previous=$_;
>> }
>> #v-
>>
>> Na przykład tak, chociaż zaraz Ci ktoś jednolinijkowca wklei ;)
>
> #v+
> perl -e 'use strict; use warnings FATAL => qw( all ); my $previous=""; while (<STDIN>) { chomp; print $previous . "\n" if (/vert/); $previous=$_; }'
> #v-
>
> Proszę bardzo ;]
Mogłem doprecyzować ;P
pozdr,
fEnIo
--
,''`. Bartosz Fenski | mailto:fenio@debian.org | pgp:0x13fefc40 | irc:fEnIo
: :' : 32-050 Skawina - Glowackiego 3/15 - malopolskie v. - Poland
`. `' phone:+48602383548 | proud Debian maintainer and user
`- http://fenski.pl | xmpp:fenio@jabber.org | rlu:172001
Re: Jak wyciagnac linie z pliku?
Author: lrem
Date: Thu, 20 May 2010 16:04
Date: Thu, 20 May 2010 16:04
13 lines
1576 bytes
1576 bytes
W poście <slrnhvaboa.5je.fenio@serwer.fenski.pl>,
Bartosz Feński aka fEnIo nabazgrał:
>>> Na przykład tak, chociaż zaraz Ci ktoś jednolinijkowca wklei ;)
>>
>> #v+
>> perl -e 'use strict; use warnings FATAL => qw( all ); my $previous=""; while (<STDIN>) { chomp; print $previous . "\n" if (/vert/); $previous=$_; }'
>> #v-
>>
>> Proszę bardzo ;]
>
> Mogłem doprecyzować ;P
A to doprecyzuj, może być ciekawie.
Re: Jak wyciagnac linie z pliku?
Author: tomjas
Date: Thu, 20 May 2010 16:23
Date: Thu, 20 May 2010 16:23
35 lines
2128 bytes
2128 bytes
On Thu, 20 May 2010 14:15:07 +0200, Bartosz Feński aka fEnIo wrote:
> W artykule tomjas napisał(a):
>
>>> Nieeleganckie jest dlatego, że @plik może ci bardzo urosnąć, poza tym
>>> nie do końca ten kod jest zgodny z pytaniem oryginalnym.
>>>
>> No wiec jak to zrobic w bardziej elegancki i cywilizowany sposob? Bo
>> jednak perl stanowi dla mnie caly czas czarna magie.
>>> Ja to zrozumiałem tak: wypisać wszystkie linie od początku pliku do
>>> pierwszego wystąpnienia /vert/; pozostałe pominąć.
>>>
>> Interesuje mnie kazda linia, PO ktorej wystepuje linia zawierajaca
>> ciag "vert".
>
> No skoro interesuje Cię 1 linia poprzedzająca to raczej nie ma sensu
> pamiętać wszystkich, nie?
>
> #v+
> #!/usr/bin/perl
>
> use strict;
> use warnings FATAL => qw( all );
>
> my $previous="";
>
> while (<STDIN>) {
> chomp;
> print $previous . "\n" if (/vert/);
> $previous=$_;
> }
> #v-
>
Dzieki wszystkim za odpowiedzi. Zawsze popelniam elementarny blad
w rozumowaniu chcac numerowac linie gdy mozna prosciej.
Jeszcze raz dzieki i pozdrawiam.
Re: Jak wyciagnac linie z pliku?
Author: Bartosz Feński aka fEnIo
Date: Thu, 20 May 2010 17:00
Date: Thu, 20 May 2010 17:00
25 lines
2038 bytes
2038 bytes
W artykule lrem@localhost.localdomain napisał(a):
>>>> Na przykład tak, chociaż zaraz Ci ktoś jednolinijkowca wklei ;)
>>>
>>> #v+
>>> perl -e 'use strict; use warnings FATAL => qw( all ); my $previous=""; while (<STDIN>) { chomp; print $previous . "\n" if (/vert/); $previous=$_; }'
>>> #v-
>>>
>>> Proszę bardzo ;]
>>
>> Mogłem doprecyzować ;P
>
> A to doprecyzuj, może być ciekawie.
Chodziło mi o jakieś bardziej golfowe rozwiązanie.
Może jakiś wyjadacz się pokusi ;)
pozdr,
fEnIo
--
,''`. Bartosz Fenski | mailto:fenio@debian.org | pgp:0x13fefc40 | irc:fEnIo
: :' : 32-050 Skawina - Glowackiego 3/15 - malopolskie v. - Poland
`. `' phone:+48602383548 | proud Debian maintainer and user
`- http://fenski.pl | xmpp:fenio@jabber.org | rlu:172001
Re: Jak wyciagnac linie z pliku?
Author: hubert depesz lubaczewski
Date: Thu, 20 May 2010 17:06
Date: Thu, 20 May 2010 17:06
15 lines
1421 bytes
1421 bytes
On 2010-05-20, Bartosz Feński aka fEnIo <fenio@debian.org> wrote:
> while (<STDIN>) {
> chomp;
> print $previous . "\n" if (/vert/);
> $previous=$_;
> }
może głupie pytanie, ale po co chompujesz, skoro i tak dorzucasz potem
\n?
depesz
--
Linkedin: http://www.linkedin.com/in/depesz / blog: http://www.depesz.com/
jid/gtalk: depesz@depesz.com / aim:depeszhdl / skype:depesz_hdl / gg:6749007
Re: Jak wyciagnac linie z pliku?
Author: hubert depesz lubaczewski
Date: Thu, 20 May 2010 17:11
Date: Thu, 20 May 2010 17:11
14 lines
1579 bytes
1579 bytes
On 2010-05-20, lrem@localhost.localdomain <lrem@localhost.localdomain> wrote:
> #v+
> perl -e 'use strict; use warnings FATAL => qw( all ); my $previous=""; while (<STDIN>) { chomp; print $previous . "\n" if (/vert/); $previous=$_; }'
> #v-
jednolinijkowce sie krótkie pisze:
perl -e '$p=<>;while(<>){/vert/&&print$p;$p=$_}'
depesz
--
Linkedin: http://www.linkedin.com/in/depesz / blog: http://www.depesz.com/
jid/gtalk: depesz@depesz.com / aim:depeszhdl / skype:depesz_hdl / gg:6749007
Re: Jak wyciagnac linie z pliku?
Author: Bartosz Feński aka fEnIo
Date: Thu, 20 May 2010 17:14
Date: Thu, 20 May 2010 17:14
24 lines
1855 bytes
1855 bytes
W artykule hubert depesz lubaczewski napisał(a):
>> while (<STDIN>) {
>> chomp;
>> print $previous . "\n" if (/vert/);
>> $previous=$_;
>> }
>
> może głupie pytanie, ale po co chompujesz, skoro i tak dorzucasz potem
> \n?
Taki nawyk mam. Zbyt częstko przez brak tego chompa potem debuguję skrypt,
bo w specyficznych warunkach klęka.
Może mi to zaszkodzić? Czy jedynie niepotrzebny narzut mam?
pozdr,
fEnIo
--
,''`. Bartosz Fenski | mailto:fenio@debian.org | pgp:0x13fefc40 | irc:fEnIo
: :' : 32-050 Skawina - Glowackiego 3/15 - malopolskie v. - Poland
`. `' phone:+48602383548 | proud Debian maintainer and user
`- http://fenski.pl | xmpp:fenio@jabber.org | rlu:172001
Re: Jak wyciagnac linie z pliku?
Author: lrem
Date: Thu, 20 May 2010 21:35
Date: Thu, 20 May 2010 21:35
16 lines
1654 bytes
1654 bytes
W poście <v27gc7-558.ln1@depesz.com>,
hubert depesz lubaczewski nabazgrał:
> On 2010-05-20, lrem@localhost.localdomain <lrem@localhost.localdomain> wrote:
>> #v+
>> perl -e 'use strict; use warnings FATAL => qw( all ); my $previous=""; while (<STDIN>) { chomp; print $previous . "\n" if (/vert/); $previous=$_; }'
>> #v-
>
> jednolinijkowce sie krótkie pisze:
>
> perl -e '$p=<>;while(<>){/vert/&&print$p;$p=$_}'
To może by tak:
#v+
perl -ne '/vert/&&print$p;$p=$_'
#v-
jak już ma być krótko? ;)
Re: Jak wyciagnac linie z pliku?
Author: Maciej Misiak
Date: Fri, 21 May 2010 22:38
Date: Fri, 21 May 2010 22:38
35 lines
2224 bytes
2224 bytes
lrem@localhost.localdomain pisze:
> W poście <slrnhva9ub.5je.fenio@serwer.fenski.pl>,
> Bartosz Feński aka fEnIo nabazgrał:
>> #v+
>> #!/usr/bin/perl
>>
>> use strict;
>> use warnings FATAL => qw( all );
>>
>> my $previous="";
>>
>> while (<STDIN>) {
>> chomp;
>> print $previous . "\n" if (/vert/);
>> $previous=$_;
>> }
>> #v-
>>
>> Na przykład tak, chociaż zaraz Ci ktoś jednolinijkowca wklei ;)
>
> #v+
> perl -e 'use strict; use warnings FATAL => qw( all ); my $previous=""; while (<STDIN>) { chomp; print $previous . "\n" if (/vert/); $previous=$_; }'
> #v-
>
> Proszę bardzo ;]
Ale ten i pozostałe to takie sztuczne jednolinijkowce chyba, co? Jak
jest średnik w kodzie (oczywiście jako element składni, a nie np.
regexpa, to tak naprawdę jest już dwulinijkowiec. Chociaż 'while(cos) {
do cos }' to są przynajmniej dwie linie kodu. Jaka jest definicja
właściwie jednolinijkowca? :> (ja bym powiedział, że to kod bez
średników oddzielających komendy)
--
grizzley
Re: Jak wyciagnac linie z pliku?
Author: Maciej Misiak
Date: Fri, 21 May 2010 22:44
Date: Fri, 21 May 2010 22:44
40 lines
2213 bytes
2213 bytes
Bartosz Feński aka fEnIo pisze:
> W artykule tomjas napisał(a):
>
>>> Nieeleganckie jest dlatego, że @plik może ci bardzo urosnąć, poza tym
>>> nie do końca ten kod jest zgodny z pytaniem oryginalnym.
>>>
>> No wiec jak to zrobic w bardziej elegancki i cywilizowany sposob? Bo
>> jednak perl stanowi dla mnie caly czas czarna magie.
>>> Ja to zrozumiałem tak: wypisać wszystkie linie od początku pliku do
>>> pierwszego wystąpnienia /vert/; pozostałe pominąć.
>>>
>> Interesuje mnie kazda linia, PO ktorej wystepuje linia zawierajaca
>> ciag "vert".
>
> No skoro interesuje Cię 1 linia poprzedzająca to raczej nie ma sensu
> pamiętać wszystkich, nie?
>
> #v+
> #!/usr/bin/perl
>
> use strict;
> use warnings FATAL => qw( all );
>
> my $previous="";
>
> while (<STDIN>) {
> chomp;
> print $previous . "\n" if (/vert/);
> $previous=$_;
> }
> #v-
>
> Na przykład tak, chociaż zaraz Ci ktoś jednolinijkowca wklei ;)
A masz jak kusisz :P
perl -n0e 'print $1 while /(.*\n)(?=.*vert)/g' plik.txt
--
grizzley
Re: Jak wyciagnac linie z pliku?
Author: Bartosz Feński aka fEnIo
Date: Sat, 22 May 2010 08:04
Date: Sat, 22 May 2010 08:04
47 lines
2523 bytes
2523 bytes
W artykule Maciej Misiak napisał(a):
>>>> Nieeleganckie jest dlatego, że @plik może ci bardzo urosnąć, poza tym
>>>> nie do końca ten kod jest zgodny z pytaniem oryginalnym.
>>>>
>>> No wiec jak to zrobic w bardziej elegancki i cywilizowany sposob? Bo
>>> jednak perl stanowi dla mnie caly czas czarna magie.
>>>> Ja to zrozumiałem tak: wypisać wszystkie linie od początku pliku do
>>>> pierwszego wystąpnienia /vert/; pozostałe pominąć.
>>>>
>>> Interesuje mnie kazda linia, PO ktorej wystepuje linia zawierajaca
>>> ciag "vert".
>>
>> No skoro interesuje Cię 1 linia poprzedzająca to raczej nie ma sensu
>> pamiętać wszystkich, nie?
>>
>> #v+
>> #!/usr/bin/perl
>>
>> use strict;
>> use warnings FATAL => qw( all );
>>
>> my $previous="";
>>
>> while (<STDIN>) {
>> chomp;
>> print $previous . "\n" if (/vert/);
>> $previous=$_;
>> }
>> #v-
>>
>> Na przykład tak, chociaż zaraz Ci ktoś jednolinijkowca wklei ;)
>
> A masz jak kusisz :P
>
> perl -n0e 'print $1 while /(.*\n)(?=.*vert)/g' plik.txt
Kto da wię^Hmniej? :)
pozdr,
fEnIo
--
,''`. Bartosz Fenski | mailto:fenio@debian.org | pgp:0x13fefc40 | irc:fEnIo
: :' : 32-050 Skawina - Glowackiego 3/15 - malopolskie v. - Poland
`. `' phone:+48602383548 | proud Debian maintainer and user
`- http://fenski.pl | xmpp:fenio@jabber.org | rlu:172001
Re: Jak wyciagnac linie z pliku?
Author: Stachu 'Dozzie' K.
Date: Sat, 22 May 2010 08:39
Date: Sat, 22 May 2010 08:39
39 lines
2354 bytes
2354 bytes
On 2010-05-22, Bartosz Feński aka fEnIo <fenio@debian.org> wrote:
>>>> Interesuje mnie kazda linia, PO ktorej wystepuje linia zawierajaca
>>>> ciag "vert".
>>>
>>> No skoro interesuje Cię 1 linia poprzedzająca to raczej nie ma sensu
>>> pamiętać wszystkich, nie?
>>>
>>> #v+
>>> #!/usr/bin/perl
>>>
>>> use strict;
>>> use warnings FATAL => qw( all );
>>>
>>> my $previous="";
>>>
>>> while (<STDIN>) {
>>> chomp;
>>> print $previous . "\n" if (/vert/);
>>> $previous=$_;
>>> }
>>> #v-
>>>
>>> Na przykład tak, chociaż zaraz Ci ktoś jednolinijkowca wklei ;)
>>
>> A masz jak kusisz :P
>>
>> perl -n0e 'print $1 while /(.*\n)(?=.*vert)/g' plik.txt
>
> Kto da wię^Hmniej? :)
perl -n0e 'print$1while/(.*\n)(?=.*vert)/g'
BP,NMSP
perl -n0e 'print for/(.*\n)(?=.*vert)/g'
--
Secunia non olet.
Stanislaw Klekot
Re: Jak wyciagnac linie z pliku?
Author: Bartosz Feński aka fEnIo
Date: Sat, 22 May 2010 08:59
Date: Sat, 22 May 2010 08:59
48 lines
2427 bytes
2427 bytes
W artykule Stachu 'Dozzie' K. napisał(a):
>>>>> Interesuje mnie kazda linia, PO ktorej wystepuje linia zawierajaca
>>>>> ciag "vert".
>>>>
>>>> No skoro interesuje Cię 1 linia poprzedzająca to raczej nie ma sensu
>>>> pamiętać wszystkich, nie?
>>>>
>>>> #v+
>>>> #!/usr/bin/perl
>>>>
>>>> use strict;
>>>> use warnings FATAL => qw( all );
>>>>
>>>> my $previous="";
>>>>
>>>> while (<STDIN>) {
>>>> chomp;
>>>> print $previous . "\n" if (/vert/);
>>>> $previous=$_;
>>>> }
>>>> #v-
>>>>
>>>> Na przykład tak, chociaż zaraz Ci ktoś jednolinijkowca wklei ;)
>>>
>>> A masz jak kusisz :P
>>>
>>> perl -n0e 'print $1 while /(.*\n)(?=.*vert)/g' plik.txt
>>
>> Kto da wię^Hmniej? :)
>
> perl -n0e 'print$1while/(.*\n)(?=.*vert)/g'
>
> BP,NMSP
>
> perl -n0e 'print for/(.*\n)(?=.*vert)/g'
Mimo, że nie potrafię tego napisać krócej to i tak nie wierzę, że się nie
da ;P
pozdr,
fEnIo
--
,''`. Bartosz Fenski | mailto:fenio@debian.org | pgp:0x13fefc40 | irc:fEnIo
: :' : 32-050 Skawina - Glowackiego 3/15 - malopolskie v. - Poland
`. `' phone:+48602383548 | proud Debian maintainer and user
`- http://fenski.pl | xmpp:fenio@jabber.org | rlu:172001
Re: Jak wyciagnac linie z pliku?
Author: lrem
Date: Sat, 22 May 2010 09:09
Date: Sat, 22 May 2010 09:09
11 lines
1710 bytes
1710 bytes
W poście <ht721o$hf2$1@news.onet.pl>,
Maciej Misiak nabazgrał:
> Ale ten i pozostałe to takie sztuczne jednolinijkowce chyba, co? Jak
> jest średnik w kodzie (oczywiście jako element składni, a nie np.
> regexpa, to tak naprawdę jest już dwulinijkowiec. Chociaż 'while(cos) {
> do cos }' to są przynajmniej dwie linie kodu. Jaka jest definicja
> właściwie jednolinijkowca? :> (ja bym powiedział, że to kod bez
> średników oddzielających komendy)
No jak bez średników, to trudno. Ale ze średnikami to mój kod jest krótszy
od Twojego regexpa ;)
Re: Jak wyciagnac linie z pliku?
Author: Stachu 'Dozzie' K.
Date: Sat, 22 May 2010 12:24
Date: Sat, 22 May 2010 12:24
24 lines
2497 bytes
2497 bytes
On 2010-05-21, Maciej Misiak <grizzley@poczta.onet.pl> wrote:
>>> Na przykład tak, chociaż zaraz Ci ktoś jednolinijkowca wklei ;)
>>
>> #v+
>> perl -e 'use strict; use warnings FATAL => qw( all ); my $previous=""; while (<STDIN>) { chomp; print $previous . "\n" if (/vert/); $previous=$_; }'
>> #v-
>>
>> Proszę bardzo ;]
>
> Ale ten i pozostałe to takie sztuczne jednolinijkowce chyba, co? Jak
> jest średnik w kodzie (oczywiście jako element składni, a nie np.
> regexpa, to tak naprawdę jest już dwulinijkowiec. Chociaż 'while(cos) {
> do cos }' to są przynajmniej dwie linie kodu. Jaka jest definicja
> właściwie jednolinijkowca? :> (ja bym powiedział, że to kod bez
> średników oddzielających komendy)
Ja ci dam bez średników!
#v+
perl -Mstrict -Mwarnings=FATAL,all -e '(our $previous = ""), do { while (<STDIN>) { print $previous . "\n" if (/vert/) } continue { chomp($previous = $_) } }'
#v-
--
Secunia non olet.
Stanislaw Klekot
Re: Jak wyciagnac linie z pliku?
Author: 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
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