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
meine eigene Frage zu beantworten:
ich das Microsoft.VisualBasic.FileIO.TextFieldParser-Objekt am Ende finden Sie unter:
http://msdn.microsoft.com/en-us/library/f68t4563.aspx
(example of implementation here)
Dies ermöglicht es mir, ohne sich Gedanken über csv-Dateien zu verarbeiten, wie zu bewältigen, ob Felder in Anführungszeichen eingeschlossen sind, enthalten Kommas, entkam Anführungszeichen usw.
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
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)
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.
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.
Ich habe FileHelpers verwendet, und es ist eine große lib, das ist sehr einfach zu bedienen. – NotMyself
FileHelpers rockt – Mcbeev
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. –
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!
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;
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.
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...
}
}
}
- 1. Lesen und Schreiben von Textdateien
- 2. Lesen von Textdateien mit read.table
- 3. . Net-Bibliothek zum Parsen von Quellcode-Dateien?
- 4. Lesen von großen Textdateien effizient
- 5. Lesen von Textdateien, Fehler mit Last MATLAB
- 6. Verwenden von Hibernate zum Arbeiten mit Textdateien
- 7. Newbie Frage: Lesen und Verarbeiten einer Liste von Textdateien
- 8. Lesen, Schreiben und Durchsuchen von Textdateien mit Qt
- 9. Alternativen zum "SAP Connector für .NET"
- 10. Lesen und Schreiben Anpassungsmuster in Textdateien
- 11. Lesen von vCalendar und vCard mit .NET?
- 12. .NET-Bibliothek zum Lesen von Videoframes
- 13. lesen arabische Zeichen von Textdateien in PHP
- 14. Lesen Sie Unicode Textdateien mit Java
- 15. Regex zum Parsen von Hyperlinks und Beschreibungen
- 16. Ein Algorithmus zum Filtern von Textdateien
- 17. C# - Textdateien lesen (System IO)
- 18. HL7 FHIR-Routing mit erweiterten Such-und Modifikatoren in. Net
- 19. jquery zum Erstellen von erweiterten Suchabfragen Builder
- 20. JFileChooser zum Auswählen mehrerer Textdateien und Vergleichen
- 21. .NET-Bibliothek für Textdateien fester Länge
- 22. Wie können Sie Textdateien lesen?
- 23. Alternativen Bibliotheken zum Laden von PNG-Bildern
- 24. Python-Modul zum Formatieren von Textdateien
- 25. Parsen von Strings und Doppelvektoren mit Scanner?
- 26. Verwenden von TextWriter zum Schreiben von Textdateien mit parametrischer Dateiname
- 27. Lesen von Netzwerkproblem. NET
- 28. .bat-Datei zum Durchlaufen des Ordners und Anhängen von Textdateien
- 29. Lesen des lokalen Datenspeichers von Gerät parsen?
- 30. Wie parsen Sie die alternativen Subjektnamen von einem X509Certificate2?
Sehr schön .... +1 – Taptronic