Ich muss Daten einer sehr großen CSV-Datei analysieren und sortieren. Bitte beachten Sie, dass die Datei aus ca. 600.000 Zeilen besteht. Ich muss es nicht irgendwo speichern oder in die DB importieren. Bitte geben Sie an, wie Sie diese Implementierung effizient durchführen können. Ich schätze deine Erfahrungsaustauscherfahrung.eine CSV-Datei lesen?
Antwort
ich es so tun würde ...
var list = new List<float>(10000);
using (var fs = new StreamReader(new FileStream("file.csv", FileMode.Open, FileAccess.Read, FileShare.None, 8192, FileOptions.SequentialScan)))
{
var line = fs.ReadLine();
var columns = line.Split(',');
list.Add(Convert.ToSingle(columns[5]));
}
// Sort the list and do your calculations...
Hinweis FileOptions.SequentialScan
, auch mit dem spielen bufferSize
(nicht sicher, ob der Standardwert 4096 oder 8192 ist) bessere Ergebnisse zu erzielen ... Auch Pre- Weisen Sie die Listengröße zu, um eine Größenanpassung der Liste zu verhindern ...
Dank @Michael, kann ich gerade eine Spalte lesen? Ich brauche Daten aus einer einzigen Spalte. Ist es effizient, eine Spalte zu lesen? – user576510
@ user576510 Wenn alle Spalten/Spalteninhalte eine feste Breite/Länge haben, können Sie den Dateicursor direkt vor der Spalte positionieren, den Inhalt lesen und dann n-Bytes vorwärts zur nächsten Zeilenspalte springen. Aber für normale csv-Dateien nehme ich Spalten mit variabler Länge an und dann lautet die Antwort nein, da Sie nicht wissen, wo Ihre Datenspalte beginnt und wann die aktuelle Zeile endet ... – Michael
Parsen [diese csv] (http://imgur.com/a/url59). –
Eine Möglichkeit, die Sortierung großer Dateien mit externer Sortierung zu verarbeiten. Es gibt eine Reihe von CSV-Bibliotheken, die sie aus der Box anbieten.
Cinchoo ETL verfügt über einen CSVReader mit externer Sortierfunktion. Sie können es für Ihren Zweck nutzen
a. Definieren Sie die POCO-Klasse, um den CSV-Datensatz darzustellen. Wichtig: Markieren Sie die Klasse als serialisierbar, um sie für die externe Sortierung zu verwenden.
[Serializable]
public class Customer
{
[ChoCSVRecordField(1)]
[Key]
public int Id { get; set; }
[ChoCSVRecordField(2)]
public string Street { get; set; }
[ChoCSVRecordField(4)]
public string City { get; set; }
[ChoCSVRecordField(6)]
public string Zip { get; set; }
}
b. Comparer-Klasse zum Sortieren nach einer Spalte schreiben (z. B. nach Stadt sortieren)
public class AddressCityComparer : IComparer<Customer>
{
public int Compare(Customer x, Customer y)
{
return String.Compare(x.City, y.City);
}
}
c. Zuletzt laden Sie die CSV-Datei mit ChoCSVReader. Übergeben Sie es an ExternalSorting-Methode, um sie zu sortieren
foreach (var e in new ChoCSVReader<Customer>("Test.txt").WithDelimiter("\t").ExternalSort(new AddressCityComparer()))
Console.WriteLine(e.City);
Hoffe, dass dies hilft.
- 1. So lesen/lesen Sie eine .x-Datei
- 2. Eine C-Datei lesen, eine zusätzliche Zeile lesen, warum?
- 3. Java Lesen eine Excel
- 4. Eine HTML-Datei lesen
- 5. Eine Textdatei lesen
- 6. Eine Datei lesen - Python?
- 7. Eine einfache Textdatei lesen
- 8. EINE DATEI LESEN (FORTRAN)
- 9. Eine QTcpSocket lesen
- 10. Eine Textdatei in eine Struktur lesen
- 11. Eine Datei über eine Funktion + Struktur lesen
- 12. Eine Zeichenfolge mit fscanf lesen
- 13. Eine Zeichenfolge als HTML lesen
- 14. Eine Textdatei im Kriegsarchiv lesen
- 15. Eine Textdatei in R lesen
- 16. eine Textdatei in Powershell Lesen
- 17. Eine Datei für CRC32 lesen
- 18. Eine Textdatei in Java lesen
- 19. Eine Eingabe vom Terminal lesen
- 20. Eine Datei mit Skript lesen
- 21. Eine Datei im Jar lesen
- 22. Lesen und Zeichenüber eine Datei
- 23. lesen() eine ungebundene Buchse bilden?
- 24. Eine Zeile von stdin lesen
- 25. Eine Tabelle mit Selenium lesen
- 26. eine Ressource mit BufferedReader Lesen
- 27. Eine Webseite mit Asyncore lesen
- 28. Eine Datei mit Daten lesen
- 29. Eine Datei in Node.js lesen
- 30. Kommandozeilenargumente, eine Datei zu lesen
Warum müssen Sie sortieren, wenn Sie nur den Medianwert benötigen? – jdweng
Lesen Sie [RFC 4180] (https://tools.ietf.org/html/rfc4180), um das gesamte Bild im CSV-Format zu erhalten, und durchsuchen Sie anschließend eine Bibliothek, die CSV-Daten gemäß RFC 4180 –
http: //www.filehelpers verarbeitet .net/example/Sorting/SortBigFiles/ –