Preciso passar um arquivo de texto no terminal e depois ler os dados dele, como posso fazer isso?
node server.js file.txt
Como faço para passar o caminho do terminal, como faço para ler isso do outro lado?
javascript
node.js
chique
fonte
fonte
Respostas:
Você vai querer usar o
process.argv
array para acessar os argumentos da linha de comando para obter o nome do arquivo e o módulo FileSystem (fs) para ler o arquivo. Por exemplo:Para quebrar isso um pouco, você
process.argv
normalmente terá o comprimento dois, o item zero sendo o interpretador de "nó" e o primeiro sendo o script que o nó está executando no momento, itens depois disso foram passados na linha de comando. Depois de obter um nome de arquivo do argv, você pode usar as funções do sistema de arquivos para ler o arquivo e fazer o que quiser com seu conteúdo. O uso de amostra ficaria assim:[Editar] Como @wtfcoder menciona, usar o
fs.readFile()
método " " pode não ser a melhor ideia porque ele armazenará em buffer todo o conteúdo do arquivo antes de submetê-lo à função de retorno de chamada. Esse armazenamento em buffer poderia potencialmente usar muita memória, mas, mais importante, ele não tira proveito de um dos principais recursos do node.js - E / S assíncrona com eventos.A maneira de "nó" de processar um arquivo grande (ou qualquer arquivo, na verdade) seria usar
fs.read()
e processar cada pedaço disponível conforme ele está disponível no sistema operacional. No entanto, ler o arquivo como tal requer que você faça sua própria (possivelmente) análise / processamento incremental do arquivo e alguma quantidade de buffer pode ser inevitável.fonte
var lines = data.split(/\r?\n/);
, então o array "linhas" terá cada linha.Use fs com nó.
fonte
IMHO,
fs.readFile()
deve ser evitado porque carrega TODOS os arquivos na memória e não chamará o retorno de chamada até que todo o arquivo seja lido.A maneira mais fácil de ler um arquivo de texto é lê-lo linha por linha. Eu recomendo um BufferedReader :
Para estruturas de dados complexas como .properties ou arquivos json, você precisa usar um analisador (internamente, também deve usar um leitor de buffer).
fonte
fs.readFile()
oufs.readFileSync()
. Deve ser um arquivo enorme para causar uma espera perceptível. Um arquivo de configuração JSON como package.json é provável que seja menos de 1 kb, então você pode apenasfs.readFile()
eJSON.parse()
ele.Você pode usar readstream e pipe para ler o arquivo linha por linha sem ler todo o arquivo na memória uma vez.
fonte
Estou postando um exemplo completo que finalmente consegui funcionar. Aqui estou lendo um arquivo
rooms/rooms.txt
de um scriptrooms/rooms.js
fonte