[解決済み】node.js:テキストファイルを配列に読み込む。(各行は配列のアイテムです)。
2022-04-15 17:01:02
質問
node.jsで、とてもとても大きなファイルをJavaScriptの配列に読み込みたいのですが、どうすればいいですか?
で、こんな感じのファイルなら
first line
two
three
...
...
配列を持つことになる。
['first line','two','three', ... , ... ]
関数は次のようになる。
var array = load(filename);
したがって、すべて文字列として読み込んでから分割するという発想は通用しない。
どのように解決するのですか?
最終的なデータを配列に収めることができるのであれば、提案されているように、文字列に収めて分割することもできるのではないでしょうか? いずれにせよ、ファイルを一行ずつ処理したいのであれば、次のような方法もあります。
var fs = require('fs');
function readLines(input, func) {
var remaining = '';
input.on('data', function(data) {
remaining += data;
var index = remaining.indexOf('\n');
while (index > -1) {
var line = remaining.substring(0, index);
remaining = remaining.substring(index + 1);
func(line);
index = remaining.indexOf('\n');
}
});
input.on('end', function() {
if (remaining.length > 0) {
func(remaining);
}
});
}
function func(data) {
console.log('Line: ' + data);
}
var input = fs.createReadStream('lines.txt');
readLines(input, func);
EDITです。 (のコメントに対して フォプキンス (v8のソースコードをざっと見たところでは、少なくとも新しいバージョンでは) substringはデータをコピーするのではなく、特別なSlicedStringオブジェクトを作成するのだと思うのですが。いずれにせよ、ここに、前述のsubstringを回避するための修正を示します(数メガバイト分の "All work and no play makes Jack a dull boy" のファイルでテストしました)。
function readLines(input, func) {
var remaining = '';
input.on('data', function(data) {
remaining += data;
var index = remaining.indexOf('\n');
var last = 0;
while (index > -1) {
var line = remaining.substring(last, index);
last = index + 1;
func(line);
index = remaining.indexOf('\n', last);
}
remaining = remaining.substring(last);
});
input.on('end', function() {
if (remaining.length > 0) {
func(remaining);
}
});
}
関連
-
[解決済み] TypeScript getting error TS2304: cannot find name ' require'.
-
[解決済み] 配列に特定のインデックスで項目を挿入する方法 (JavaScript)
-
[解決済み] 配列の最後の項目を取得する
-
[解決済み] 配列から最初のN個の要素を取得する方法
-
[解決済み] Node.JSを使用して、JSONファイルを(サーバー)メモリに読み込むにはどうすればよいですか?
-
[解決済み] JavaScriptで配列の長さを初期化する方法は?
-
[解決済み] スクリプトタグ - 非同期と遅延
-
[解決済み] node.jsでファイルを1行ずつ読み込む?
-
[解決済み] Node.jsのバージョンはコマンドラインから?(REPLではありません)
-
[解決済み] How do I replace all line breaks in a string with <br /> elements?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
vue ディレクティブ v-html と v-text
-
vueが定義するプライベートフィルタと基本的な使い方
-
Vueでルートネスティングを実装する例
-
[解決済み】SyntaxError: JSONの位置1に予期しないトークンoがある。
-
[解決済み】JavaScript TypeError: null のプロパティ 'style' を読み取ることができない
-
[解決済み】ReactJSでエラー発生 Uncaught TypeError: Super expression は null か関数でなければならず、undefined ではありません。
-
nullのプロパティinnerHTMLを読み取れません エラーメッセージ
-
フロントエンド null のプロパティ 'disabled' を読み取れない 問題が解決された
-
[解決済み] node.jsでファイルを1行ずつ読み込む?
-
[解決済み] Node.jsを使ってテキストファイルを読み込む?