相关疑难解决方法(0)

在node.js中一次读取一行文件?

我试图一次读一行大文件.我在Quora上发现了一个关于这个问题的问题,但是我错过了一些联系,以使整个事情融合在一起.

 var Lazy=require("lazy");
 new Lazy(process.stdin)
     .lines
     .forEach(
          function(line) { 
              console.log(line.toString()); 
          }
 );
 process.stdin.resume();
Run Code Online (Sandbox Code Playgroud)

我想弄清楚的是我如何从文件而不是STDIN一次读取一行,如本示例所示.

我试过了:

 fs.open('./VeryBigFile.csv', 'r', '0666', Process);

 function Process(err, fd) {
    if (err) throw err;
    // DO lazy read 
 }
Run Code Online (Sandbox Code Playgroud)

但它不起作用.我知道,在一个紧要关头,我可以回到使用像PHP这样的东西,但我想弄清楚这一点.

我认为其他答案不会起作用,因为文件比我正在运行它的服务器大得多.

javascript file-io lazy-evaluation node.js

517
推荐指数
17
解决办法
40万
查看次数

使用Node.js读取文本文件?

我需要在终端中传入一个文本文件,然后从中读取数据,我该怎么做?

node server.js file.txt
Run Code Online (Sandbox Code Playgroud)

如何从终端传递路径,如何在另一端读取?

javascript node.js

107
推荐指数
5
解决办法
17万
查看次数

你如何在node.js中同步读取文件或流?

请不要讲述我应该如何异步地做所有事情.有时我想以简单明了的方式做事,所以我可以继续其他工作.

由于某种原因,以下代码不起作用.它匹配我在最近的SO问题上找到的代码.节点改变或破坏了什么?

var fs = require('fs');
var rs = fs.createReadStream('myfilename');  // for example
                                             // but I might also want to read from
                                             // stdio, an HTTP request, etc...
var buffer = rs.read();     // simple for SCCCE example, normally you'd repeat in a loop...
console.log(buffer.toString());
Run Code Online (Sandbox Code Playgroud)

读取后,缓冲区为空.

我看到调试器中的rs

events  
   has end and open functions, nothing else
_readableState
  buffer = Array[0]
  emittedReadable = false
  flowing = false   <<< this appears to be correct
  lots of other false/nulls/undefined
fd = null   <<< …
Run Code Online (Sandbox Code Playgroud)

javascript node.js

32
推荐指数
1
解决办法
2万
查看次数

Nodejs - 从文件中逐行读取,为每一行执行异步操作并重新执行

我正在尝试逐行读取文件,执行一些具有回调的操作以及函数完成后恢复行读取.例如:

var fs = require('fs');
var readline = require('readline');
var stream = require('stream');
var instream = fs.createReadStream('./phrases.txt');
var outstream = new stream;
var rl = readline.createInterface(instream, outstream);
rl.on('line', function (line) {
  rl.pause();
  setTimeout(function () {
    console.log('resuming');
    rl.resume();
  }, 2000);
});
Run Code Online (Sandbox Code Playgroud)

我的印象是上面的例子基本上应该读一行,等待2秒,console.log然后继续下一行.真正发生的是它等待前2秒,然后喷出很多console.log

node.js

13
推荐指数
3
解决办法
2万
查看次数

nodejs同步逐行读取大文件?

我有一个大文件(utf8).我知道fs.createReadStream可以创建流来读取大文件,但不能同步.所以我尝试使用fs.readSync,但读取文本就像打破了"??".

var fs = require('fs');
var util = require('util');
var textPath = __dirname + '/people-daily.txt';   
var fd = fs.openSync(textPath, "r");
var text = fs.readSync(fd, 4, 0, "utf8");
console.log(util.inspect(text, true, null));
Run Code Online (Sandbox Code Playgroud)

javascript filesystems node.js mojibake

9
推荐指数
3
解决办法
9491
查看次数

如何在Node.js中为一个非常大(> 1GB)的文件的每一行运行异步函数

假设您有一个巨大的(> 1GB)CSV记录ID:

655453
4930285
493029
4930301
493031
...
Run Code Online (Sandbox Code Playgroud)

对于每个人,id您希望进行REST API调用以获取记录数据,在本地转换它,并将其插入本地数据库.

你如何使用Node.js' 可读Stream

我的问题基本上是这样的:你如何逐行读取一个非常大的文件,为每一行运行一个异步函数,并且[可选]能够从特定的行开始读取文件?

从以下Quora问题我开始学习使用fs.createReadStream:

http://www.quora.com/What-is-the-best-way-to-read-a-file-line-by-line-in-node-js

var fs = require('fs');
var lazy = require('lazy');

var stream = fs.createReadStream(path, {
  flags: 'r',
  encoding: 'utf-8'
});

new lazy(stream).lines.forEach(function(line) {
  var id = line.toString();
  // pause stream
  stream.pause();
  // make async API call...
  makeAPICall(id, function() {
    // then resume to process next id
    stream.resume();
  });
});
Run Code Online (Sandbox Code Playgroud)

但是,该伪代码不起作用,因为该lazy模块强制您读取整个文件(作为流,但没有暂停).所以这种方法似乎不会起作用.

另一件事是,我希望能够从特定的行开始处理这个文件.原因是,处理每个id(进行api调用,清理数据等)每个记录可能需要半秒钟,因此我不希望每次都从文件的开头开始.我正在考虑使用的天真方法是捕获最后处理的id的行号,并保存它.然后,当您再次解析文件时,您将逐行流式传输所有ID,直到找到您中断的行号,然后您开展makeAPICall业务.另一种天真的方法是编写小文件(比如100个ID)并一次处理一个文件(足够小的数据集可以在没有IO流的情况下在内存中完成所有操作).有一个更好的方法吗?

我可以看到这是如何变得棘手(以及node-lazy进来的地方),因为 …

javascript asynchronous stream filestream node.js

6
推荐指数
1
解决办法
2291
查看次数

Dart 中的 Stream&lt;List&lt;int&gt;&gt; 和 Stream&lt;int&gt; 有什么区别

我正在尝试围绕 Dart Streams 进行思考。特别是这个命令行实用程序示例cat具有以下代码行:

 Stream<List<int>> stream = new File(path).openRead();

  // Transform the stream using a `StreamTransformer`. The transformers
  // used here convert the data to UTF8 and split string values into
  // individual lines.
  return stream
      .transform(UTF8.decoder)
      .transform(const LineSplitter())
      .listen((line) {
        if (showLineNumbers) {
          stdout.write('${lineNumber++} ');
        }
        stdout.writeln(line);
      }).asFuture().catchError((_) => _handleError(path));
Run Code Online (Sandbox Code Playgroud)
  1. Stream<T>as的声明Stream<List<int>>让我有点困惑。为什么不将其声明为Stream<int>. List<> 类型如何使它与众不同。如果是列表,订阅者事件是否以某种方式缓冲?

  2. 什么类型(如<T>)被传递给第一个转换?它是一个int还是一个List<int>

  3. 传递给每个下一个转换的类型以及决定它们的类型的因素。

  4. 此示例是否在将转换结果传递给下一个转换之前读取整个文件?如果是这样,是否有关于如何流式传输非常大的文件的示例,类似于这个 Node 问题Parsing large logfiles in Node.js - read …

dart dart-async

4
推荐指数
1
解决办法
2219
查看次数

如何逐行读取并检测eof(文件结尾)?

逐行读取文件的解决方案的后续操作,如下所述:https : //stackoverflow.com/a/16013228/570796


var fs       = require('fs'),
    readline = require('readline'),
    instream = fs.createReadStream('/path/to/file');

var rl = readline.createInterface(
{
    input: instream,
    terminal: false
});

rl.on('line', function(line) 
{
    console.log(line);
    // if(instream.isEnd()) ...
});
Run Code Online (Sandbox Code Playgroud)

如何检测我是否到达文件末尾?

我知道有一个事件,ReadStream on('end', () => {/*...*/})但我需要一个解决方案,我可以通过 if 语句检查它。

io node.js

3
推荐指数
2
解决办法
7450
查看次数

NodeJS:读取一个大的csv文件

所以我有一个70mb .csv文件,我想要解析并转换为json,尝试在500kb测试csv中进行json转换我发现了一个简单的解决方案与正则表达式.
问题是当我放入我的实际数据时,我不能再使用fs.readFileSync了,所以我需要使用流.
我的问题是:我如何使用流和正则表达式?假设我的流在可能的正则表达式匹配中切断缓冲区,我想如果发生这种情况,我将丢失该数据.此外,数据没有结构化,所以我没有意识到解析它的方式比正则表达式.
如果我不清楚我的解释,请告诉我,英语不是我的主要语言,但我也知道英语社区也是最快也最可靠的.

提前致谢.

regex json fs readfile node.js

3
推荐指数
1
解决办法
1670
查看次数