Brief:
Ein System, die CSV-Dateien geladen werden kann, aber sie sind zu erwarten riesige (+ 1 M Zeilen) sein. Ich habe bereits eine Idee, wie man sie mit Warteschlangen und Hintergrundjobs/Aufgaben bearbeitet.Wie kann man die Anzahl der Zeilen in einer Datei kennen, ohne ihren Inhalt in den Speicher in JavaScript zu laden?
Aber
Ich mag den Benutzer einen Fortschritt auf seiner Akte, etwas Zeile anzuzeigen: 2165 von 1.246.875 oder vielleicht der Prozentsatz davon. Um dies zu archivieren, muss ich die Anzahl der Zeilen in der Datei kennen, aber ich muss dazu, ohne seinen Inhalt in den Speicher zu laden, also kann es schnell sein, sobald ich einen Upload habe und den Dateinamen innerhalb der Datei speichern kann insgesamt Zeilen darin gefunden.
In PHP ist dies möglichSplFileObject
zum PHP_MAX_INT
-seek()
versuchen verwenden, dann geht es auf die höchste Linie kann es in der Datei und key()
kehrt die Linie.
Aber das System wird vollständig in JavaScript/Node.js so gebaut, nur aus Bequemlichkeit, ich möchte diesen Systemteil auch in JavaScript bauen.
Wie konnte ich das erreichen? Bereits einen Blick auf FS API geworfen, aber nicht gefunden, wie dazu.
[EDIT]
Ideen so weit:
child_process.exec
+wc -l
(nur Unix)- diese Informationen von dem Client Get
FileReader
(Delegate Ressourcen für den Benutzer) mit
Sie können einige erste Zeilen lesen, die durchschnittliche Größe der Zeile kalkulieren und die Dateigröße aufteilen. –
Jemand korrigiert mich, wenn ich falsch liege, aber wenn Sie die Datei async lesen und keine Dateicodierung angeben, behandeln Sie nur die Brocken, richtig? Könnten Sie die Zeilenumbrüche in jedem Chunk zählen und den Chunk Müll sammeln lassen? –
Sie müssen die Zeilen nicht zählen. Verfolgen Sie die Anzahl der verarbeiteten Bytes und teilen Sie sie durch die Dateilänge, um zu wissen, wie viel von der Datei Sie bereits verarbeitet haben. Multiplizieren Sie mit 100, um es als Prozentsatz auszudrücken. – axiac