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?
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?
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.
Nota: non utilizzare i moduli può essere un requisito esterno o limitazione dell'ambiente dato a cui joe deve conformarsi. –
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!" –
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
Vedi anche questo code fragment tratto da The Perl Cookbook, che è un grande libro in sé per soluzioni Perl a problemi comuni
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. –
assumendo csv normale (vale a dire, le virgole non integrati), per ottenere 2 ° campo per esempio
$ perl -F"," -lane 'print $F[1];' file
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.
chiedendosi perché ho votato. C'è qualcosa di sbagliato nel mio esempio? – taiko
Molto simile a http://stackoverflow.com/questions/2174061/whats-the-best-way-to-read-a-huge-csv-file-using-perl –