मैं एक समय में एक बड़ी फ़ाइल एक पंक्ति को पढ़ने की कोशिश कर रहा हूं। मुझे Quora पर एक प्रश्न मिला, जिसने इस विषय से निपटा, लेकिन मैं पूरी तरह से एक साथ फिट होने के लिए कुछ कनेक्शन गायब कर रहा हूं।
var Lazy=require("lazy");
new Lazy(process.stdin)
.lines
.forEach(
function(line) {
console.log(line.toString());
}
);
process.stdin.resume();
बिट मैं यह जानना चाहता हूं कि मैं इस नमूने में एसटीडीआईएन के बजाय एक फ़ाइल से एक बार में एक पंक्ति कैसे पढ़ सकता हूं।
मैंने कोशिश की:
fs.open('./VeryBigFile.csv', 'r', '0666', Process);
function Process(err, fd) {
if (err) throw err;
// DO lazy read
}
लेकिन यह काम नहीं कर रहा है। मुझे पता है कि एक चुटकी में मैं PHP जैसी किसी चीज़ का उपयोग करके वापस गिर सकता हूं, लेकिन मैं यह पता लगाना चाहूंगा।
मुझे नहीं लगता कि अन्य उत्तर काम करेगा क्योंकि फ़ाइल सर्वर से बहुत बड़ी है जिस पर मैं चल रहा हूं, जिसमें मेमोरी है।
if (line.length==1 && line[0] == 48) special(line);
node
's एपीआई डॉक्स github.com/nodejs/node/pull/4609
fs.readSync()
। आप बाइनरी ऑक्टेट को एक बफर में पढ़ सकते हैं, लेकिन आंशिक रूप से UTF-8 या UTF-16 वर्णों से निपटने का कोई आसान तरीका नहीं है, बिना बफर का निरीक्षण किए इसे जावास्क्रिप्ट स्ट्रिंग्स में अनुवाद करने और EOLs के लिए स्कैन करने से पहले। इसBuffer()
प्रकार के कार्यों में रिच स्ट्रिंग्स के रूप में देशी स्ट्रिंग्स के रूप में संचालित करने के लिए समृद्ध सेट नहीं है, लेकिन देशी स्ट्रिंग्स में बाइनरी डेटा नहीं हो सकता है। यह मुझे लगता है कि मनमाने ढंग से फाइलहैंडल्स से पाठ लाइनों को पढ़ने के लिए बिल्ट-इन तरीके का अभाव नोड में एक वास्तविक अंतर है।