Visualizzazione dei risultati da 1 a 6 su 6

Discussione: ciclo while

  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    892

    ciclo while

    Scusate la domanda da completo inesperto. Ho uno script Perl che mi va a creare, modificando un file .txt con le RE, un documento xml:

    codice:
    while (<>) {
    s/^([^\s]+) (.+)$/<token forma="$1" lemmaPos="$2"\/>\n/;
    print 
    }
    E fin qui tutto ok (il codice l'ho ottenuto effettuando ricerche sul forum, in quanto di Perl non so niente).

    Avrei però bisogno di fare in modo che venissero modificate così soltanto le prime 500 parole del testo, e per le restanti venisse applicato un altro criterio, ma non so come fare. Ho tentato così ma niente da fare:

    codice:
    $numero=0;
    while (<>) {
    $numero=$numero+1;
    If ($numero<500){
    s/^([^\s]+) (.+)$/<token forma="$1" lemmaPos="$2"\/>\n/;
    print 
    }
    else {
    ... restante blocco...
    print
    }
    }
    Dove sto sbagliando? Scusate la domanda da deficiente ma è molto importante e devo risolvere al più presto...

    mille grazie
    franz

  2. #2
    Utente di HTML.it
    Registrato dal
    May 2002
    Messaggi
    268
    così conti le righe.

    $numero=0;
    while (<> ) {

    #potresti fare così contando le parole separate da uno spazio
    @mom=split(/ /,$_);
    $numero=$numero+$#mom;

    If ($numero<500){
    s/^([^\s]+) (.+)$/<token forma="$1" lemmaPos="$2"\/>\n/;
    print
    }
    else {
    ... restante blocco...
    print
    }
    }

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2002
    Messaggi
    268
    scusa mi ricorreggo, poichè nel caso che ti ho proposto se la riga dei 500 ha n parole non le considererebbe

    $numero=0;
    while (<> ) {

    #potresti fare così contando le parole separate da uno spazio
    @mom=split(/ /,$_);
    $numero=$numero+$#mom;

    If ($numero<=500){
    s/^([^\s]+) (.+)$/<token forma="$1" lemmaPos="$2"\/>\n/;
    print
    }
    # considero ora la riga delle ultime prima di 500
    elsif ($numero_precedente<500 && $numero>500){
    for ($n=0; $n<=(500-$numero_precedente); $n++){
    ####espressione con $mom[$n] al posto di $_#####
    }

    else {
    ... restante blocco...
    print
    }
    $numero_precedente=$numero;

    }

  4. #4
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    892
    ehm...
    mi dà tre errori di sintassi: line 8, line 13 3 line 14.
    Inoltre io ho due parole per riga che vanno nello stesso tag, e dovrei contare quindi non lde parole ma le righe: 500 righe

    grazie mille se puoi aiutarmi

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2002
    Messaggi
    268
    non sarà mica l'If' con la I maiuscola!!!!!
    Se conti le righe il tuo va bene:

    $numero=0;
    open (PR,"<file.txt");
    while (<PR>)
    {
    if ($numero<500)
    {s/^([^\s]+) (.+)$/<token forma="$1" lemmaPos="$2"\/>\n/}
    else
    {...}
    $numero++;
    }
    close (PR);

  6. #6
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    892
    ...infatti era l'if con la I maiuscola!!!

    Adesso funge, grazie mille

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.