Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 23
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2006
    Messaggi
    12

    Funzione ricerca in Perl

    salve a tutti..
    mi sto avvicinando al perl in questo periodo.
    per una mia esigenza personale ho deciso di crearmi uno script che facesse il compito per conto mio.
    questo script deve essere in grado di ricercarmi dentro un file .txt determinate parole di determinata lunghezza e contenenti determinati numeri e lettere e che poi me li riporti in un altro file .txt.
    esempio: voglio cercare in un .txt parole che:
    - siano lunghe 16 caratteri
    -contengano numeri da 0 a 4
    -contengano lettere da a a c
    ...
    io ero arrivato a questo punto, poi il nulla...

    codice:
    print " Devo cercare in: $filein";
    chomp ($filein=<STDIN>);
    open (FILE, "< $filein") || die "!!! $filein non trovato !!!";
    $results="parole_trovate.txt";
    open(OUT,"+>$results");
    .......
    print "Fatto!Ora cerca in $results ...";}
    mi manca la parte centrale in cui dichiaro le caratteristiche delle parole da cercare. avevo pensato alla funzion grep, ma non ho capito molto bene come usarla correttamente...
    qualche illuminazione?grazie...

  2. #2
    while (<FILE>) {
    if (/^[0-4a-c]{16}$/) {
    print OUT;
    }
    }
    Marco Allegretti
    shishii@tiscalinet.it
    Lang: PERL, PHP, SQL.
    Linux user n° 268623 Fedora Core 10, Fedora Core 6, Debian Sarge on mips

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2006
    Messaggi
    12
    ohoh...ti ringrazio...

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2006
    Messaggi
    12
    ehm..ci sarebbe un problemino...
    io ho modificato lo script in qst modo:
    codice:
    chomp ($filein=<STDIN>);
    open (FILE, "<$filein") || die "!!! $filein not found !!!";
    $results="results.txt";
    open(OUT,">>$results");
    while (<FILE>) {
    if (/^[0-9a-c]{16}$/) {
    print (OUT "The words founded in $filein are: ");
    print (OUT);
    }
    }
    ma..
    1)se all'interno del file vi sono altre parole diverse, non rileva nessuna di quelle "speciali"
    2)anche se per prova metto solo una parola "special" nel file di testo, se questa è accompagnata o preceduta da spazi vuoti , non viene rilevata

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    21,188
    Non so cosa ha capito Shishii del tuo problema.

    Io userei le RE applicate a singole parole, non a tutta la stringa (ma e` una mia interpetazione diversa):
    codice:
    print OUT "The words founded in $filein are: \n";
    while (<FILE> ) {
      if (/\s([0-9a-c]{16}\s)/) {
        print OUT, "$1\n";
      }
    }
    Nota: questo prende una sola parola per riga: se dovessero essercene di piu`, occorre modificare ancora.
    Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
    No domande tecniche in messaggi privati

  6. #6
    Utente di HTML.it
    Registrato dal
    Feb 2006
    Messaggi
    12
    io avrei la necessità di analizzare testi "completi", quindi con parole anche sulla stessa riga, virgole, punti...
    come dovrebbe essere la modifica?
    grazie ancora per l'aiuto...

  7. #7
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    21,188
    Forse c'e` anche un metodo piu` compatto, ma io spezzerei la stringa, e analizzerei i vari pezzi:
    codice:
    print OUT "The words founded in $filein are: \n";
    while (<FILE> ) {
      my @parole = split(/\s*/);
      foreach $parola in @parole { 
        if($parola =~ /^[0-9a-c]{16}$/) {
          print OUT, "$parola  ";
        }
      }
      print OUT, "\n"; # opzionale
    }
    Nota: non ho testato, per cui potrebbero esserci errori di sintassi.
    Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
    No domande tecniche in messaggi privati

  8. #8
    Utente di HTML.it
    Registrato dal
    Feb 2006
    Messaggi
    12
    dunque, lo script mi da diversi errori. eccoli:
    1)mi dice operatore mancante? prima di "$parola in"
    2)quando si arriva all'array @parole mi chiede se dovevo predichiararlo
    3)infine mi da due errori di sintassi per "$parola in" e dopo l'ultima graffa che chiude il ciclo...

    dai, che siamo (siete.. ) sulla strada giusta...
    +-------------------+
    EDIT.
    Ho modificato lo script in qst modo ed ora non mi da errori, problema è che non da nemmeno risultati:
    codice:
    print " I must search in: $filein";
    chomp ($filein=<STDIN>);
    open (FILE, "<$filein") || die "!!! $filein not found !!!";
    @parole=$filein; #ho dichiarato l'array
    $results="words_founded.txt";
    open(OUT,">$results");
    print (OUT "The words founded in $filein are: ");
    while (<FILE>) {
      my @parole = split(/\s*/);
      foreach $parola (@parole) {
        if($parola =~ /^[0-9a-c]{16}$/) {
          print (OUT "$parola  ");
        }
      }
      print (OUT "\n");
    }
    print "Done! Now look into $results ...";}
    ...

  9. #9
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    21,188
    Sicuramente quella dichiarazione di @parole non ha senso.
    @parole e` un vettore, che vai a inizializzare con una stringa. Inoltre la dichiarazione necessita di un prefisso, tipo my .

    Sulla sintassi del foreach hai ragione: facevo confusione con altri linguaggi.

    Invece non mi trovo con la sintassi del print: cosi` come la usi tu non la ho mai usata: nella mia forse c'e` la virgola di troppo, ma non ricordo piu`.
    Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
    No domande tecniche in messaggi privati

  10. #10
    Utente di HTML.it
    Registrato dal
    Feb 2006
    Messaggi
    12
    uhm..non so, sulla funzione print con quella sintassi non mi rileva errori e funziona correttamente, nell'altro modo mi da errore di compilazione...uhmm..

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.