আমাকে টার্মিনালে একটি পাঠ্য ফাইলটি পাস করতে হবে এবং তার থেকে ডেটাটি পড়তে হবে, আমি এটি কীভাবে করব?
node server.js file.txt
টার্মিনাল থেকে আমি কীভাবে পাস করব, অন্যদিকে কীভাবে পড়ব?
আমাকে টার্মিনালে একটি পাঠ্য ফাইলটি পাস করতে হবে এবং তার থেকে ডেটাটি পড়তে হবে, আমি এটি কীভাবে করব?
node server.js file.txt
টার্মিনাল থেকে আমি কীভাবে পাস করব, অন্যদিকে কীভাবে পড়ব?
উত্তর:
আপনি process.argvফাইলের নাম পেতে ফাইল নাম এবং ফাইল সিস্টেম মডিউল (fs) পেতে কমান্ড-লাইন আর্গুমেন্ট অ্যাক্সেস করতে অ্যারে ব্যবহার করতে চাইবেন । উদাহরণ স্বরূপ:
// Make sure we got a filename on the command line.
if (process.argv.length < 3) {
console.log('Usage: node ' + process.argv[1] + ' FILENAME');
process.exit(1);
}
// Read the file and print its contents.
var fs = require('fs')
, filename = process.argv[2];
fs.readFile(filename, 'utf8', function(err, data) {
if (err) throw err;
console.log('OK: ' + filename);
console.log(data)
});
আপনার জন্য এটি সামান্য ভাঙার জন্য process.argvসাধারণত দৈর্ঘ্য দুটি হবে, জেরোথ আইটেমটি হ'ল "নোড" ইন্টারপ্রেটার এবং প্রথমটি স্ক্রিপ্ট যা নোড বর্তমানে চলছে, তার পরে আইটেমগুলি কমান্ড লাইনে পাস করা হয়েছিল। আপনি আরগভি থেকে কোনও ফাইলের নাম টানলে আপনি ফাইলটি পড়ার জন্য ফাইল সিস্টেমের ফাংশনগুলি ব্যবহার করতে পারেন এবং এর বিষয়বস্তুগুলির সাথে যা চান তা করতে পারেন। নমুনা ব্যবহার এইরকম দেখাবে:
$ node ./cat.js file.txt
OK: file.txt
This is file.txt!
[সম্পাদনা] @ wtfcoder হিসাবে উল্লেখ করা হয়েছে, " fs.readFile()" পদ্ধতিটি ব্যবহার করা সেরা ধারণা নাও হতে পারে কারণ এটি কলব্যাক ফাংশনে ফল দেওয়ার আগে ফাইলের পুরো বিষয়বস্তুগুলিকে বাফার করবে। এই বাফারিংটি সম্ভবত প্রচুর পরিমাণে মেমরি ব্যবহার করতে পারে তবে আরও গুরুত্বপূর্ণ, এটি নোড.জেএস এর মূল বৈশিষ্ট্যগুলির একটি - অ্যাসিনক্রোনাস, বিভক্ত আই / ও এর সুবিধা গ্রহণ করে না।
fs.read()অপারেটিং সিস্টেম থেকে উপলব্ধ হিসাবে উপলব্ধ একটি বৃহত ফাইল (বা যে কোনও ফাইল, সত্যিই) প্রসেস করার "নোড" উপায়টি হ'ল প্রতিটি উপলব্ধ অংশটি ব্যবহার এবং প্রক্রিয়া করা। তবে ফাইলটি পড়ার জন্য আপনার নিজের (সম্ভবত) ইনক্রিমেন্টাল পার্সিং / ফাইলের প্রসেসিং এবং কিছু পরিমাণ বাফারিং অনিবার্য হতে পারে।
var lines = data.split(/\r?\n/);, তারপরে অ্যারে "লাইনগুলি" প্রতিটি লাইন থাকবে।
নোডের সাথে এফএস স্থাপন করুন।
var fs = require('fs');
try {
var data = fs.readFileSync('file.txt', 'utf8');
console.log(data.toString());
} catch(e) {
console.log('Error:', e.stack);
}
এই প্রোগ্রামটিতে, fs.readFile() এড়ানো উচিত কারণ এটি মেমরিতে সমস্ত ফাইল লোড করে এবং সমস্ত ফাইলটি না পড়া পর্যন্ত কলব্যাক কল করবে না।
পাঠ্য ফাইলটি পড়ার সবচেয়ে সহজ উপায় হ'ল এটি লাইন লাইনে পড়া। আমি একটি বাফার্ডারীডার সুপারিশ করছি :
new BufferedReader ("file", { 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 ();
.Properties বা json ফাইলের মতো জটিল ডেটা স্ট্রাকচারের জন্য আপনাকে পার্সার ব্যবহার করতে হবে (অভ্যন্তরীণভাবে এটি একটি বাফার রিডারও ব্যবহার করা উচিত)।
fs.readFile()বা fs.readFileSync()। এটি লক্ষণীয় অপেক্ষা করার জন্য একটি বিশাল ফাইল হতে পারে। প্যাকেজ.জসনের মতো একটি জেএসওএন কনফিগারেশন ফাইলটি 1 কেবি এর নীচে হওয়ার সম্ভাবনা রয়েছে, তাই আপনি ঠিক fs.readFile()এবং JSON.parse()এটি পারেন।
আপনি একবারে সমস্ত ফাইল মেমোরিতে না পড়েই লাইন লাইনে ফাইলটি পড়তে রিডস্ট্রিম এবং পাইপ ব্যবহার করতে পারেন।
var fs = require('fs'),
es = require('event-stream'),
os = require('os');
var s = fs.createReadStream(path)
.pipe(es.split())
.pipe(es.mapSync(function(line) {
//pause the readstream
s.pause();
console.log("line:", line);
s.resume();
})
.on('error', function(err) {
console.log('Error:', err);
})
.on('end', function() {
console.log('Finish reading.');
})
);
আমি একটি সম্পূর্ণ উদাহরণ পোস্ট করছি যা অবশেষে আমি কাজ করেছিলাম। এখানে আমি rooms/rooms.txtএকটি স্ক্রিপ্ট থেকে একটি ফাইল পড়ছিrooms/rooms.js
var fs = require('fs');
var path = require('path');
var readStream = fs.createReadStream(path.join(__dirname, '../rooms') + '/rooms.txt', 'utf8');
let data = ''
readStream.on('data', function(chunk) {
data += chunk;
}).on('end', function() {
console.log(data);
});