Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2006
    Messaggi
    46

    [PERL]carattere di escape

    allora ragazzi sono alle prima armi col perl e volevo chiedervi qual è il carattere di escape che rappresenta l'INVIO della tastiera...forse \0 come per il c++????
    insomma mi dite dove sbaglio qui???praticamente non mi entra nel ciclo.....

    $contatore=0;
    while(@stringa[$contatore]!='\0')
    {
    @ascii[$contatore]=ord(@stringa[$contatore]);
    $contatore++;
    }

    ah il vettore @stringa è già stato acquisito...

  2. #2
    Il carattere e '\n' newline è per quel che ricordo (almeno in C) '\0' indica la fine di una stringa, perche' universalmente '\n' va a capo, oppure '\r\n'

    Ciao

  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2006
    Messaggi
    46
    nel c lo \n ha lo stesso scopo del perl come hai detto te,però nel perl non pensavo che il carattere \n coincidesse con quello dell'INVIO...comunque ho sempre lo stesso problema,il programma non entra nel ciclo...ora lo posto completo,magari l'errore non è nella condizione del ciclo....

    #!C:/perl/bin/perl.exe
    print"Digita la stringa:\n";
    $stringa=<STDIN>;
    @stringa=split(/ */, $stringa);
    print"stringa@stringa";
    $contatore=0;
    while(@stringa[$contatore]!='\n')
    {
    print"entrato";
    @ascii[$contatore]=ord(@stringa[$contatore]);
    $contatore++;
    }
    $contatore=0;
    print"stampa";
    while($stringa[$contatore]!='\n')
    {
    print"entrato";
    print"stringa $stringa[contatore] ascii $ascii[contatore]";
    $contatore++;
    }

  4. #4
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    21,188
    Dipende anche dal sistema operativo.

    In DOS (e Windows) il fine riga e` formato da \r\n (0x10 0x13)
    In linux/unix la fine riga e` data dal \n (0x13) da solo
    in mac (Motorola) e` il carattere \r (0x10)

    Il Perl in linea di massima quando scrivi print "\n" inserisce la sequenza usata dal sistema operativo.

    Ma qui si tratta di analizzare un testo, scritto da non si sa chi.

    Pertanto si potrebbe andare ad analizzare uno qualsiasi dei caratteri di fine riga:
    while(! @stringa[$contatore] =~ /[\r\n]/s) { ...
    (spero di aver usato le RE in modo corretto - in pochi anni ho dimenticato molto).

    PS: ma occorre essere sicuri che il carattere venga passato alla stringa. In linea di massima il carattere di fine stringa non fa parte della stringa.
    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
    Apr 2006
    Messaggi
    46
    io sto usando win....ho scritto:
    while(@stringa[$contatore]!='\r\n')
    ma ancora non entra,un carattere di escape che mi sta a fine stringa c'è altrimenti all'istruzione
    print"@stringa"
    mi dovrebbe stampare all'infinto,e invece no stampa correttamente,perciò un carattere che gli dice fermati la stringa è finita c'è...solo che non so quale è......è possibile che in perl non si possa fare una cosa così semplice???

  6. #6
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    21,188
    Non puoi inventarti le istruzioni. Un carattere non potra` mai essere uguale a due caratteri.

    La RE che ti avevo proposto (ma su cui ho qualche dubbio) verifica se il carattere e` uguale ad uno qualsiasi dei due \r\n.

    Ma ho riguardato il codice ... e non lo ho capito.
    codice:
    $contatore=0;
    while(@stringa[$contatore]!='\n') {
      print"entrato";
      @ascii[$contatore]=ord(@stringa[$contatore]);
      $contatore++;
    }
    Ma c'e` anche un problema di variabili
    Che significato ha
    @stringa[$contatore]
    Forse volevi scrivere:
    $stringa[$contatore]
    cioe` l'elemento $contatore del vettore @stringa

    Stesso discorso per @ascii[$contatore].
    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
    Apr 2006
    Messaggi
    46
    il discorso della tua RE si risolve anche più semplicemente in qeusto modo....in teoria....

    while($stringa[$contatore]!='\r' && $stringa[$contatore]!='\n')
    {
    print"entrato";
    $ascii[$contatore]=ord($stringa[$contatore]);
    $contatore++;
    }

    le variabili coma hai detto te le ho corrette,ma avevo già provato prima in questo modo e non funzionava,come non funziona ancora ora..ragazzi non so proprio cosa fare...è come se questa conbdizione non esistesse oppure è subito falsa e quindi non entra nel ciclo,perchè l'esecuzione del programma arriva fino alla fine.....

  8. #8
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    21,188
    L'avevo gia` scritto:
    PS: ma occorre essere sicuri che il carattere venga passato alla stringa. In linea di massima il carattere di fine stringa non fa parte della stringa.
    Dipende da come acquisisci la stringa. Con un <input> il \n non viene inserito nella stringa.
    Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
    No domande tecniche in messaggi privati

  9. #9
    Utente di HTML.it
    Registrato dal
    Apr 2006
    Messaggi
    46
    si ma io allora ti ho detto che comunque un carattere verrà pur passato,perchè anche io avevo questo dubbio e per levarmelo ho infatti inserito nel programma
    print"stringa@stringa";
    se mi stampava la stringa correttamente come succede un carattere di escape c'è,altrimenti alla stampa il programma avrebbe sclerato e non so avrebbe potuto stampare caratteri presi a caso in memoria,oppure bloccarsi..boh...quindi un carattere ci sarà..questa è l'esecuzione:

    D:\Documents and Settings\Luca\Desktop>perl editor_hex.pl
    Digita la stringa:
    prova
    stringap r o v a
    stampa


    dall'esecuzione sembra che ci sia anche lo \n perchè poi va a capo.....

  10. #10
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    21,188
    Mi sa che vuoi applicare al Perl quanto hai appreso del C.

    Il C non ha un controllo sulla lunghezza di un vettore. E` una precisa scelta, che permette una liberta` enorme, ma ha anche dei risvolti pratici pericolosi (infatti in C e` possibile andare ad invadere l'area del programma e in alcuni SO anche l'area fuori dallo scope del programma, fino a riscrivere il sistema operativo.
    Altri linguaggi non permettono tali "errori". Una stringa non puo` essere letta oltre il suo limite.
    Se una stringa e` lunga 8 caratteri, e la stampi tutta, verranno stampati 8 caratteri (da 0 a 7)
    Per un vettore la cosa e` analoga.

    Se hai un @vettore che contiene 8 valori (quindi $vettore==8), se scrivi
    $vettore[8]
    ci sono due possibilita`:
    il vettore viene allungato, per cui poi $vettore==9
    viene segnalato un errore.
    Il comportamento effettivo dipende dal compilatore/interprete.
    In Perl di solito il comportamento e` il primo, ma se specifichi #use strict; viene segnalato errore (se ricordo bene - sono anni che non programmo piu` in Perl).
    Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
    No domande tecniche in messaggi privati

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.