我需要逐行讀取文件,並相應地更改一個變量。 我通常會用PHP寫這個...但我決定接受挑戰。Node和Lazy:我如何知道它何時完成?
我寫道:
fs = require('fs');
Lazy = require('lazy');
path = require('path');
files = fs.readdirSync('.');
var software = {};
files.forEach(function(fileName){
var m;
if(m = fileName.match(/^(.*)\.txt$/)){
name = m[1];
console.log("Processing file: " + fileName);
software[name] = {};
console.log("Software 1: %j",software);
var section = 'unset';
new Lazy(fs.createReadStream(fileName)).lines.forEach(
function(line){
var m;
line = line + '';
if(m = line.match(/^([a-zA-Z_]*):$/)){
section = m[1];
software[name][section] = '';
console.log("Switching to section " + m[1]);
console.log("Software 2: %j",software);
} else if (line == '.'){
section = 'unset'
} else if (line == ''){
section = 'unset'
} else {
console.log("LINE: " + line) ;
software[name][section] = software[name][section] + line + "\n";
console.log("Software 3: %j",software);
}
}
);
}
});
console.log("Software 4: %j",software);
從代碼
除了是很醜陋,很未優化,我有麻煩當最後一行打印,「軟件」變量尚未填充!我猜懶惰是異步的。所以,它基本上是有效的,但是「在稍後的某個時刻」。這很好,但是......當那個重要的循環填充軟件變量時,我在哪裏編寫代碼實際上完成了?!?
根據要求:數據玩!
只需創建 「something.txt」,並寫:
name:
Name 1
.
Option 1:
Value 1
.
Option 2:
Value 2
.
Option 3:
Multi
Line
Value
.
Another_section:
Again
.
芝加哥商業交易所。
好問題!你能給我一些簡單的示例數據來玩嗎? – jsalonen
我的意思是,我*可以*存儲fs.createReadStream(fileName)).lines.length併爲每一行增加一個計數器,然後當行數達到時調用一個函數......但這似乎完全是瘋了。一定! – Merc