Próbuję odczytać duży plik po jednym wierszu na raz. Znalazłem pytanie na temat Quory, które dotyczyło tego tematu, ale brakuje mi niektórych powiązań, aby wszystko to połączyć.
var Lazy=require("lazy");
new Lazy(process.stdin)
.lines
.forEach(
function(line) {
console.log(line.toString());
}
);
process.stdin.resume();
Chciałbym dowiedzieć się, jak mógłbym czytać jedną linię na raz z pliku zamiast STDIN, jak w tym przykładzie.
Próbowałem:
fs.open('./VeryBigFile.csv', 'r', '0666', Process);
function Process(err, fd) {
if (err) throw err;
// DO lazy read
}
ale to nie działa. Wiem, że w mgnieniu oka mogłem wrócić do używania czegoś takiego jak PHP, ale chciałbym to rozgryźć.
Nie sądzę, aby druga odpowiedź działała, ponieważ plik jest znacznie większy niż serwer, na którym go uruchamiam, ma pamięć.
if (line.length==1 && line[0] == 48) special(line);
node
dokumentach API github.com/nodejs/node/pull/4609
fs.readSync()
. Możesz czytać oktety binarne w buforze, ale nie ma łatwego sposobu na radzenie sobie z częściowymi znakami UTF-8 lub UTF-16 bez sprawdzania bufora przed przetłumaczeniem go na ciągi JavaScript i skanowanie w poszukiwaniu EOL.Buffer()
Typ nie ma tak bogaty zestaw funkcji, które działają na jego wystąpień jako natywne strun, ale natywne łańcuchy nie mogą zawierać dane binarne. Wydaje mi się, że brak wbudowanego sposobu odczytu linii tekstu z dowolnych uchwytów plików to prawdziwa luka w pliku node.js.