मुझे टर्मिनल में एक पाठ फ़ाइल में पास होने की आवश्यकता है और फिर उससे डेटा को पढ़ना है, मैं यह कैसे कर सकता हूं?
node server.js file.txt
मैं टर्मिनल से रास्ते में कैसे गुजरता हूं, मैं इसे दूसरी तरफ कैसे पढ़ूं?
मुझे टर्मिनल में एक पाठ फ़ाइल में पास होने की आवश्यकता है और फिर उससे डेटा को पढ़ना है, मैं यह कैसे कर सकता हूं?
node server.js file.txt
मैं टर्मिनल से रास्ते में कैसे गुजरता हूं, मैं इसे दूसरी तरफ कैसे पढ़ूं?
जवाबों:
process.argv
फ़ाइल को पढ़ने के लिए फ़ाइल नाम और फ़ाइल सिस्टम मॉड्यूल (एफएस) प्राप्त करने के लिए कमांड-लाइन तर्कों को एक्सेस करने के लिए आप सरणी का उपयोग करना चाहते हैं । उदाहरण के लिए:
// 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
आमतौर पर लंबाई दो होगी, "शून्य" दुभाषिया होने वाला शून्य आइटम और पहली स्क्रिप्ट जो नोड वर्तमान में चल रही है, उसके बाद आइटम को कमांड लाइन पर पारित किया गया था। एक बार जब आप argv से फ़ाइल नाम खींच लेते हैं तो आप फाइल को पढ़ने के लिए फाइलसिस्टम फंक्शन्स का उपयोग कर सकते हैं और अपनी सामग्री के साथ जो चाहें कर सकते हैं। नमूना उपयोग इस तरह दिखेगा:
$ node ./cat.js file.txt
OK: file.txt
This is file.txt!
[संपादित करें] जैसा कि @wtfcoder उल्लेख करता है, " fs.readFile()
" विधि का उपयोग करना सबसे अच्छा विचार नहीं हो सकता है क्योंकि यह कॉलबैक फ़ंक्शन में फाइल करने से पहले फ़ाइल की पूरी सामग्री को बफर कर देगा। यह बफ़रिंग संभवतः बहुत सारी मेमोरी का उपयोग कर सकता है लेकिन, इससे भी महत्वपूर्ण बात यह है कि यह नोड की मुख्य विशेषताओं में से एक का लाभ नहीं उठाता है। जेएस - एसिंक्रोनस, ईवेंटेड / ओ।
एक बड़ी फ़ाइल (या किसी भी फ़ाइल, वास्तव में) को संसाधित करने का "नोड" तरीका fs.read()
प्रत्येक उपलब्ध चंक का उपयोग करना और संसाधित करना होगा क्योंकि यह ऑपरेटिंग सिस्टम से उपलब्ध है। हालाँकि, फ़ाइल को इस तरह से पढ़ना आपको अपनी खुद की (संभवतः) वृद्धिशील पार्सिंग / फ़ाइल के प्रसंस्करण की आवश्यकता है और बफरिंग की कुछ राशि अपरिहार्य हो सकती है।
var lines = data.split(/\r?\n/);
, फिर सरणी "लाइनों" में प्रत्येक पंक्ति होगी।
नोड के साथ Usign करें।
var fs = require('fs');
try {
var data = fs.readFileSync('file.txt', 'utf8');
console.log(data.toString());
} catch(e) {
console.log('Error:', e.stack);
}
IMHO, 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()
। ध्यान देने योग्य प्रतीक्षा करने के लिए यह एक बहुत बड़ी फ़ाइल है। एक JSON कॉन्फिगरेशन फाइल जैसे package.json के 1 kb के अंतर्गत होने की संभावना है, इसलिए आप इसे 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);
});