নোড.জেজে এক সময় একটি ফাইল পড়ুন?


550

আমি একবারে একটি বড় ফাইল এক লাইনে পড়ার চেষ্টা করছি। আমি কোওরায় একটি প্রশ্ন পেয়েছি যা এই বিষয়টি নিয়ে কাজ করেছে তবে পুরো জিনিসটি এক সাথে ফিট করার জন্য আমি কিছু সংযোগ মিস করছি।

 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 
 }

কিন্তু এটি কাজ করে না আমি জানি যে এক চিমটি আমি পিএইচপি এর মতো কিছু ব্যবহার করে ফিরে যেতে পারি, তবে আমি এটি বের করতে চাই।

আমি মনে করি না যে অন্যান্য জবাবটি কাজ করবে কারণ ফাইলটি যে সার্ভারটিতে এটি চালাচ্ছি তার থেকে মেমরির চেয়ে অনেক বড়।


2
এটি কেবলমাত্র নিম্ন-স্তরের ব্যবহার করা বেশ কঠিন বলে প্রমাণিত হয় fs.readSync()। আপনি বাইনারি অক্টেটগুলি একটি বাফারে পড়তে পারেন তবে জাভাস্ক্রিপ্টের স্ট্রিংগুলিতে অনুবাদ এবং EOL এর জন্য স্ক্যান করার আগে বাফারটি পরীক্ষা না করে আংশিক ইউটিএফ -8 বা ইউটিএফ -16 অক্ষরের সাথে ডিল করার সহজ উপায় নেই। Buffer()টাইপ ফাংশন নেটিভ স্ট্রিং হিসেবে তার দৃষ্টান্ত কাজ করার সমৃদ্ধ সেট হিসাবে নেই, কিন্তু নেটিভ স্ট্রিং বাইনারি ডেটা থাকতে পারে না। আমার কাছে মনে হচ্ছে যে স্বেচ্ছাসেবী ফাইলহ্যান্ডলগুলি থেকে পাঠ্য লাইনগুলি পড়ার অন্তর্নিহিত উপায়ের অভাব হ'ল নোড.জেএসের মধ্যে একটি আসল ফাঁক is
হিপ্পিট্রেইল

5
এই পদ্ধতিতে পড়া খালি লাইনগুলি একটি একক 0 (প্রকৃত চরিত্রের কোড 0) এর সাথে একটি লাইনে রূপান্তরিত হয়। আমাকে এই লাইনটি সেখানে হ্যাক করতে হয়েছিল:if (line.length==1 && line[0] == 48) special(line);
থাবো

2
কেউ 'লাইন বাই লাইন' প্যাকেজও ব্যবহার করতে পারেন যা কাজটি পুরোপুরি করে।
প্যাট্রিস


2
@ ড্যানডাসকলেসকু যদি আপনি চান তবে আপনি এই তালিকায় এটি যুক্ত করতে পারেন: আপনার উদাহরণটি github.com/nodejs/node/pull/4609node এর এপিআই ডক্সে
এলজেফিডেলরডোডেলজেফে 11:47

উত্তর:


786

Node.js v0.12 যেহেতু আর Node.js v4.0.0 হিসাবে, একটি স্থিতিশীল readline কোর মডিউল। কোনও বাহ্যিক মডিউল ছাড়াই কোনও ফাইলের লাইনগুলি পড়ার সহজ উপায় এখানে:

const fs = require('fs');
const readline = require('readline');

async function processLineByLine() {
  const fileStream = fs.createReadStream('input.txt');

  const rl = readline.createInterface({
    input: fileStream,
    crlfDelay: Infinity
  });
  // Note: we use the crlfDelay option to recognize all instances of CR LF
  // ('\r\n') in input.txt as a single line break.

  for await (const line of rl) {
    // Each line in input.txt will be successively available here as `line`.
    console.log(`Line from file: ${line}`);
  }
}

processLineByLine();

বা বিকল্পভাবে:

var lineReader = require('readline').createInterface({
  input: require('fs').createReadStream('file.in')
});

lineReader.on('line', function (line) {
  console.log('Line from file:', line);
});

চূড়ান্ত না থাকলেও শেষ লাইনটি সঠিকভাবে পড়বে (নোড v0.12 বা তার পরে) \n

আপডেট : এই উদাহরণটি নোডের এপিআই অফিসিয়াল ডকুমেন্টেশনে যুক্ত করা হয়েছে ।


7
আপনার একটি টার্মিনাল দরকার: তৈরি ইন্টারফেসের সংজ্ঞাতে মিথ্যা
গ্লাসপিল

64
শেষ লাইনটি কীভাবে নির্ধারণ করবেন? একটি "কাছাকাছি" ইভেন্টটি ধরা:rl.on('close', cb)
সবুজ

27
রিডলাইন জিএনইউ রিডলাইন হিসাবে অনুরূপ উদ্দেশ্যে , ফাইলগুলি লাইন লাইন পড়ার জন্য নয় । ফাইলগুলি পড়তে এটির ব্যবহারের ক্ষেত্রে বেশ কয়েকটি সাবধানতা রয়েছে এবং এটি সর্বোত্তম অনুশীলন নয়।
নেকিডেবল

8
@ নাকিবল: আকর্ষণীয় আপনি আরও ভাল পদ্ধতিতে উত্তর পোস্ট করতে পারেন?
ড্যান ড্যাসক্লেস্কু

6
আমি github.com/jahewson/node-byline কে লাইন বাই লাইন পড়ার সেরা বাস্তবায়ন হিসাবে বিবেচনা করি , তবে মতামত পৃথক হতে পারে।
নেকিডেবল

164

এ জাতীয় সাধারণ ক্রিয়াকলাপের জন্য তৃতীয় পক্ষের মডিউলগুলির উপর কোনও নির্ভরতা থাকা উচিত নয়। সহজ যান।

var fs = require('fs'),
    readline = require('readline');

var rd = readline.createInterface({
    input: fs.createReadStream('/path/to/file'),
    output: process.stdout,
    console: false
});

rd.on('line', function(line) {
    console.log(line);
});

33
দুঃখের বিষয়, এই আকর্ষণীয় সমাধানটি সঠিকভাবে কাজ করে না - lineঘটনাগুলি হিট করার পরেই আসে \n, অর্থাত্, সমস্ত বিকল্প মিস করা হয় ( ইউনিকোড.অর্গ / রিપોર્ટস / টিআর 18/# লাইন_সীমাগুলি দেখুন )। # 2, শেষের পরে থাকা ডেটা \nনিঃশব্দে উপেক্ষা করা হবে (দেখুন স্ট্যাকওভারফ্লো / প্রশ্ন / 18450197/… )। আমি এই সমাধানটিকে বিপজ্জনক কারণ বলব কারণ এটি সমস্ত ফাইলের 99% এবং ডেটা 99% এর জন্য কাজ করে তবে বাকী ক্ষেত্রে নিঃশব্দে ব্যর্থ হয় । যখনই আপনি fs.writeFileSync( path, lines.join('\n'))একটি ফাইল লিখেছেন যা কেবলমাত্র উপরের সমাধান দ্বারা আংশিকভাবে পড়া হবে।
প্রবাহিত করুন

4
এই সমাধানে একটি সমস্যা আছে। আপনি যদি আপনার .js <lines.txt ব্যবহার করেন তবে আপনি শেষ লাইনটি পাবেন না। কোর্সের শেষে যদি এটির '\ n' না থাকে।
zag2art

readlineঅভিজ্ঞ ইউনিক্স / লিনাক্স প্রোগ্রামার সত্যিই উদ্ভট উপায়ে প্যাকেজ আচরণ করে।
পয়েন্টি

11
rd.on("close", ..);কলব্যাক হিসাবে ব্যবহার করা যেতে পারে (সমস্ত লাইন পড়লে ঘটনাকারী)
লুকা স্টেব

6
"শেষের data n" এর পরে তথ্যটি নোডের (0.12.7) সংস্করণে সমাধান হয়ে গেছে বলে মনে হচ্ছে। সুতরাং আমি এই উত্তরটি পছন্দ করি, যা সহজ এবং সবচেয়ে মার্জিত বলে মনে হয়।
মাইক ম্লেজ

63

আপনার কাছে openফাইলটি নেই, তবে পরিবর্তে আপনাকে একটি তৈরি করতে হবে ReadStream

fs.createReadStream

তারপরে সেই স্ট্রিমটি পাস করুন Lazy


2
অলসতার জন্য শেষ অনুষ্ঠানের মতো কিছু আছে কি? সব লাইনে কবে পড়া হয়েছে?
সর্বাধিক

1
@ ম্যাক্স, চেষ্টা করুন:new lazy(fs.createReadStream('...')).lines.forEach(function(l) { /* ... */ }).join(function() { /* Done */ })
সেকচি

6
@ চেকচি এবং @ ম্যাক্স, যোগদান ব্যবহার করবেন না কারণ এটি মেমরির পুরো ফাইলটিকে বাফার করবে। পরিবর্তে, কেবল 'শেষ' ইভেন্টটি শুনুন:new lazy(...).lines.forEach(...).on('end', function() {...})
করিন ১

3
@Cecchi, @Corin এবং @Max কি এটা মূল্য জন্য, আমি নিজেকে পাগল chaining ঘটেছে .on('end'... পর .forEach(...) , যখন আসলে সবকিছু যেমন প্রত্যাশিত আচরণ যখন আমি ঘটনা আবদ্ধ প্রথম
কাকোজনঃ

52
অনুসন্ধানের ফলাফলগুলিতে এই ফলাফলটি খুব বেশি, সুতরাং লক্ষণীয় যে অলসকে পরিত্যক্ত দেখাচ্ছে। এটি কোনও পরিবর্তন ছাড়াই 7 মাস কেটে গেছে এবং এর কিছু ভয়াবহ বাগ রয়েছে (শেষ পংক্তিকে উপেক্ষা করা হয়েছে, বিশাল মেমরি ফাঁস হওয়া ইত্যাদি)।
ব্লু

38

লাইন দ্বারা ফাইল লাইন পড়ার জন্য খুব সুন্দর একটি মডিউল রয়েছে, একে লাইন-রিডার বলা হয়

এটি দিয়ে আপনি কেবল লিখুন:

var lineReader = require('line-reader');

lineReader.eachLine('file.txt', function(line, last) {
  console.log(line);
  // do whatever you want with line...
  if(last){
    // or check if it's the last one
  }
});

এমনকি যদি আপনার আরও নিয়ন্ত্রণের প্রয়োজন হয় তবে আপনি "জাভা-স্টাইল" ইন্টারফেস দিয়ে ফাইলটি পুনরাবৃত্তি করতে পারেন:

lineReader.open('file.txt', function(reader) {
  if (reader.hasNextLine()) {
    reader.nextLine(function(line) {
      console.log(line);
    });
  }
});

4
এটি ভাল কাজ করে। এমনকি এটি সর্বশেষ লাইনটি (!) পড়ে। এটি উল্লেখযোগ্য যে এটি যদি উইন্ডোজ স্টাইলের পাঠ্য ফাইল হয় তবে এটি keeps r রাখে। line.trim () অতিরিক্ত removing r মুছে ফেলার কৌশল করে।
পিয়েরে-লুক বার্ট্র্যান্ড

এটি ইনপুটটিতে উপ-সর্বোত্তম কেবল একটি নামযুক্ত ফাইল হতে পারে, এবং না (একটি স্পষ্ট এবং অত্যন্ত গুরুত্বপূর্ণ উদাহরণের জন্য process/stdin)। কমপক্ষে, যদি এটি পারে তবে কোডটি পড়া এবং এটি চেষ্টা করার মাধ্যমে এটি অবশ্যই স্পষ্ট নয়।
পয়েন্টি

2
এর মধ্যে readlineকোর মডিউলটি ব্যবহার করে কোনও ফাইল থেকে লাইনগুলি পড়ার অন্তর্নির্মিত উপায় রয়েছে ।
ড্যান ড্যাসকলেসকু

এই পুরানো, কিন্তু ক্ষেত্রে কেউ এটি উপর হোঁচট খায়: function(reader)এবং function(line)হওয়া উচিত: function(err,reader)এবং function(err,line)
জালমার

1
কেবল রেকর্ডের জন্য, line-readerফাইলটি তাত্পর্যপূর্ণভাবে পড়ে। এটি সমলয় বিকল্প নেইline-reader-sync
Prajwal Dhatwalia

30
require('fs').readFileSync('file.txt', 'utf-8').split(/\r?\n/).forEach(function(line){
  console.log(line);
})

42
এটি মেমরিতে পুরো ফাইলটি পড়বে , তারপরে এটিকে লাইনে ভাগ করবে। এটি প্রশ্নগুলি যা জিজ্ঞাসা করে তা নয়। পয়েন্টটি হ'ল চাহিদা অনুযায়ী ক্রমান্বয়ে বড় বড় ফাইল পড়তে সক্ষম হবেন।
ড্যান ড্যাসকলেস্কু

2
এটি আমার ব্যবহারের ক্ষেত্রে খাপ খায়, আমি একটি স্ক্রিপ্ট থেকে ইনপুটকে অন্য ফর্ম্যাটে রূপান্তর করার সহজ উপায় খুঁজছিলাম। ধন্যবাদ!
কলাত

23

2019 এ আপডেট

দারুণ একটি উদাহরণ ইতিমধ্যে অফিসিয়াল নোডেজ ডকুমেন্টেশনে পোস্ট করা হয়েছে। এখানে

এটি আপনার মেশিনে সর্বশেষতম নোডেজ ইনস্টল করা দরকার। > 11.4

const fs = require('fs');
const readline = require('readline');

async function processLineByLine() {
  const fileStream = fs.createReadStream('input.txt');

  const rl = readline.createInterface({
    input: fileStream,
    crlfDelay: Infinity
  });
  // Note: we use the crlfDelay option to recognize all instances of CR LF
  // ('\r\n') in input.txt as a single line break.

  for await (const line of rl) {
    // Each line in input.txt will be successively available here as `line`.
    console.log(`Line from file: ${line}`);
  }
}

processLineByLine();

এই উত্তরটি প্রতিশ্রুতি-ভিত্তিক আচরণের জন্য ওপরের যে কোনও কিছুর চেয়ে অনেক ভাল, স্বতন্ত্রভাবে ইওএফ নির্দেশ করে।
phil294

ধন্যবাদ, মিষ্টি।
গোরান স্টোয়ানভ

3
হতে পারে এটি অন্যের কাছে সুস্পষ্ট, তবে ডিবাগ করতে আমার কিছুটা সময় লেগেছিল: কল এবং লুপের প্রারম্ভের awaitমধ্যে যদি আপনার কিছু থাকে তবে আপনি ফাইলটির শুরু থেকে রহস্যজনকভাবে লাইনগুলি হারাবেন। তত্ক্ষণাত পর্দার আড়ালে লাইনগুলি নির্গমন শুরু করে এবং অসম্পূর্ণ পুনরাবৃত্তি সহ স্পষ্টভাবে তৈরি করা হয়েছে এটি তৈরি না হওয়া পর্যন্ত those লাইনগুলি শোনা শুরু করতে পারে না। createInterface()for awaitcreateInterface()const line of rl
অ্যান্ড্রুডটন

19

পুরানো বিষয়, তবে এটি কাজ করে:

var rl = readline.createInterface({
      input : fs.createReadStream('/path/file.txt'),
      output: process.stdout,
      terminal: false
})
rl.on('line',function(line){
     console.log(line) //or parse line
})

সহজ। বাহ্যিক মডিউলটির প্রয়োজন নেই।


2
আপনি যদি পেয়ে থাকেন readline is not definedবা করেন fs is not definedতবে এটি যুক্ত করুন var readline = require('readline');এবং var fs = require('fs');এটি কাজে লাগান। অন্যথায় মিষ্টি, মিষ্টি কোড। ধন্যবাদ।
bergie3000

12
এই উত্তরটি পূর্বের উত্তরের হুবহু ধনুক , তবে পঠন প্যাকেজটি প্যাকেজটিকে অস্থির হিসাবে চিহ্নিত করা হয়েছে এমন মন্তব্য ছাড়াই (2015 সালের এপ্রিল পর্যন্ত অস্থির) এবং 2013 সালের মাঝামাঝি সময়ে লাইন শেষ না করে কোনও ফাইলের শেষ লাইনগুলি পড়তে সমস্যা হয়েছিল । সর্বশেষ লাইনের ইস্যুটি প্রথমবার v0.10.35 এ আমি ব্যবহার করেছি এবং পরে চলে গেল then /
আরঘ

আপনার আউটপুট নির্দিষ্ট করার দরকার নেই যদি আপনি যা করেন তা কোনও ফাইল স্ট্রিম থেকে পড়ে
ড্যান ড্যাসকলেসকু

18

আপনি সর্বদা নিজের লাইনের পাঠককে রোল করতে পারেন। আমি এখনও এই স্নিপেটটিকে বেঞ্চমার্ক করে নিই, তবে এটি সঠিকভাবে অংশগুলি ছাড়াই লাইনে বিভক্ত করে তোলে \ '

var last = "";

process.stdin.on('data', function(chunk) {
    var lines, i;

    lines = (last+chunk).split("\n");
    for(i = 0; i < lines.length - 1; i++) {
        console.log("line: " + lines[i]);
    }
    last = lines[i];
});

process.stdin.on('end', function() {
    console.log("line: " + last);
});

process.stdin.resume();

আমি লগ পার্সিংয়ের সময় ডেটা সংগ্রহ করার জন্য একটি দ্রুত লগ পার্সিং স্ক্রিপ্টে কাজ করার সময় এটি নিয়ে এসেছি এবং আমি অনুভব করেছি যে পার্ল বা ব্যাশ ব্যবহার না করে জেএস এবং নোড ব্যবহার করে এটি করার চেষ্টা করা ভাল হবে।

যাইহোক, আমি অনুভব করি যে ছোট নোডেজ স্ক্রিপ্টগুলি স্বয়ংসম্পূর্ণ হওয়া উচিত এবং তৃতীয় পক্ষের মডিউলগুলির উপর নির্ভর করা উচিত নয় সুতরাং এই প্রশ্নের সমস্ত উত্তর পড়ার পরে লাইন পার্সিং পরিচালনা করতে প্রতিটি বিভিন্ন মডিউল ব্যবহার করে একটি 13 এসএলওসি নেটিভ নোডেজ সমাধান আগ্রহী হতে পারে।


স্বেচ্ছাসেবী ফাইলগুলির সাথে কাজ করার জন্য এটি বাড়ানোর কোনও তুচ্ছ উপায় বলে মনে হচ্ছে না stdin... যদি না আমি কিছুটা মিস করছি।
হিপ্পিট্রেইল

3
@hippietrail আপনি এটির ReadStreamসাথে একটি তৈরি করতে পারেন fs.createReadStream('./myBigFile.csv')এবং এর পরিবর্তে এটি ব্যবহার করতে পারবেনstdin

2
প্রতিটি খণ্ডে কি কেবলমাত্র সম্পূর্ণ লাইন থাকে? মাল্টি-বাইট UTF-8 অক্ষরগুলি খণ্ড সীমানায় বিভক্ত না হওয়ার গ্যারান্টিযুক্ত কি?
হিপ্পিট্রেইল

1
@hippietrail আমি মনে করি না যে মাল্টিবাইট অক্ষরগুলি এই প্রয়োগের মাধ্যমে সঠিকভাবে পরিচালনা করা হয়েছে। তার জন্য, প্রথমে বাফারগুলিকে প্রথমে সঠিকভাবে স্ট্রিংয়ে রূপান্তর করতে হবে এবং দুটি বাফারের মধ্যে বিভক্ত অক্ষরের ট্র্যাক রাখতে হবে। এটি সঠিকভাবে করতে, স্ট্রিংডেকোডারটিতে বিল্টটি
এরনেলি

এর মধ্যে readlineকোর মডিউলটি ব্যবহার করে কোনও ফাইল থেকে লাইনগুলি পড়ার অন্তর্নির্মিত উপায় রয়েছে ।
ড্যান ড্যাসকলেসকু

12

সঙ্গে ক্যারিয়ারের মডিউল :

var carrier = require('carrier');

process.stdin.resume();
carrier.carry(process.stdin, function(line) {
    console.log('got one line: ' + line);
});

খুশী হলাম। এটাও কোন ইনপুট ফাইল জন্য কাজ করে: var inStream = fs.createReadStream('input.txt', {flags:'r'}); কিন্তু আপনার সিনট্যাক্স .on ব্যবহার (এর নথিভুক্ত পন্থার চেয়ে ক্লিনার) হলcarrier.carry(inStream).on('line', function(line) { ...
ব্রেন্ট Faust

ক্যারিয়ারটি কেবল হ্যান্ডেল \r\nএবং \nলাইনের শেষ বলে মনে হচ্ছে । যদি আপনাকে ওএস এক্সের আগে থেকে ম্যাকোস-স্টাইলের পরীক্ষা ফাইলগুলি ব্যবহার করার প্রয়োজন হয় তবে তারা ব্যবহার করে \rএবং ক্যারিয়ার এটি পরিচালনা করে না। আশ্চর্যজনকভাবে, বন্যের মধ্যে এখনও এমন ফাইলগুলি ভাসমান রয়েছে। আপনার ইউনিকোড বিওএম (বাইট অর্ডার চিহ্ন) স্পষ্টভাবে পরিচালনা করতে হবে, এটি এমএস উইন্ডোজ প্রভাবের ক্ষেত্রের পাঠ্য ফাইলগুলির শুরুতে ব্যবহৃত হয়।
হিপ্পিট্রেইল

এর মধ্যে readlineকোর মডিউলটি ব্যবহার করে কোনও ফাইল থেকে লাইনগুলি পড়ার অন্তর্নির্মিত উপায় রয়েছে ।
ড্যান ড্যাসকলেসকু

9

নোডের কাজগুলি নিকাশ / বিরতি / পুনরুদ্ধারের উপায়ের কারণে সেই লাইনগুলি প্রক্রিয়াজাতকরণ এবং অন্য প্রবাহে লেখার চেষ্টা করার সময় অলসকে লাইনে লাইনে পড়তে ব্যবহার করে আমি একটি বিশাল, বিশাল মেমরি ফুটো দিয়ে শেষ করেছি (দেখুন: HTTP: // মার্জিতকোড .com / 2011/04/06 /-নোড-জেএস-পাম্পিং-ডেটা-এর মধ্যে-স্ট্রিমগুলির সাথে-বেবি-স্টেপগুলি / (আমি এই লোকটিকে বিটিডব্লু ভালবাসি))। ঠিক কী কারণে আমি অলস দিকে খুব ঘনিষ্ঠভাবে তাকালাম না, তবে অলস বেরিয়ে না গিয়ে আমি আমার পড়ার স্ট্রিমটি থামাতে পারিনি।

আমি বিশাল সিএসভি ফাইলগুলি এক্সএমএল ডক্সে প্রসেস করার জন্য কোডটি লিখেছি, আপনি কোডটি এখানে দেখতে পাবেন: https://github.com/j03m/node-csv2xml

আপনি যদি অলস লাইনের সাথে পূর্ববর্তী সংশোধনগুলি চালনা করেন তবে এটি ফাঁস হয়ে যায়। সর্বশেষতম রিভিশনটি একেবারেই ফাঁস হয় না এবং আপনি সম্ভবত এটি পাঠক / প্রসেসরের ভিত্তি হিসাবে ব্যবহার করতে পারেন। যদিও আমার সেখানে কিছু কাস্টম স্টাফ রয়েছে।

সম্পাদনা: আমার ধারণা আমিও নোট করব যে অলস সাথে আমার কোডটি ঠিক মতো কাজ করেছে যতক্ষণ না আমি নিজেকে বড় পরিমাণে এক্সএমএল টুকরো লিখেছি যা একটি প্রয়োজনীয়তার কারণে নিকাশ / বিরতি / পুনরায় সূচনা করে। ছোট অংশগুলির জন্য এটি ভাল ছিল।


এর মধ্যে readlineকোর মডিউলটি ব্যবহার করে কোনও ফাইল থেকে লাইনগুলি পড়ার আরও সহজ উপায় রয়েছে ।
ড্যান ড্যাসকলেসকু

হা. এটি এখন সঠিক উপায়। তবে এটি ছিল ২০১১ সালের। :)
j03m

8

সম্পাদনা:

ট্রান্সফর্ম স্ট্রিম ব্যবহার করুন ।


একটি সঙ্গে BufferedReader আপনি লাইন পড়তে পারেন।

new BufferedReader ("lorem ipsum", { encoding: "utf8" })
    .on ("error", function (error){
        console.log ("error: " + error);
    })
    .on ("line", function (line){
        console.log ("line: " + line);
    })
    .on ("end", function (){
        console.log ("EOF");
    })
    .read ();

1
এর মধ্যে readlineকোর মডিউলটি ব্যবহার করে কোনও ফাইল থেকে লাইনগুলি পড়ার আরও সহজ উপায় রয়েছে ।
ড্যান ড্যাসকলেসকু

7

আমার আসল উত্তর পোস্ট করার পরে, আমি দেখতে পেয়েছি যে বিভাজন কোনও ফাইলের লাইন পড়ার জন্য নোড মডিউলটি ব্যবহার করা খুব সহজ; যা alচ্ছিক পরামিতিগুলি গ্রহণ করে।

var split = require('split');
fs.createReadStream(file)
    .pipe(split())
    .on('data', function (line) {
      //each chunk now is a seperate line! 
    });

খুব বড় ফাইলগুলিতে পরীক্ষা করা হয়নি। আপনি যদি আমাদের জানাবেন।


6

এর জন্য একটি বিস্তৃত সমাধানের অভাবে আমি হতাশ হয়ে পড়েছিলাম, তাই আমি নিজের প্রচেষ্টাটি ( গিট / এনপিএম ) একসাথে রেখেছি । বৈশিষ্ট্যগুলির তালিকা অনুলিপি করুন:

  • ইন্টারেক্টিভ লাইন প্রসেসিং (কলব্যাক-ভিত্তিক, পুরো ফাইলটি রামে লোড হচ্ছে না)
  • Allyচ্ছিকভাবে, সমস্ত রেখাগুলি একটি অ্যারে (বিশদ বা কাঁচা মোড) এ ফিরে আসুন
  • ইন্টারেক্টিভভাবে স্ট্রিমিং বাধা দেয়, বা মানচিত্র / ফিল্টার প্রক্রিয়াজাতকরণের মতো সম্পাদন করুন
  • যে কোনও নিউলাইন কনভেনশন সনাক্ত করুন (পিসি / ম্যাক / লিনাক্স)
  • ইওফ / শেষ লাইনের চিকিত্সা সঠিক করুন
  • মাল্টি-বাইট UTF-8 টি অক্ষরের সঠিক পরিচালনা ling
  • প্রতি লাইনের ভিত্তিতে বাইট অফসেট এবং বাইট দৈর্ঘ্যের তথ্য পুনরুদ্ধার করুন
  • লাইন-ভিত্তিক বা বাইট-ভিত্তিক অফসেট ব্যবহার করে এলোমেলো অ্যাক্সেস
  • এলোমেলো অ্যাক্সেসের গতি বাড়ানোর জন্য লাইন-অফসেট তথ্য স্বয়ংক্রিয়ভাবে ম্যাপ করুন
  • জিরো নির্ভরতা
  • টেস্ট

NIH? তুমি সিদ্ধান্ত নাও :-)


5
function createLineReader(fileName){
    var EM = require("events").EventEmitter
    var ev = new EM()
    var stream = require("fs").createReadStream(fileName)
    var remainder = null;
    stream.on("data",function(data){
        if(remainder != null){//append newly received data chunk
            var tmp = new Buffer(remainder.length+data.length)
            remainder.copy(tmp)
            data.copy(tmp,remainder.length)
            data = tmp;
        }
        var start = 0;
        for(var i=0; i<data.length; i++){
            if(data[i] == 10){ //\n new line
                var line = data.slice(start,i)
                ev.emit("line", line)
                start = i+1;
            }
        }
        if(start<data.length){
            remainder = data.slice(start);
        }else{
            remainder = null;
        }
    })

    stream.on("end",function(){
        if(null!=remainder) ev.emit("line",remainder)
    })

    return ev
}


//---------main---------------
fileName = process.argv[2]

lineReader = createLineReader(fileName)
lineReader.on("line",function(line){
    console.log(line.toString())
    //console.log("++++++++++++++++++++")
})

আমি এটি পরীক্ষা করব, তবে আপনি কি আমাকে বলতে পারবেন, মাল্টিবাইট চরিত্রগুলি কখনই না ভাঙার গ্যারান্টিযুক্ত? (ইউটিএফ -8 / ইউটিএফ -16)
হিপ্পিট্রেইল

2
@ হিপ্পিট্রেইল: উত্তরটি ইউটিএফ -8 এর জন্য কোনও নয়, যদিও এটি কোনও চরিত্রের প্রবাহের চেয়ে বাইট স্ট্রিমের উপর কাজ করছে। এটি নিউলাইনগুলি (0x0a) এ ব্রেক হয়। ইউটিএফ -8 এ, একটি মাল্টিবাইট চরিত্রের সমস্ত বাইটের হাই-অর্ডার বিট সেট রয়েছে। সুতরাং, কোনও মাল্টবাইট অক্ষর এম্বেডড নিউলাইন বা অন্যান্য সাধারণ ASCII অক্ষরকে অন্তর্ভুক্ত করতে পারে না। তবে ইউটিএফ -16 এবং ইউটিএফ -32 অন্য বিষয়।
জর্জি

@ জর্জ: আমি মনে করি আমরা একে অপরকে ভুল বুঝি। সিআর এবং এলএফ উভয়ই ASCII সীমার মধ্যে এবং UTF-8 128 ASCII অক্ষর অপরিবর্তিত সংরক্ষণ করে, সিআর বা এলএফ উভয়ই কখনও কোনও মাল্টিবাইট UTF-8 চরিত্রের অংশ হতে পারে না। আমি কি জিজ্ঞাসা ছিল কিনা তা ব্যবহারকারীকে dataকরার কলে stream.on("data")শক্তি কি কখনো শুরু বা multibyte হল UTF-8 অক্ষর একটি অংশ মাত্র সঙ্গে শেষ যেমন যা করা হয় U+10D0, তিন বাইট গঠিতe1 83 90
hippietrail

1
এটি এখনও "নতুন লাইন" তৈরি করার আগে পুরো ফাইল সামগ্রীটিকে মেমরিতে লোড করে। এটি একবারে একটি লাইন পড়ে না, পরিবর্তে এটি সমস্ত লাইন নেয় এবং তারপরে "নতুন লাইন" বাফার দৈর্ঘ্য অনুসারে এটিকে ভেঙে দেয়। এই পদ্ধতিটি একটি স্ট্রিম তৈরির উদ্দেশ্যকে পরাস্ত করে।
জাস্টিন

এরই মধ্যে ফাইলটি ব্যবহার করে লাইনগুলি পড়ার অনেক সহজ উপায় রয়েছে readlineকোর মডিউলটি
ড্যান ড্যাসকলেসকু

5

আমি এই একই সমস্যাটি মোকাবিলা করতে চেয়েছিলাম, পার্লের মূলত কী হবে:

while (<>) {
    process_line($_);
}

আমার ব্যবহারের কেসটি কেবল একটি স্ট্যান্ডলোন স্ক্রিপ্ট ছিল, সার্ভার নয়, তাই সিঙ্ক্রোনাস ভাল ছিল। এগুলি আমার মানদণ্ড ছিল:

  • ন্যূনতম সিঙ্ক্রোনাস কোড যা বহু প্রকল্পে পুনরায় ব্যবহার করতে পারে।
  • ফাইলের আকার বা লাইনের সংখ্যার কোনও সীমা নেই।
  • লাইনের দৈর্ঘ্যের কোনও সীমা নেই।
  • বিএমপি ছাড়িয়ে অক্ষরগুলি সহ ইউটিএফ -8 এ পুরো ইউনিকোড পরিচালনা করতে সক্ষম।
  • * নিক্স এবং উইন্ডোজ লাইন শেষগুলি পরিচালনা করতে সক্ষম (আমার জন্য পুরানো স্টাইলের ম্যাকের প্রয়োজন নেই)।
  • লাইনের সমাপ্তি অক্ষর (গুলি) লাইনে অন্তর্ভুক্ত করা হবে।
  • শেষ-লাইন অক্ষরের সাথে বা ছাড়াই শেষ লাইনটি পরিচালনা করতে সক্ষম।
  • নোড.জেএস বিতরণে অন্তর্ভুক্ত না এমন কোনও বাহ্যিক গ্রন্থাগার ব্যবহার করবেন না।

নোড.জেজে নিম্ন স্তরের স্ক্রিপ্টিং টাইপ কোডটির অনুভূতি পেতে এবং পার্লের মতো অন্যান্য স্ক্রিপ্টিং ভাষার প্রতিস্থাপন হিসাবে এটি কতটা কার্যকর তা স্থির করার জন্য এটি আমার জন্য একটি প্রকল্প।

এক বিস্ময়কর পরিশ্রমের পরে এবং বেশ কয়েকটি ভুয়া সূচনা করার পরে আমি এই কোডটি নিয়ে এসেছি। এটি আমার পক্ষে প্রত্যাশার চেয়ে বেশ দ্রুত কিন্তু কম তুচ্ছ: (এটি গিটহাবের উপরে কাঁটাচামচ করুন)

var fs            = require('fs'),
    StringDecoder = require('string_decoder').StringDecoder,
    util          = require('util');

function lineByLine(fd) {
  var blob = '';
  var blobStart = 0;
  var blobEnd = 0;

  var decoder = new StringDecoder('utf8');

  var CHUNK_SIZE = 16384;
  var chunk = new Buffer(CHUNK_SIZE);

  var eolPos = -1;
  var lastChunk = false;

  var moreLines = true;
  var readMore = true;

  // each line
  while (moreLines) {

    readMore = true;
    // append more chunks from the file onto the end of our blob of text until we have an EOL or EOF
    while (readMore) {

      // do we have a whole line? (with LF)
      eolPos = blob.indexOf('\n', blobStart);

      if (eolPos !== -1) {
        blobEnd = eolPos;
        readMore = false;

      // do we have the last line? (no LF)
      } else if (lastChunk) {
        blobEnd = blob.length;
        readMore = false;

      // otherwise read more
      } else {
        var bytesRead = fs.readSync(fd, chunk, 0, CHUNK_SIZE, null);

        lastChunk = bytesRead !== CHUNK_SIZE;

        blob += decoder.write(chunk.slice(0, bytesRead));
      }
    }

    if (blobStart < blob.length) {
      processLine(blob.substring(blobStart, blobEnd + 1));

      blobStart = blobEnd + 1;

      if (blobStart >= CHUNK_SIZE) {
        // blobStart is in characters, CHUNK_SIZE is in octets
        var freeable = blobStart / CHUNK_SIZE;

        // keep blob from growing indefinitely, not as deterministic as I'd like
        blob = blob.substring(CHUNK_SIZE);
        blobStart -= CHUNK_SIZE;
        blobEnd -= CHUNK_SIZE;
      }
    } else {
      moreLines = false;
    }
  }
}

এটি সম্ভবত আরও পরিষ্কার করা যেতে পারে, এটি ছিল পরীক্ষার এবং ত্রুটির ফল।


5

বেশিরভাগ ক্ষেত্রে এটি পর্যাপ্ত হওয়া উচিত:

const fs = require("fs")

fs.readFile('./file', 'utf-8', (err, file) => {
  const lines = file.split('\n')

  for (let line of lines)
    console.log(line)
});

2

জেনারেটর ভিত্তিক লাইন রিডার: https://github.com/neurosnap/gen-readlines

var fs = require('fs');
var readlines = require('gen-readlines');

fs.open('./file.txt', 'r', function(err, fd) {
  if (err) throw err;
  fs.fstat(fd, function(err, stats) {
    if (err) throw err;

    for (var line of readlines(fd, stats.size)) {
      console.log(line.toString());
    }

  });
});

2

আপনি যদি লাইন দিয়ে একটি ফাইল লাইন পড়তে এবং অন্যটিতে এটি লিখতে চান:

var fs = require('fs');
var readline = require('readline');
var Stream = require('stream');

function readFileLineByLine(inputFile, outputFile) {

   var instream = fs.createReadStream(inputFile);
   var outstream = new Stream();
   outstream.readable = true;
   outstream.writable = true;

   var rl = readline.createInterface({
      input: instream,
      output: outstream,
      terminal: false
   });

   rl.on('line', function (line) {
        fs.appendFileSync(outputFile, line + '\n');
   });
};

আপনার এবং কোফ্রসার উত্তরের মধ্যে পার্থক্য কী?
মহিষ 6

2
var fs = require('fs');

function readfile(name,online,onend,encoding) {
    var bufsize = 1024;
    var buffer = new Buffer(bufsize);
    var bufread = 0;
    var fd = fs.openSync(name,'r');
    var position = 0;
    var eof = false;
    var data = "";
    var lines = 0;

    encoding = encoding || "utf8";

    function readbuf() {
        bufread = fs.readSync(fd,buffer,0,bufsize,position);
        position += bufread;
        eof = bufread ? false : true;
        data += buffer.toString(encoding,0,bufread);
    }

    function getLine() {
        var nl = data.indexOf("\r"), hasnl = nl !== -1;
        if (!hasnl && eof) return fs.closeSync(fd), online(data,++lines), onend(lines); 
        if (!hasnl && !eof) readbuf(), nl = data.indexOf("\r"), hasnl = nl !== -1;
        if (!hasnl) return process.nextTick(getLine);
        var line = data.substr(0,nl);
        data = data.substr(nl+1);
        if (data[0] === "\n") data = data.substr(1);
        online(line,++lines);
        process.nextTick(getLine);
    }
    getLine();
}

আমারও একই সমস্যা ছিল এবং উপরের সমাধানটি অন্যদের কাছে একইরকম দেখায় তবে এসআইএনসি হয় এবং বড় ফাইলগুলি খুব দ্রুত পড়তে পারে

আশা করি এটি সাহায্য করে


1

আমার একটি সামান্য মডিউল রয়েছে যা এটি ভাল করে এবং অন্যান্য বেশ কয়েকটি প্রকল্প দ্বারা ব্যবহৃত হয় এনপিএম রিডলাইন নোট ভি নোডে একটি নেটিভ রিডলাইন মডিউল রয়েছে তাই আমি আমার মডিউলটি লাইনব্লাইন https://www.npmjs.com/package/ হিসাবে পুনরায় প্রকাশ করেছি linebyline

আপনি যদি মডিউলটি ব্যবহার করতে চান না তবে ফাংশনটি খুব সহজ:

var fs = require('fs'),
EventEmitter = require('events').EventEmitter,
util = require('util'),
newlines = [
  13, // \r
  10  // \n
];
var readLine = module.exports = function(file, opts) {
if (!(this instanceof readLine)) return new readLine(file);

EventEmitter.call(this);
opts = opts || {};
var self = this,
  line = [],
  lineCount = 0,
  emit = function(line, count) {
    self.emit('line', new Buffer(line).toString(), count);
  };
  this.input = fs.createReadStream(file);
  this.input.on('open', function(fd) {
    self.emit('open', fd);
  })
  .on('data', function(data) {
   for (var i = 0; i < data.length; i++) {
    if (0 <= newlines.indexOf(data[i])) { // Newline char was found.
      lineCount++;
      if (line.length) emit(line, lineCount);
      line = []; // Empty buffer.
     } else {
      line.push(data[i]); // Buffer new line data.
     }
   }
 }).on('error', function(err) {
   self.emit('error', err);
 }).on('end', function() {
  // Emit last line if anything left over since EOF won't trigger it.
  if (line.length){
     lineCount++;
     emit(line, lineCount);
  }
  self.emit('end');
 }).on('close', function() {
   self.emit('close');
 });
};
util.inherits(readLine, EventEmitter);

1

আরেকটি সমাধান হ'ল সিক্যুয়ালি এক্সিকিউটর এনসিনজ এর মাধ্যমে লজিক চালানো । এটি নোড রিডলাইন মডিউলটি ব্যবহার করে ফাইল লাইন বাই লাইন পড়ে এবং এটি প্রতিশ্রুতি বা পুনরাবৃত্তি ব্যবহার করে না, তাই বড় ফাইলগুলিতে ব্যর্থ হতে চলেছে না। কোডটি দেখতে কেমন হবে তা এখানে:

var nsynjs = require('nsynjs');
var textFile = require('./wrappers/nodeReadline').textFile; // this file is part of nsynjs

function process(textFile) {

    var fh = new textFile();
    fh.open('path/to/file');
    var s;
    while (typeof(s = fh.readLine(nsynjsCtx).data) != 'undefined')
        console.log(s);
    fh.close();
}

var ctx = nsynjs.run(process,{},textFile,function () {
    console.log('done');
});

উপরের কোডটি এই প্রস্তাবের উপর ভিত্তি করে: https://github.com/amaksr/nsynjs/blob/master/example/node-readline/index.js


1

এই ধরনের অপারেশন করার সময় আমাদের নিজেদের দুটি প্রশ্ন জিজ্ঞাসা করতে হবে:

  1. এটি সম্পাদন করতে কতটুকু স্মৃতি ব্যবহৃত হয়?
  2. ফাইলের আকারের সাথে কি মেমরির খরচ বাড়ছে?

মত সমাধানগুলি require('fs').readFileSync()পুরো ফাইলটিকে মেমরিতে লোড করে। তার মানে অপারেশন করতে প্রয়োজনীয় পরিমাণ মেমরি ফাইল আকারের প্রায় সমান হবে। এর চেয়ে বড় কোনও কিছুর জন্য আমাদের এড়ানো উচিত50mbs

ফাংশন আমন্ত্রণের পরে এই লাইন কোডের কোড রেখে আমরা কোনও ফাংশন দ্বারা ব্যবহৃত মেমরির পরিমাণটি সহজেই ট্র্যাক করতে পারি :

    const used = process.memoryUsage().heapUsed / 1024 / 1024;
    console.log(
      `The script uses approximately ${Math.round(used * 100) / 100} MB`
    );

এখনই একটি বড় ফাইল থেকে নির্দিষ্ট লাইনগুলি পড়ার সর্বোত্তম উপায় হ'ল নোডের পঠনখণ্ডার ব্যবহার । ডকুমেন্টেশনের একটি আশ্চর্যজনক উদাহরণ রয়েছে

যদিও এটি করার জন্য আমাদের কোনও তৃতীয় পক্ষের মডিউল দরকার নেই। তবে, আপনি যদি একটি এন্টারপ্রাইজ কোড লিখছেন তবে আপনাকে প্রচুর এজ মামলা পরিচালনা করতে হবে। আমাকে অ্যাপিক ফাইল স্টোরেজ নামে একটি খুব লাইটওয়েট মডিউল লিখতে হয়েছিল সমস্ত প্রান্তের কেসগুলি পরিচালনা করতে আমাকে ।

অ্যাপিক ফাইল স্টোরেজ মডিউল: https://www.npmjs.com/package/apickfs ডকুমেন্টেশন: https://github.com/apickjs/apickFS#readme

উদাহরণ ফাইল: https://1drv.ms/t/s!AtkMCsWInsSZiGptXYAFjalXOpUx

উদাহরণ: মডিউল ইনস্টল করুন

npm i apickfs
// import module
const apickFileStorage = require('apickfs');
//invoke readByLineNumbers() method
apickFileStorage
  .readByLineNumbers(path.join(__dirname), 'big.txt', [163845])
  .then(d => {
    console.log(d);
  })
  .catch(e => {
    console.log(e);
  });

এই পদ্ধতিটি 4 গিগাবাইট পর্যন্ত ঘন ফাইলগুলির সাথে সফলভাবে পরীক্ষা করা হয়েছিল।

বিগ.টেক্সট 163,845 লাইন সহ একটি ঘন পাঠ্য ফাইল এবং এটি 124 এমবি। এই ফাইলটি থেকে 10 টি বিভিন্ন লাইন পড়ার স্ক্রিপ্টটি প্রায় 4.63 এমবি মেমরির ব্যবহার করে। এবং এটি অবজেক্টস বা অ্যারেগুলিতে বিনামূল্যে বৈধ JSON কে পার্স করে। 🥳 অসাধারণ !!

আমরা খুব সামান্য স্মৃতি খরচ করে ফাইলের একক লাইন বা ফাইলের কয়েকশ লাইন পড়তে পারি।


0

আমি এটি ব্যবহার:

function emitLines(stream, re){
    re = re && /\n/;
    var buffer = '';

    stream.on('data', stream_data);
    stream.on('end', stream_end);

    function stream_data(data){
        buffer += data;
        flush();
    }//stream_data

    function stream_end(){
        if(buffer) stream.emmit('line', buffer);
    }//stream_end


    function flush(){
        var re = /\n/;
        var match;
        while(match = re.exec(buffer)){
            var index = match.index + match[0].length;
            stream.emit('line', buffer.substring(0, index));
            buffer = buffer.substring(index);
            re.lastIndex = 0;
        }
    }//flush

}//emitLines

একটি স্ট্রিমে এই ফাংশনটি ব্যবহার করুন এবং যে লাইনের ইভেন্টগুলি নির্গত হবে তা শুনুন।

gr-


0

আপনি সম্ভবত readlineশীর্ষস্থানীয় উত্তর হিসাবে মডিউলটি ব্যবহার করা উচিত , readlineলাইন রিডিংয়ের পরিবর্তে কমান্ড লাইন ইন্টারফেসের দিকে অভিযুক্ত বলে মনে হচ্ছে। এটি বাফারিংয়ের ক্ষেত্রে আরও কিছুটা অস্বচ্ছ। (যার যার কাছে স্ট্রিমিং লাইন ওরিয়েন্টেড পাঠকের প্রয়োজন রয়েছে তিনি সম্ভবত বাফার আকারগুলি টুইঙ্ক করতে চান)। পাঠ্যলাইন মডিউলটি 1000 ডলার লাইন, যখন এটি পরিসংখ্যান এবং পরীক্ষাগুলি সহ 34 হয়।

const EventEmitter = require('events').EventEmitter;
class LineReader extends EventEmitter{
    constructor(f, delim='\n'){
        super();
        this.totalChars = 0;
        this.totalLines = 0;
        this.leftover = '';

        f.on('data', (chunk)=>{
            this.totalChars += chunk.length;
            let lines = chunk.split(delim);
            if (lines.length === 1){
                this.leftover += chunk;
                return;
            }
            lines[0] = this.leftover + lines[0];
            this.leftover = lines[lines.length-1];
            if (this.leftover) lines.pop();
            this.totalLines += lines.length;
            for (let l of lines) this.onLine(l);
        });
        // f.on('error', ()=>{});
        f.on('end', ()=>{console.log('chars', this.totalChars, 'lines', this.totalLines)});
    }
    onLine(l){
        this.emit('line', l);
    }
}
//Command line test
const f = require('fs').createReadStream(process.argv[2], 'utf8');
const delim = process.argv[3];
const lineReader = new LineReader(f, delim);
lineReader.on('line', (line)=> console.log(line));

এখানে 19 লাইনে একটি পরিসংখ্যান ছাড়াই আরও সংক্ষিপ্ত সংস্করণ রয়েছে:

class LineReader extends require('events').EventEmitter{
    constructor(f, delim='\n'){
        super();
        this.leftover = '';
        f.on('data', (chunk)=>{
            let lines = chunk.split(delim);
            if (lines.length === 1){
                this.leftover += chunk;
                return;
            }
            lines[0] = this.leftover + lines[0];
            this.leftover = lines[lines.length-1];
            if (this.leftover) 
                lines.pop();
            for (let l of lines)
                this.emit('line', l);
        });
    }
}

0
const fs = require("fs")

fs.readFile('./file', 'utf-8', (err, data) => {
var innerContent;
    console.log("Asynchronous read: " + data.toString());
    const lines = data.toString().split('\n')
    for (let line of lines)
        innerContent += line + '<br>';


});

0

আমি প্রতিদিনের লাইন প্রসেসিংয়ের সম্পূর্ণ যুক্তিটিকে এনপিএম মডিউল হিসাবে আবদ্ধ করি: লাইন-কিট https://www.npmjs.com/package/line-kit

// example
var count = 0
require('line-kit')(require('fs').createReadStream('/etc/issue'),
                    (line) => { count++; },
                    () => {console.log(`seen ${count} lines`)})


-1

আমি নীচে কোডগুলি পঠিত লাইনগুলি যাচাই করার পরে ব্যবহার করি যা এটি কোনও ডিরেক্টরি নয় এবং ফাইলগুলির তালিকায় এটি অন্তর্ভুক্ত নয় যাচাই করা দরকার।

(function () {
  var fs = require('fs');
  var glob = require('glob-fs')();
  var path = require('path');
  var result = 0;
  var exclude = ['LICENSE',
    path.join('e2e', 'util', 'db-ca', 'someother-file'),
    path.join('src', 'favicon.ico')];
  var files = [];
  files = glob.readdirSync('**');

  var allFiles = [];

  var patternString = [
    'trade',
    'order',
    'market',
    'securities'
  ];

  files.map((file) => {
    try {
      if (!fs.lstatSync(file).isDirectory() && exclude.indexOf(file) === -1) {
        fs.readFileSync(file).toString().split(/\r?\n/).forEach(function(line){
          patternString.map((pattern) => {
            if (line.indexOf(pattern) !== -1) {
              console.log(file + ' contain `' + pattern + '` in in line "' + line +'";');
              result = 1;
            }
          });
        });
      }
    } catch (e) {
      console.log('Error:', e.stack);
    }
  });
  process.exit(result);

})();

-1

আমি উপরের সমস্ত উত্তর সন্ধান করেছি, এগুলির সমাধানের জন্য তারা সকলেই তৃতীয় পক্ষের লাইব্রেরি ব্যবহার করে। নোডের এপিআইতে এটির একটি সহজ সমাধান রয়েছে। যেমন

const fs= require('fs')

let stream = fs.createReadStream('<filename>', { autoClose: true })

stream.on('data', chunk => {
    let row = chunk.toString('ascii')
}))
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.