ฉันพยายามอ่านไฟล์ขนาดใหญ่ทีละบรรทัด ฉันพบคำถามเกี่ยวกับ Quoraที่เกี่ยวข้องกับเรื่องนี้ แต่ฉันขาดการเชื่อมต่อบางอย่างเพื่อทำให้สิ่งทั้งหมดเข้าด้วยกัน
var Lazy=require("lazy");
new Lazy(process.stdin)
.lines
.forEach(
function(line) {
console.log(line.toString());
}
);
process.stdin.resume();
บิตที่ฉันอยากรู้คือฉันจะอ่านทีละบรรทัดจากไฟล์แทน STDIN ได้อย่างไรในตัวอย่างนี้
ฉันเหนื่อย:
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
เอกสาร API ของgithub.com/nodejs/node/pull/4609
fs.readSync()
ผลัดกันออกมานี้จะค่อนข้างยากโดยใช้เพียงในระดับต่ำ คุณสามารถอ่านเลขฐานแปดไบนารีลงในบัฟเฟอร์ได้ แต่ไม่มีวิธีง่ายๆในการจัดการกับอักขระ UTF-8 หรือ UTF-16 บางส่วนโดยไม่ตรวจสอบบัฟเฟอร์ก่อนแปลเป็นสตริง JavaScript และทำการสแกนหา EOLBuffer()
ประเภทไม่ได้เป็นชุดที่อุดมไปด้วยฟังก์ชั่นการใช้งานบนอินสแตนซ์ที่เป็นสตริงพื้นเมือง แต่สตริงพื้นเมืองไม่สามารถมีข้อมูลไบนารี สำหรับฉันดูเหมือนว่าการขาดวิธีการอ่านข้อความในตัวจาก filehandles โดยพลการนั้นเป็นช่องว่างที่แท้จริงใน node.js