-+  Associazione
-+  Documenti
 |-  Modern Perl
 |-  Bibliografia
 |-  Articoli
 |-  Talk
 |-  Perlfunc
 |-  F.A.Q.
 |-  F.A.Q. iclp
-+  Eventi
-+  Community
-+  Blog
-+  Link
Corso di Perl



 


indietro

[31] Come posso dividere una stringa delimitata da [carattere], tranne quando mi trovo tra [carattere]?

Diversi moduli possono gestire questo tipo di analisi sintattica --- Text::Balanced, Text::CSV, Text::CSV_XS e Text::ParseWords, tra gli altri.

Prendete l'esempio di tentare di estrarre da una stringa i singoli campi, che sono separati da virgole. Non potete utilizzare split(/,/), poiché non dovete dividere se la virgola si trova tra virgolette. Per esempio, considerate una linea come la seguente:

    SAR001,"","Cimetrix, Inc","Bob Smith","CAM",N,8,1,0,7,"Error, Core Dumped"

A causa della restrizione per quanto riguarda i caratteri tra virgolette, il problema è piuttosto complesso. Fortunatamente, abbiamo Jeffrey Friedl, autore di Mastering Regular Expressions, che si occupa della cosa per noi. Suggerisce (ponendo che la vostra stringa sia contenuta in $testo):

    @nuovo = ();
    push(@nuovo, $+) while $testo =~ m{
        "([^\"\\]*(?:\\.[^\"\\]*)*)",?  # raggruppa la frase all'interno delle virgolette
      | ([^,]+),?
      | ,
    }gx;
    push(@nuovo, undef) if substr($testo,-1,1) eq ',';

Se desiderate inserire delle virgolette all'interno di un campo delimitato da virgolette, usate dei backslash come escape (ad es. "in \"questo\" modo".

In alternativa, il modulo Text::ParseWords (contenuto nella distribuzione standard di Perl) vi permette di scrivere:

    use Text::ParseWords;
    @new = quotewords(",", 0, $text);

C'è anche un modulo TEXT::CSV (Comma-Separated Values [valori separati da virgola, NdT]) su CPAN.

vedi in inglese

AUTORE E COPYRIGHT

Copyright (c) 1997, 1998, 1999, 2000, 2001 Tom Christiansen e Nathan Torkington. Tutti i diritti riservati.

Questa documentazione è libera; puoi ridistribuirla e/o modificarla secondo gli stessi termini applicati al Perl.

Indipendentemente dalle modalitè di distribuzione, tutti gli esempi di codice in questo file sono rilasciati al pubblico dominio. Potete, e siete incoraggiati a farlo, utilizzare il presente codice o qualunque forma derivata da esso nei vostri programmi per divertimento o per profitto. Un semplice commento nel codice che dia riconoscimento alle FAQ sarebbe cortese ma non è obbligatorio.

D:
Progetti e documenti in rilievo
Corso di Perl Progetto pod2it
D:
La ML di Perl.it
mongers@perl.it è la lista ufficiale di Perl Mongers Italia per porre quesiti di tipo tecnico, per rimanere aggiornato su meeting, incontri, manifestazioni e novità su Perl.it.
Iscriviti!
D:
Annunci Google