Je dois transmettre un fichier texte dans le terminal, puis en lire les données, comment puis-je faire cela?
node server.js file.txt
Comment passer le chemin depuis le terminal, comment lire cela de l'autre côté?
javascript
node.js
fantaisie
la source
la source
Réponses:
Vous voudrez utiliser le
process.argv
tableau pour accéder aux arguments de ligne de commande pour obtenir le nom de fichier et le module FileSystem (fs) pour lire le fichier. Par exemple:Pour décomposer un peu cela, vous
process.argv
aurez généralement une longueur de deux, l'élément zéro étant l'interpréteur "node" et le premier étant le script que le nœud est en cours d'exécution, les éléments après cela ont été passés sur la ligne de commande. Une fois que vous avez extrait un nom de fichier d'argv, vous pouvez utiliser les fonctions du système de fichiers pour lire le fichier et faire ce que vous voulez avec son contenu. Un exemple d'utilisation ressemblerait à ceci:[Edit] Comme le mentionne @wtfcoder, utiliser la
fs.readFile()
méthode " " n'est peut-être pas la meilleure idée car elle mettra en mémoire tampon tout le contenu du fichier avant de le céder à la fonction de rappel. Cette mise en mémoire tampon pourrait potentiellement utiliser beaucoup de mémoire mais, plus important encore, elle ne tire pas parti de l'une des fonctionnalités de base de node.js - les E / S asynchrones et événementielles.La manière «nœud» de traiter un gros fichier (ou n'importe quel fichier, en réalité) serait d'utiliser
fs.read()
et de traiter chaque morceau disponible tel qu'il est disponible à partir du système d'exploitation. Cependant, la lecture du fichier en tant que tel vous oblige à effectuer votre propre analyse / traitement incrémentiel (éventuellement) du fichier et une certaine quantité de mise en mémoire tampon peut être inévitable.la source
var lines = data.split(/\r?\n/);
, alors le tableau "lines" aura chaque ligne.Utilisez fs avec node.
la source
A MON HUMBLE AVIS,
fs.readFile()
doit être évité car il charge TOUS les fichiers en mémoire et n'appellera pas le rappel tant que tout le fichier n'aura pas été lu.Le moyen le plus simple de lire un fichier texte est de le lire ligne par ligne. Je recommande un BufferedReader :
Pour les structures de données complexes telles que les fichiers .properties ou json, vous devez utiliser un analyseur syntaxique (en interne, il doit également utiliser un lecteur tamponné).
la source
fs.readFile()
oufs.readFileSync()
. Il doit s'agir d'un fichier volumineux pour provoquer une attente notable. Un fichier de configuration JSON comme package.json est susceptible d'être de moins de 1 kb, de sorte que vous pouvez justefs.readFile()
etJSON.parse()
il.Vous pouvez utiliser readstream et pipe pour lire le fichier ligne par ligne sans lire tout le fichier en mémoire une seule fois.
la source
Je poste un exemple complet que j'ai finalement mis au travail. Ici, je lis un fichier à
rooms/rooms.txt
partir d'un scriptrooms/rooms.js
la source