রুবিতে ফাইল লিখবেন কীভাবে?


571

আমার ডাটাবেসের বাইরে ডেটা পড়তে হবে এবং তারপরে এটি একটি পাঠ্য ফাইলে সংরক্ষণ করতে হবে।

রুবিতে আমি কীভাবে এটি করতে পারি? রুবিতে কোনও ফাইল ম্যানেজমেন্ট সিস্টেম নেই?

উত্তর:


178

রুবি ফাইল বর্গ আপনি ইনস এবং এর আউট দেব ::newএবং ::openকিন্তু তার পিতা বা মাতা, আই বর্গ , গভীরতা মধ্যে পায় #readএবং #write


6
ধন্যবাদ জিওফ পুরানো প্রশ্ন এবং উত্তরগুলি নতুন ব্যবহারকারীদের পরিষ্কার করা দেখতে ভাল। সামগ্রিকভাবে আরও ভাল সাইটের জন্য তৈরি করে।
jdl

7
আমি এই বিড়ম্বনা খুঁজে। উত্তরটি খুব ভালভাবে নথিভুক্ত করা হয়েছে ... তবে এখন এক বছর পরে এই প্রশ্নটি গুগলে প্রথম হিট। যখন প্রশ্ন জিজ্ঞাসা করা হয়েছিল, তখন মনে হতে পারে যে ওপি খুব কম প্রচেষ্টা ব্যয় করছে তবে এখন পর্যন্ত গুগলের কথা, এটিই সেরা উত্স।
জেফ

7
সম্ভবত কারণ আপনার যা জানা দরকার তা এখানেই রয়েছে। যারা সূক্ষ্ম বিবরণ পড়তে চান তাদের জন্য খনিই হ'ল "একজন ব্যক্তিকে মাছ ধরতে শেখান" এবং এখানে প্রচুর পরিমাণে "একজন মানুষকে একটি মাছ দিন" উত্তর রয়েছে এবং সেইসাথে এমন লোকদের জন্য যারা কেবল কাটা-পেস্ট করতে চান। এটি আশ্চর্যজনক নয় যে এই সংমিশ্রণটি গুগলে ভাল অবস্থানে রয়েছে।
jdl

1
সুতরাং, ন্যায্যতার সাথে আমি অনেকগুলি ভিন্ন ভাষায় কাজ করি যার অর্থ আমি খুব কমই নির্দিষ্ট নির্দিষ্ট বাক্যটির বাক্য বাক্যটিকে স্মরণ করতে পারি। আমি এই কয়েক বার googled করেছি, এবং আমি সবসময় ডান দিকে স্ক্রোল করুন অতীত এই উত্তর, এটা নিচের, কারণ যখন আমি Stackoverflow google আমি সাধারণত শুধু একটি Dang মাছ খুঁজছি হয়। : পি সত্যই এটি উভয় থাকার ভাল। সম্ভবত কোনও দিন আমি যথেষ্ট পরিমাণ রুবি একবারে করে যাব যে আমি বিশদটি যত্ন করব।
ব্যবহারকারী435779

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

929

আপনি নিম্নলিখিত খুঁজছেন?

File.open(yourfile, 'w') { |file| file.write("your text") }

8
yourfileএকটি পরিবর্তনশীল যা ফাইলটির নাম লেখার জন্য ধারণ করে।
বি সেভেন

17
বিকল্পভাবে: f = File.open ('নাম', 'w'); f.write ( 'টেক্সট'); f.close
vish

5
@ উইশ: আমি এই সমাধানটি সুপারিশ করব না কারণ যদি f.writeকোনও ব্যতিক্রম উত্থাপন করা হয় তবে ফাইল বিবরণকারীটি খোলা থাকবে ।
এনবারেইল

288
সংক্ষিপ্ত এবং মিষ্টি:File.write('filename', 'content')
বেনজমিন ওকে

14
এমনকি আরও ছোট এবং নথিভুক্ত:IO.write('filename', 'content')
থাই

636

আপনি সংক্ষিপ্ত সংস্করণটি ব্যবহার করতে পারেন:

File.write('/path/to/file', 'Some glorious content')

এটি লিখিত দৈর্ঘ্য ফেরত দেয়; দেখতে :: লেখ আরো বিস্তারিত জানার এবং বিকল্পের জন্য।

ফাইলটিতে যুক্ত করার জন্য, এটি ইতিমধ্যে বিদ্যমান থাকলে, ব্যবহার করুন:

File.write('/path/to/file', 'Some glorious content', mode: 'a')

14
এফওয়াইআই এই শর্টহ্যান্ড পদ্ধতিটি কেবল রুবি ১.৯.৩ দিয়ে শুরু করে। 1.9 বা 1.8 এর আগের কোনও সংস্করণে এ জাতীয় কোনও পদ্ধতি নেই। সেক্ষেত্রে আপনাকে অবশ্যই @mvndaai
অ্যান্ড্রু বার্নস

13
এফওয়াইআই এটি সমাপ্ত হলে ফাইলটি সঠিকভাবে বন্ধ করে দেয়।
Freedom_Ben

2
আইও ক্লাসের ডক্স বলছে এটি ফাইলটি বন্ধ করে দেয়
2'15

7
এই উইল পরিশেষে যোগ একটি ফাইলে বা শুধু এটি ওভাররাইট করবেন?
জোশুয়া পিন্টার

8
@ জোশপিন্টার: এটি ওভাররাইট করে।
mklement0

248

এটি বেশিরভাগ ক্ষেত্রেই পছন্দসই পদ্ধতি:

 File.open(yourfile, 'w') { |file| file.write("your text") }

যখন কোনও ব্লকটি পাস করা হয় File.open, ব্লকটি বন্ধ হয়ে গেলে ফাইল অবজেক্টটি স্বয়ংক্রিয়ভাবে বন্ধ হয়ে যায়।

আপনি যদি কোনও ব্লক পাস না করেন File.open, আপনাকে অবশ্যই নিশ্চিত করতে হবে যে ফাইলটি সঠিকভাবে বন্ধ হয়েছে এবং ফাইলটি লিখিত হয়েছে content

begin
  file = File.open("/tmp/some_file", "w")
  file.write("your text") 
rescue IOError => e
  #some error occur, dir not writable etc.
ensure
  file.close unless file.nil?
end

আপনি এটি ডকুমেন্টেশনে খুঁজে পেতে পারেন :

static VALUE rb_io_s_open(int argc, VALUE *argv, VALUE klass)
{
    VALUE io = rb_class_new_instance(argc, argv, klass);
    if (rb_block_given_p()) {
        return rb_ensure(rb_yield, io, io_close, io);
    }
    return io;
}

হ্যাঁ, file | ফাইল | ব্লক সিনট্যাক্স ব্যবহার করে .... the ব্লকটি বন্ধ হয়ে গেলে ফাইলটি বন্ধ করে দেবে।
ওয়েসগারিসন

শীতল ধন্যবাদ. আমি এটি সম্পর্কে নিশ্চিত ছিল না। ব্লক এবং File.open ব্লগ.ব্রবিবেস্টপ্র্যাকটিসস / পয়েসস / রেকলেম্মে সম্পর্কে আরও কিছু তথ্য এখানে দেওয়া হয়েছে
টমবার্ট

1
শুধু কিছু রুবি ওয়ে-ইশ: শূন্যস্থান একটি বস্তু, তাই কোনও ফাইল নাল কিনা তা পরীক্ষা করতে আপনি বস্তুর তুলনা করার পরিবর্তে নিজেই জিজ্ঞাসা করুন (ফাইল = নীল? ফাইলের পরিবর্তে == নীল)
জেকাবেলো ২

@ জেকাবেলো নিশ্চিত, এটি অবশ্যই রুবির মতো পদ্ধতির, ধন্যবাদ!
টম্বার্ট

অবশেষে একটি উত্তর যা দেখায় যে ফাইল স্ট্যাটাস এবং এটি কীভাবে পরিচালনা করা উচিত তাও পরীক্ষা করা উচিত এবং কেবল একটি লাইনার নয় যা কেবল খোলা কল দেখায়।
নাসের

115

জাম্বরির উত্তর এখানে পাওয়া ভাল।

File.open("out.txt", '<OPTION>') {|f| f.write("write your stuff here") }

আপনার বিকল্পগুলি যেখানে <OPTION>রয়েছে:

r- শুধুমাত্র পাঠযোগ্য. ফাইল উপস্থিত থাকতে হবে।

w - লেখার জন্য একটি ফাঁকা ফাইল তৈরি করুন।

a - একটি ফাইলে সংযোজন করুন The ফাইলটি উপস্থিত না থাকলে তৈরি হয়।

r+- উভয়ই পড়া এবং লেখার আপডেটের জন্য একটি ফাইল খুলুন। ফাইল উপস্থিত থাকতে হবে।

w+ - উভয় পড়া এবং লেখার জন্য একটি খালি ফাইল তৈরি করুন।

a+- পড়া এবং সংযোজন জন্য একটি ফাইল খুলুন। ফাইলটি উপস্থিত না থাকলে তৈরি করা হয়।

আপনার ক্ষেত্রে, wভাল।


আমি হতবাক হয়েছি যে এমন একটি উত্তর যা স্বীকার করে অন্য উত্তরটি অনুলিপি করে 100 টিরও বেশি উত্স পেতে পারে। আমি প্রশ্নের প্রথম মন্তব্যটি মন্তব্য হিসাবে দেখতে পাচ্ছি, তবে এটিই।
ক্যারি সোভেল্যান্ড

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

31

আমাদের মধ্যে যারা উদাহরণস্বরূপ শিখেন তাদের জন্য ...

এটির মতো কোনও ফাইলে পাঠ্য লিখুন:

IO.write('/tmp/msg.txt', 'hi')

বোনাস তথ্য ...

এটি আবার পড়ুন

IO.read('/tmp/msg.txt')

প্রায়শই, আমি আমার ক্লিপবোর্ডে একটি ফাইল পড়তে চাই ***

Clipboard.copy IO.read('/tmp/msg.txt')

এবং অন্যান্য সময়, আমি আমার ক্লিপবোর্ডে যা আছে তা কোনও ফাইলে লিখতে চাই ***

IO.write('/tmp/msg.txt', Clipboard.paste)

*** ধরে নিন আপনি ক্লিপবোর্ড মণি ইনস্টল করেছেন

দেখুন: https://rubygems.org/gems/clipboard


1
IO.writeঅপশনটি সংযোজন পরিবর্তে ফাইল সামগ্রীতে ওভাররাইট অপশনটি সাবধান করুন। IO.writ এর সাথে সংযোজন করা কিছুটা ক্লান্তিকর।
fguillen

নিশ্চিত আপনি কি সম্পর্কে কথা বলছেন না? আইও.ওরাইট কমান্ডের কোনও ফাইলটিতে লেখার জন্য সেই বিকল্পটির প্রয়োজন নেই। আমি ফাইলটি / টিএমপি ডিরেক্টরি বা বর্তমান ডিরেক্টরিতে সংরক্ষণ করতে সাবধান হব; অন্যথায়, আপনি একটি Errno::ENOENT: No such file or directory @ rb_sysopenবার্তা এবং 0 বাইট আকারের তৈরি ফাইলটি দেখতে পাবেন ।
l3x

25

ফাইলটির পূর্ববর্তী বিষয়বস্তু ধ্বংস করতে, তারপরে ফাইলটিতে একটি নতুন স্ট্রিং লিখুন:

open('myfile.txt', 'w') { |f| f << "some text or data structures..." } 

কোনও ফাইলের পুরানো বিষয়বস্তুগুলিকে ওভাররাইট না করে সংযুক্ত করতে:

open('myfile.txt', "a") { |f| f << 'I am appended string' } 
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.