2009-07-27 20 views
5

मैं एक फ़ाइल तक पहुंच रहा हूं, और इससे पहले कि मैं इसमें शामिल हूं, मैं फ़ाइल से अंतिम पंक्ति को हटाना चाहता हूं। रूबी में ऐसा करने का कोई कुशल तरीका है?रूबी में फ़ाइल की अंतिम पंक्ति को कैसे हटाएं?

यह है कि मैं क्या फ़ाइल तक पहुँचने का उपयोग कर रहा हूँ है:

file = File.new("imcs2.xml", "a") 

उत्तर

4

मान लिया जाये कि आप वान फ़ाइल की संपूर्ण अंतिम पंक्ति को हटाने के लिए टी, आप इस विधि जो पिछले लाइन के शुरू होने से पता लगाता है और शुरू होता है वहाँ से लिख उपयोग कर सकते हैं:

last_line = 0 
file = File.open(filename, 'r+') 
file.each { last_line = file.pos unless file.eof? } 

file.seek(last_line, IO::SEEK_SET) 
#Write your own stuff here 
file.close 
+0

यह तब तक काम करता है जब तक आपका प्रतिस्थापन टेक्स्ट फ़ाइल की अंतिम पंक्ति में मूल पाठ से अधिक लंबा न हो। यदि यह छोटा है, तो शेष डालने के बाद शेष को एक नई पंक्ति में धकेल दिया जाएगा। – Excalibur

+0

यह कोड किसी फ़ाइल की अंतिम पंक्ति को हटा नहीं करता है। –

1

सबसे आसान तरीका है बस, पूरे फ़ाइल को पढ़ने अंत में '\ n' निकालने के लिए, और यह सब फिर से लिखने अपने स्वयं के साथ करने के लिए है सामग्री:

filename = "imcs2.xml" 
content = File.open(filename, "rb") { |io| io.read } 
File.open(filename, "wb") { |io| 
    io.print content.chomp 
    io.print "yourstuff" # Your Stuff Goes Here 
} 

वैकल्पिक रूप से, सिर्फ io.seek() पीछे की ओर पिछले न्यू लाइन पर किसी भी अगर:

filename = "imcs2.xml" 
File.open(filename, "a") { |io| 
    io.seek(-1, IO::SEEK_CUR) # -1 for Linux, -2 for Windows: \n or \r\n 
    io.print "yourstuff" # Your Stuff Goes Here 
} 
6

मुझे लगता है कि करने के लिए आप क्या कोशिश कर रहे हैं नहीं हूँ वाला कोशिश करने के लिए, लेकिन यदि आप किसी XML फ़ाइल में मूल तत्व के समापन टैग से छुटकारा पाने का प्रयास कर रहे हैं ताकि आप अधिक बाल टैग जोड़ सकें, फिर समापन रूट टैग को दोबारा जोड़ दें, मैं कल्पना करूंगा कि वहां हैं वहाँ रूबी मॉड्यूल जो एक्सएमएल लिखने/संपादित करने के इस कार्य को सुविधाजनक बनाता है। मैं तो बस कह रहा हूं।

शायद बिल्डर:

Hpricot भी काम करने के लिए लगता है:

+0

आपको एक मानसिक के रूप में नौकरी मिलनी चाहिए :)। यही वही है जो मैं करने की कोशिश कर रहा था, यह एक छोटी हैक नौकरी है इसलिए मैंने इसमें बहुत अधिक शोध नहीं किया, लेकिन अतिरिक्त मील जाने के लिए धन्यवाद! –

+0

कोई समस्या नहीं! क्षमा करें मैंने एक निश्चित उत्तर पोस्ट नहीं किया है, लेकिन मैं लगभग सकारात्मक हूं वहां उपकरण हैं जो आपके लिए यह करेंगे। मैंने लगभग 15 मिनट तक खोज की और मुझे ये मिला। बेशक, आप अपनी परियोजना को खत्म करने की प्रेरणा के साथ अधिक, संभवतः बेहतर समाधान ढूंढने के लिए बाध्य हैं, अगर मैंने जो प्रदान किया है, वह पर्याप्त नहीं है। –

संबंधित मुद्दे