Portál AbcLinuxu, 12. května 2025 09:11

Dotaz: Split v PERL

8.9.2009 14:34 Saky
Split v PERL
Přečteno: 551×
Odpovědět | Admin
Zdravím..
Potřeboval bych poradit, jak v PERL rozdělit řádek a načíst slova do samostatných proměnných...
Mám URL ze souborem http://www.i-netportal.cz/input.txt . Ten obsahuje dejme tomu 4 slova, oddělená mezerami. Pak mám v PERL něco takového, aby mi na příkaz zobraz vypsal obsah souboru:
 
 if ($arg =~ /!zobraz/i) {   
 my $url = 'http://www.i-netportal.cz/input.txt';
      use LWP::Simple;
 my $content = get $url;
 die "Couldn't get $url" unless defined $content;
    
 print "Soubor obsahuje slova: $content\n";
 }
 
Potřeboval bych však doplnit pravděpodobně funkcí split rozdělení na jednotlivá slova, abych mohl následně použít výstup "!Soubor obsahuje: $1slovo, dále za ním $2slovo,.... " Tedy vypisovat je jednotlivě.
Zkoušel jsem něco jako ($slovo1, $slovo2, $slovo3) = split(" ", $content); , avšak neúspěšně.
Díky za každou radu :-)

Řešení dotazu:


Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

Řešení 1× (saky)
8.9.2009 15:06 ams
Rozbalit Rozbalit vše Re: Split v PERL
Odpovědět | | Sbalit | Link | Blokovat | Admin

Funguje to presne tak jak jste to napsal, mate ale chybu ve vypisu: misto $slovo1 pouzivate $1slovo atd. Jinou moznosti je pouzit pole misto skalaru a napsat neco takoveho:

@slovo = split(" ", $content);

print "Soubor obsahuje: $slovo[0], dale za nim $slovo[1],  pak  $slovo[2] a nakonec $slovo[3].\n";

Řešení 1× (saky)
8.9.2009 15:14 Saky
Rozbalit Rozbalit vše Re: Split v PERL

 Tak mám pravděpodobně chybu ve formátu, jelikož :

 

        if ($arg =~ /!zobraz/i) {   

    my $url = 'http://www.i-netportal.cz/input.tx';

      use LWP::Simple;

  my $content = get $url;

  die "Couldn't get $url" unless defined $content;

   @slovo = split(" ", $content);

     print "Soubor obsahuje: $slovo[0], dale za nim $slovo[1],  pak  $slovo[2] a nakonec $slovo[3].\n";  

     }

Nefunguje.. :(. Kde může být chyba?

 

8.9.2009 15:53 voda | skóre: 28
Rozbalit Rozbalit vše Re: Split v PERL
Není to chybějícím t v http://www.i-netportal.cz/input.txt. Jinak vypisuje to něco? Mě to funguje správně.
8.9.2009 16:00 Saky
Rozbalit Rozbalit vše Re: Split v PERL

 Písmenko se ztratilo při CTRLC+C / V :-)

Obsah souboru mi to vypíše v pořádku, ale jakmile vložím funkci split, aplikace ani nenaběhne, bez jakékoliv chyby. Možná je chyba už někde výše, ale kód je poměrně dlouhý...

Zvláštní, že bez toho bez problému.. :( Právě jsem si myslel, zda je funkce vložena na správném místě, jelikož to spadne při vložení v jakémkoliv formátu..

Řešení 1× (saky)
8.9.2009 16:09 voda | skóre: 28
Rozbalit Rozbalit vše Re: Split v PERL
Zkuste tam přidat:
use strict;
use warnings;
use diagnostics;
jestli to něco nevypíše pak. Popřípadě kód zjednodušit tak, ať se chyba hledá lépe.
8.9.2009 16:10 ams
Rozbalit Rozbalit vše Re: Split v PERL

Nemate nahodou v tom souboru use strict? Zkuste misto @slovo = split ...    napsat  my @slovo = split ...;

8.9.2009 16:33 Saky
Rozbalit Rozbalit vše Re: Split v PERL

 Tak to je ono :-)

Supeeeer, funguje :-)

Bez problému to třídí slova dle obou verzí.

Děkuji moc za rady :)

8.9.2009 18:03 voda | skóre: 28
Rozbalit Rozbalit vše Re: Split v PERL
Tak při takovéto chybě mi to vypisuje: Global symbol "@slovo" requires explicit package name at ./tmp/perl.pl line 10
8.9.2009 16:23 Saky
Rozbalit Rozbalit vše Re: Split v PERL

 Tak jsem zkoušel jednak zapnout podrobný výpis chyb, tam se až na pár drobností nic neprojeví.

Při zadání funkce split se aplikace vůbec nespustí, tudíž žádná chyba:(.

Zkoušel jsem i na hradit uvozovky lomítky, avšak také bez úspěchu...

Zkrátit jej asi nedokáži, teprve s tím experimentuji a asi bych jej nedokázal natolik očesat, abych chybu našel.. :(

Pokud by byl někdo ochoten pomoci úpravou, jistě bych mohl i já něčím přispět (FTP prostor, SQl databázi...)

Už si opravdu nevím rady :)

8.9.2009 16:09 Chulda | skóre: 20
Rozbalit Rozbalit vše Re: Split v PERL
Odpovědět | | Sbalit | Link | Blokovat | Admin
Ted jsem se nekde docetl, ze na parsovani mezery jsou potreba lomitka (regularni vyraz) namisto uvozovek split(/ /, $content);
8.9.2009 16:17 ams
Rozbalit Rozbalit vše Re: Split v PERL

Je pravda, ze split ocekava jako prvni argment regexp, ale parametr " " je zvlastni pripad, ktery funguje jinak nez / /. Prectete si perldoc -f split:
As a special case, specifying a PATTERN of space (' ') will split on white space just as "split" with no arguments does. Thus, "split(' ')" can be used to emulate awk's default behavior, whereas "split(/ /)" will give you as many null initial fields as there are leading spaces.

22.12.2010 10:35 apokalypso77
Rozbalit Rozbalit vše Re: Split v PERL
Odpovědět | | Sbalit | Link | Blokovat | Admin
Dobrý den, mám prolém rozdělit @list na jednotlivé části! píše mi to do příkazového řádku neco mezera neco, ale nevýhodou je že je ten počet pokaždý jiný proto si ten počet nemohu definovat a potřeboval bych, aby to něco bylo pokaždý na samotném řádku

v přikazovým řádku to vypadá takto @neco neco neco neco +neco @neco takže to nemu rozdělit podle nějakýho znamínka nic poradil by mi někdo ? když tak pls na email

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.