Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2006
    Messaggi
    194

    da PERL al pseudo-codice

    Salve a tutti.

    Sto cercando di capire uno script di Perl che costruisce un indice analitico di un testo; se per favore qualcuno mi può aiutare trascrivendomi il pseudo-codice. Grazie

    my $page_number = 1;
    my %idx;

    while(<>) {
    for my $word ( split(/\s+/) ) {
    $idx{$word}{$page_number} = 1;
    }
    $page_number++ if ( /\014/ );
    }

    foreach my $word (sort keys %idx) {
    printf "%-20s ", $word;
    print comma_sep(sort {$a <=> $b} keys %{$idx{$word}});
    print "\n";
    }

    sub comma_sep {
    my $ret = "";
    foreach (@_) { $ret .= $_ . ", "; }
    chop $ret;
    chop $ret;
    return $ret;
    }
    Grazie a chiunque mi può aiutare.

  2. #2
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    21,188
    Premesso che non so cosa intendi per pseudo-codice, prima di chiedere aiuto in quel modo dovresti cercare di aiutare tu chi ti puo` aiutare.
    Un codice non indentato e` complesso da analizzare a mano, e reindentare il codice e` un lavoro che puoi fare tu.
    Prova a postare il codice correttamente indentato usando i VBcode corretti (devi usare i tasti # oppure PHP).
    Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
    No domande tecniche in messaggi privati

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2006
    Messaggi
    194
    Ringrazio Mich_ e chiedo scusa.


    codice:
    my $page_number = 1;
    my %idx;
    
    while(<>) {
            for my $word ( split(/\s+/) ) {
                    $idx{$word}{$page_number} = 1;
            }
            $page_number++ if ( /\014/ );
    }
    
    foreach my $word (sort keys %idx) {
            printf "%-20s ", $word;
            print comma_sep(sort {$a <=> $b} keys %{$idx{$word}});
            print "\n";
    }
    
    sub comma_sep {
            my $ret = "";
            foreach (@_) { $ret .= $_ . ", "; }
            chop $ret;                                       
            chop $ret;
            return $ret;
    }
    Per pseudocodice, pseudolinguaggio o linguaggio di progetto si intende un linguaggio di programmazione fittizio, non direttamente compilabile o interpretabile da un programma compilatore o interprete, il cui scopo è quello di rappresentare algoritmi.(Fonte:Wikipedia)

    In pratica sto cercando di decodificare il significato di questo script; quello che ho capito ad esempio è che \014 indica UN FORM-FEED, (quindi segna l'inserimento di una pagina nuova). Forse split(/\s+/) è una funzione split appliccata ad una regex.
    Ma che cosa indichino i caratteri $ % non ne ho la minima idea, così il resto dello script: $ serve per introdurre una variabile?

    Grazie a chi mi può dare una mano, ... altrimenti dovrò mettermi allo studio di PERL.


  4. #4
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    21,188
    Lo studio del Perl puo` anche essere intressante e divertente ...
    Le variabili sono di tre tipi:
    scalari (con prefisso $)
    vettori (prefisso @)
    hash (prefisso %) - array associative
    Per una trattazione migliore delle variabili, vedi il manuale perldata

    Comunque provo a mettere dei commenti al codice, in modo che sia piu` facile interpretarlo.
    codice:
    my $page_number = 1;   # definizione e inizializz. di una variabile scalare
    my %idx;                          # definizione di una hash
    
    while(<> ) {                       # loop su tutte le righe di input (legge una riga e la mette in $_)
            for my $word ( split(/\s+/) ) {              # spezza la $_ secondo i caratteri blank 
                       # salva il primo in $word - dentro la parentesi dello split e` una RE
                    $idx{$word}{$page_number} = 1;  # scrive 1 nella posiz della hash la cui chiave e` $word che diventa a sua volta hash con chiave $page_number (su questo ho qualche dubbio)
            }
            $page_number++ if ( /\014/ );   # incremente $page_number se $_ e` <FF> 
                   # \014 denota numero ottale
    }
    
    foreach my $word (sort keys %idx) {   # ordina la hash secondo le chiavi ed estrae le chiavi una alla volta 
            printf "%-20s ", $word;       # stampa la chiave (in maniera formattata)
            print comma_sep(sort {$a <=> $b} keys %{$idx{$word}});  # ordina e stampa in modo CSV
            print "\n";   # stampa la fine riga 
    }
    
    sub comma_sep {        # serve per dire alla routine precedente cosa significa CSV
            my $ret = "";
            foreach (@_) { $ret .= $_ . ", "; }
            chop $ret;                                       
            chop $ret;
            return $ret;
    }
    Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
    No domande tecniche in messaggi privati

  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2006
    Messaggi
    194
    Grazie assai.
    Lo studio del Perl puo` anche essere interessante e divertente ...
    Mi metteri subito a studiarlo se
    a) sapessi che è il migliore programma per text processing ;
    b) avessi fra le mani un manuale progressivo, ad hoc per il mio argomento, e con esercizi.

    Non sono un programmatore; quel poco che so ... l'ho imparato come autodidatta

    Grazie ancora

  6. #6
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    21,188
    Originariamente inviato da hopeful
    a) sapessi che è il migliore programma per text processing ;
    Non so se e` il migliore. Certo che in materia di gestione delle stringhe e` molto potente: sicurametne molto piu` di C o Pascal.


    b) avessi fra le mani un manuale progressivo, ad hoc per il mio argomento, e con esercizi.

    Non sono un programmatore; quel poco che so ... l'ho imparato come autodidatta
    Io l'ho imparato modificando il famoso formMail, e guardando i manuali. Ora ci sono anche manuali progressivi. Tutti i manuali vengono distribuiti assieme all'interprete, e in ambiente Linux sono sempre disponibili tramite i comandi
    man perl
    man perlXXX
    dove al posto di XXX devi metterci i vari pezzi che trovi nel man perl.

    Certo che quel pezzo che hai mostrato non e` il modo piu` semplice per approcciarsi a Perl: contiene varie cose implicite che sono piuttosto ostiche, specie a chi proviene da altri linguaggi.

    Altri punti di riferimento importati sono il sito di shishii e il manuale Perl di HTML.it
    Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
    No domande tecniche in messaggi privati

  7. #7
    Utente di HTML.it
    Registrato dal
    Feb 2006
    Messaggi
    194
    Grazie per le dritte.
    Io lavoro un pò con i programmi che girano dalla linea di comando di Linux.
    Un'ultima domanda: ma il famoso formMail corrisponde per caso a www.formmail.com/? Perché io non ne ho mai snetito parlare.

    Grazie ancora

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 © 2024 vBulletin Solutions, Inc. All rights reserved.