2008-08-29 8 views
3

Ich muss aus einer Vielzahl von verschiedenen Textdateien lesen (Ich habe einige begrenzte Dateien und einige Dateien mit fester Breite). Ich habe überlegt, die Dateien Zeile für Zeile zu analysieren (langsam mit den Methoden des File.ReadLine-Typs) und die Datei mit dem ODBC-Texttreiber zu lesen (schneller), aber hat jemand noch andere (bessere) Vorschläge? Ich benutze .NET/C#.Alternativen zum erweiterten Lesen und Parsen von Textdateien mit .NET

Antwort

1

Wenn die Dateien relativ klein sind, können Sie die Klasse File verwenden. Es hat diese Methoden, die Ihnen helfen können:

  • ReadAllBytes
  • ReadAllLines
  • ReadAllText
0

Der Dateileseprozess nicht verlangsamen, wenn Sie alle auf einmal Datei lesen Sie die Datei-Klasse und die Methoden vorgeschlagen von John. Abhängig von der Größe der Datei und dem, was Sie damit machen möchten, benötigt sie mehr oder weniger Speicherplatz. Ich würde vorschlagen, Sie versuchen mit File.ReadAllText (oder was auch immer für Sie geeignet ist)

1

Ihre Frage ist ein wenig vage. Ich nehme an, dass die Textdateien strukturierte Daten enthalten, nicht nur zufällige Textzeilen.

Wenn Sie die Dateien selbst analysieren, dann hat .NET eine Bibliotheksfunktion, um alle Zeilen aus einer Textdatei in ein Array von Strings (File.ReadAllLines) zu lesen. Wenn Sie wissen, dass Ihre Dateien klein genug sind, um im Speicher zu bleiben, können Sie diese Methode verwenden und über das Array mit einem regulären Ausdruck iterieren, um zu validieren, dass die Felder & extrahiert werden.

Excel-Dateien sind ein anderes Ballspiel. .XLS-Dateien sind Binärdateien, nicht Text, Sie müssen also eine Bibliothek von Drittanbietern verwenden, um auf sie zuzugreifen. .XLSX-Dateien aus Excel 2007 enthalten komprimierte XML-Daten. Daher müssen Sie die XML-Datei erneut dekomprimieren und dann einen XML-Parser verwenden, um an die Daten zu gelangen. Ich würde dir nicht empfehlen, deinen eigenen XML-Parser zu schreiben, außer du fühlst die Notwendigkeit für die intellektuelle Übung.

5

Ich bin nicht sicher, dass Sie wirklich einen Text-und-Excel-Dateiparser tun können, es sei denn, mit Excel-Datei meinen Sie eine Komma/Rohr/Tab-getrennte Datei, die eigentlich nur eine andere Textdatei ist. Beim Lesen von Excel-Dateien müssen Sie die MS Office-Bibliotheken verwenden.

Für das Parsing von Textdateien mit Trennzeichen könnten Sie in FileHelpers - Open Source suchen und sie haben es ziemlich abgedeckt. Nicht sicher, ob es Ihren Geschwindigkeitsanforderungen entspricht.

+0

Ich habe FileHelpers verwendet, und es ist eine große lib, das ist sehr einfach zu bedienen. – NotMyself

+0

FileHelpers rockt – Mcbeev

+0

Ich habe FileHelpers verwendet und es hat gut funktioniert, ist aber sehr spröde und hängt davon ab, dass sich die Compiler-Interna nicht ändern (wie es über die Reihenfolge der Felder im Quellcode funktioniert). Siehe auch http://stackoverflow.com/questions/15828/reading-excel-files-from-c/43451#43451. Persönlich habe ich gerade versucht, was das OP in der Antwort vorschlägt, die für einfache Fälle ziemlich gut scheint. –

0

In Bezug auf das Lesen XLS-Dateien:

Wenn Sie Microsoft Office XP und höher, haben Sie Zugriff auf das bereits .NET SDK Office-Bibliotheken enthalten, in dem Sie "nativ" XLS-Dateien lesen, Word, PPT, etc. Bitte beachten Sie, dass Sie dies unter Office XP manuell während der Installation überprüfen müssen (es sei denn, Sie hatten zuvor .NET installiert).

Ich weiß nicht, ob diese Bibliotheken als separates Paket verfügbar sind, wenn Sie nicht über Microsoft Office verfügen.

aus unerfindlichen Gründen, alle diese Bibliotheken (einschließlich der neuesten Versionen von Office 2007 -a.k.a .: 12 Büro), sind COM-Komponenten, die eine Schmerz zu verwenden sind, verursachen hässliche Abhängigkeiten und sind nicht rückwärtskompatibel. I.E .: Wenn Sie einige Methoden haben, die mit Office XP (Office11) funktionieren, und Sie diese auf einem Kunden mit Office 12 installieren, funktioniert nicht, weil einige Schnittstellen geändert wurden.Sie müssen also zwei Satz von "Bibliotheken" und Methoden, um damit umzugehen. Dasselbe gilt, wenn Sie Office 12-Bibliotheken zum Programmieren verwenden und Ihr Kunde Office 11. Ihre Bibliotheken funktionieren nicht. : S

Ich weiß nicht, warum Microsoft nie eine Microsoft.Office.XXXX verwaltete Bibliothek (Wrapper) um diese hässlichen Dinge erstellt.

Wie auch immer, Ihre Frage ist ziemlich seltsam, versuchen Sie, einige Ratschläge hier zu folgen. Viel Glück!

3

Ignorieren der Excel Teil (die Sie sagen, ist nicht wichtig):

ich LINQ ziemlich nützlich gefunden habe Dateien in Parsen txt zu sein (Verkettungszeichen getrennte oder csv)

z.B. Diese liest eine rohr getrennte Datei die hader Zeile übersprungen und schafft eine IEnumerable als das Ergebnis:

var records = von Zeile in File.ReadAllLines (@ "c: \ blah.txt"). Überspringen (1) let Teile = line.Split ('|') Teile auswählen;

0

Der ODBC-Texttreiber ist jetzt ziemlich veraltet - er hat keine Unicode-Unterstützung.

Erstaunlicherweise MS Excel verwendet es immer noch, also wenn Sie eine Unicode-CSV in Excel 2007 öffnen (anstatt importieren) verlieren Sie alle Nicht-ASCII-Zeichen.

Am besten ist es, die Dateilesemethoden von .Net zu verwenden, wie von anderen vorgeschlagen.

1

ich mit John einverstanden sind,

Zum Beispiel: -

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... 
    } 
    } 
} 
Verwandte Themen