2010-02-26 9 views
5

Voglio estrarre un particolare campo da un file csv (830k records) e archiviare in hash. C'è un modo facile e veloce per fare in Perl senza usare metodi esterni?Come posso estrarre i campi da un file CSV in Perl?

Come posso ottenere quello?

+0

Molto simile a http://stackoverflow.com/questions/2174061/whats-the-best-way-to-read-a-huge-csv-file-using-perl –

risposta

11

Utilizzare Text::CSV_XS. È veloce, moderatamente flessibile ed estremamente ben collaudato. La risposta a molte di queste domande è qualcosa su CPAN. Perché passare il tempo a fare qualcosa che non è buono come quello che molte persone hanno già perfezionato e testato?

Se non si desidera utilizzare i moduli esterni, che è un'obiezione sciocca, guardare il codice in Testo :: CSV_XS e farlo. Sono costantemente sorpreso che le persone pensino che anche se pensano di non poter usare un modulo non useranno una soluzione conosciuta e testata come codice di esempio per lo stesso compito.

+2

Nota: non utilizzare i moduli può essere un requisito esterno o limitazione dell'ambiente dato a cui joe deve conformarsi. –

+2

Nota: se è possibile scrivere codice, è possibile installare i moduli. È facile spiegare agli uomini d'affari che puoi ottenerlo meglio, più economico, più velocemente in questo modo. "Ma voglio costruire una casa senza attrezzi!" –

+1

Abbiamo già tanti moduli per molti lavori. Quindi la limitazione è che non posso usare nessun modulo esterno. Ma qui in questo caso. Immagino che sarebbe bello usare. Grazie Brian – joe

-1

Vedi anche questo code fragment tratto da The Perl Cookbook, che è un grande libro in sé per soluzioni Perl a problemi comuni

+1

Mi dispiace per aver collegato a una copia apparentemente pirata del libro: l'autore aveva le parti in codice online in passato, e non ho scelto di ricontrollare la sorgente quando ho inserito il link. Ora ho trovato una fonte migliore per lo stesso codice. –

-1

assumendo csv normale (vale a dire, le virgole non integrati), per ottenere 2 ° campo per esempio

$ perl -F"," -lane 'print $F[1];' file 
-1

utilizzando il comando di divisione farebbe il lavoro credo. (Colonne indovinare sono separate da virgole senza virgole presenti nei campi)

while (my $line = <INPUTFILE>){ 
    @columns= split ('<field_separator>',$line); #field separator is "," 
    } 

e quindi dagli elementi della matrice "colonna" è possibile costruire qualsiasi hash gradite.

+0

chiedendosi perché ho votato. C'è qualcosa di sbagliato nel mio esempio? – taiko

Problemi correlati