Ich muss eine Textdatei im Terminal übergeben und dann die Daten daraus lesen. Wie kann ich das tun?
node server.js file.txt
Wie gehe ich den Weg vom Terminal aus, wie lese ich das auf der anderen Seite?
javascript
node.js
schick
quelle
quelle
Antworten:
Sie möchten das
process.argv
Array verwenden, um auf die Befehlszeilenargumente zuzugreifen, um den Dateinamen und das FileSystem-Modul (fs) zum Lesen der Datei abzurufen . Beispielsweise:Um dies ein wenig aufzuschlüsseln,
process.argv
haben Sie normalerweise die Länge zwei, wobei das nullte Element der "Knoten" -Interpreter und das erste das Skript ist, das der Knoten gerade ausführt. Danach wurden Elemente in der Befehlszeile übergeben. Sobald Sie einen Dateinamen aus argv gezogen haben, können Sie die Dateisystemfunktionen verwenden, um die Datei zu lesen und mit dem Inhalt zu tun, was Sie wollen. Die Beispielnutzung würde folgendermaßen aussehen:[Bearbeiten] Wie @wtfcoder erwähnt, ist die Verwendung der
fs.readFile()
Methode " " möglicherweise nicht die beste Idee, da der gesamte Inhalt der Datei gepuffert wird, bevor sie an die Rückruffunktion übergeben wird. Diese Pufferung könnte möglicherweise viel Speicher beanspruchen, nutzt jedoch vor allem nicht eine der Kernfunktionen von node.js - asynchrone E / A mit Ereignissen.Die "Knoten" -Methode zum Verarbeiten einer großen Datei (oder einer beliebigen Datei) besteht darin,
fs.read()
jeden verfügbaren Block zu verwenden und zu verarbeiten, wie er vom Betriebssystem verfügbar ist. Um die Datei als solche zu lesen, müssen Sie jedoch Ihre eigene (möglicherweise) inkrementelle Analyse / Verarbeitung der Datei durchführen, und ein gewisses Maß an Pufferung kann unvermeidlich sein.quelle
var lines = data.split(/\r?\n/);
, dann hat das Array "Zeilen" jede Zeile.Verwenden Sie fs mit dem Knoten.
quelle
IMHO,
fs.readFile()
sollte vermieden werden, da es die gesamte Datei im Speicher lädt und den Rückruf erst aufruft, wenn die gesamte Datei gelesen wurde.Der einfachste Weg, eine Textdatei zu lesen, besteht darin, sie Zeile für Zeile zu lesen. Ich empfehle einen BufferedReader :
Für komplexe Datenstrukturen wie .properties oder JSON-Dateien müssen Sie einen Parser verwenden (intern sollte auch ein gepufferter Reader verwendet werden).
quelle
fs.readFile()
oder nicht zu verwenden, wenn es sich nur um eine kleine Datei handelt, die an ein Befehlszeilentool übergeben wirdfs.readFileSync()
. Es muss eine riesige Datei sein, um ein merkliches Warten zu verursachen. Eine JSON-Konfigurationsdatei wie package.json ist wahrscheinlich unter 1 KB groß, also können Sie es einfachfs.readFile()
undJSON.parse()
so.Sie können readstream und pipe verwenden, um die Datei Zeile für Zeile zu lesen, ohne die gesamte Datei einmal in den Speicher einzulesen.
quelle
Ich poste ein vollständiges Beispiel, an dem ich endlich gearbeitet habe. Hier lese ich in einer Datei
rooms/rooms.txt
aus einem Skriptrooms/rooms.js
quelle