Domanda

Ho bisogno di leggere da una varietà di file di testo diversi (ho alcuni file delimitati e alcuni file a larghezza fissa).Ho preso in considerazione l'analisi dei file riga per riga (lenta utilizzando i metodi di tipo File.ReadLine) e la lettura del file utilizzando il driver di testo ODBC (più veloce) ma qualcuno ha altri suggerimenti (migliori)?Sto utilizzando .NET/C#.

È stato utile?

Soluzione 3

Rispondendo alla mia stessa domanda:

Ho finito per utilizzare l'oggetto Microsoft.VisualBasic.FileIO.TextFieldParser, vedere:

http://msdn.microsoft.com/en-us/library/f68t4563.aspx

(esempio di implementazione qui)

Ciò mi consente di gestire file CSV senza preoccuparmi di come gestire se i campi sono racchiusi tra virgolette, contengono virgole, virgolette di escape, ecc.

Altri suggerimenti

Non sono sicuro che potresti davvero fare un parser di file di testo ed Excel, a meno che per file Excel non intendi un file delimitato da virgole/pipe/tab, che in realtà è solo un altro file di testo.La lettura dei file Excel effettivi richiede l'utilizzo delle librerie di MS Office.

Per l'analisi di file di testo delimitati, potresti esaminare FileHelper - open source e praticamente hanno tutto coperto.Non sono sicuro però che soddisferà i tuoi requisiti di velocità.

Ignorando la parte Excel (che dici non è importante):

Ho trovato LINQ abbastanza utile nell'analisi dei file txt (delimitati da pipe o CSV)

per esempio.Questo legge un file delimitato da pipe saltando la riga hader e crea un IEnumerable come risultato:

var record = from in File.ReadAllLines(@"c:\blah.txt"). Salta(1) Lascia parti = linea. Dividi('|') selezionare le parti;

Se i file sono relativamente piccoli è possibile utilizzare il file File classe.Ha questi metodi che possono aiutarti:

  • Leggi tutti i byte
  • Leggi tutte le righe
  • Leggi tutto il testo

La tua domanda è un po' vaga.Presumo che i file di testo contengano dati strutturati, non solo righe di testo casuali.

Se stai analizzando i file da solo, .NET ha una funzione di libreria per leggere tutte le righe da un file di testo in un array di stringhe (File.ReadAllLines).Se sai che i tuoi file sono abbastanza piccoli da poter essere conservati in memoria, puoi utilizzare questo metodo ed eseguire l'iterazione sull'array utilizzando un'espressione regolare per convalidare ed estrarre i campi.

I file Excel sono un gioco diverso.I file .XLS sono binari, non di testo, quindi per accedervi sarà necessario utilizzare una libreria di terze parti.I file .XLSX di Excel 2007 contengono dati XML compressi, quindi ancora una volta sarà necessario decomprimere l'XML e quindi utilizzare un parser XML per ottenere i dati.Non consiglierei di scrivere il proprio parser XML, a meno che non si senta il bisogno di un esercizio intellettuale.

Sono d'accordo con Giovanni,

Per esempio:-

using System.IO;

...

public class Program {
  public static void Main() {
    foreach(string s in File.ReadAllLines(@"c:\foo\bar\something.txt") {
      // Do something with each line...
    }
  }
}

Il processo di lettura dei file non è lento se leggi tutti i file contemporaneamente utilizzando la classe File e i metodi suggeriti da John.A seconda delle dimensioni del file e di cosa vuoi farne, potrebbe utilizzare più o meno memoria.Ti suggerirei di provare con File.ReadAllText (o qualunque cosa sia appropriata per te)

Per quanto riguarda la lettura dei file XLS:

Se disponi di Microsoft Office XP e versioni successive, hai accesso alle librerie Office .NET SDK già incluse, dove puoi leggere "nativamente" file XLS, Word, PPT, ecc.Tieni presente che in Office XP devi verificarlo manualmente durante l'installazione (a meno che tu non abbia installato .NET in precedenza).

Non so se queste librerie sono disponibili come pacchetto separato se non hai Microsoft Office.

Per qualche oscura ragione, tutte queste librerie (incluse le ultime versioni di Office 2007 -a.k.a.:Office 12), sono componenti COM che sono a Dolore da usare, causano brutte dipendenze e sono non compatibile con versioni precedenti.CIOÈ.:se disponi di alcuni metodi che funzionano con Office XP (Office11) e li installi su un cliente con Office 12, non funziona, perché alcune interfacce sono state modificate.Quindi è necessario mantenere due insieme di "librerie" e metodi per gestirle.Lo stesso vale se utilizzi le librerie di Office 12 per programmare e il tuo cliente ha Office 11.Le tue librerie non funzionano.:S

Non so perché Microsoft non abbia mai creato una libreria gestita (wrapper) Microsoft.Office.XXXX attorno a quelle brutte cose.

Ad ogni modo, la tua domanda è piuttosto strana, prova a seguire alcuni consigli qui.Buona fortuna!

Il driver di testo ODBC ora è piuttosto obsoleto: non ha il supporto Unicode.

Sorprendentemente MS Excel lo utilizza ancora, quindi se tu aprire un CSV Unicode in Excel 2007 (invece di importarlo) perdi tutti i caratteri non ASCII.

La soluzione migliore è utilizzare i metodi di lettura dei file .Net, come altri hanno suggerito.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top