Мне нужно прочитать файл по строкам и соответствующим образом изменить переменную. Обычно я пишу это на PHP ... но я решил взять вызов.Узел и ленивый: Откуда я знаю, когда это будет сделано?
я писал:
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);
Помимо кода быть очень некрасиво и очень unoptimised, у меня возникли проблемы, как, когда последняя строка выводит, переменная «программное обеспечение» не ПОКА заселена! Я предполагаю, что Lazy асинхронен. Таким образом, он в основном работает, но «в какой-то момент позже». Это здорово, но ... где я пишу код, когда этот важный цикл, который заполняет программную переменную, на самом деле завершен?!?
В соответствии с запросом: данные для игры!
просто создать "something.txt" и записи:
name:
Name 1
.
Option 1:
Value 1
.
Option 2:
Value 2
.
Option 3:
Multi
Line
Value
.
Another_section:
Again
.
Merc.
Хороший вопрос! Не могли бы вы дать мне несколько примеров для примера? – jsalonen
Я имею в виду, что я * мог * хранить fs.createReadStream (имя_файла)). Lines.length и увеличивать счетчик для каждой строки, а затем, когда число строк достигнуто, вызовите функцию ... но это кажется совершенно сумасшедшим. ОБЯЗАТЕЛЬНО! – Merc