ฉันต้องการอ่านข้อมูลจากฐานข้อมูลแล้วบันทึกลงในไฟล์ข้อความ
ฉันจะทำอย่างนั้นใน Ruby ได้อย่างไร มีระบบจัดการไฟล์ใน Ruby หรือไม่?
ฉันต้องการอ่านข้อมูลจากฐานข้อมูลแล้วบันทึกลงในไฟล์ข้อความ
ฉันจะทำอย่างนั้นใน Ruby ได้อย่างไร มีระบบจัดการไฟล์ใน Ruby หรือไม่?
คำตอบ:
ทับทิมคลาแฟ้มจะทำให้คุณ ins ลึกหนาบางของ::new
และ::open
แต่แม่ของมันที่ระดับ IO , ได้รับในเชิงลึกของและ#read
#write
คุณกำลังมองหาสิ่งต่อไปนี้หรือไม่?
File.open(yourfile, 'w') { |file| file.write("your text") }
yourfile
เป็นตัวแปรที่เก็บชื่อของไฟล์ที่จะเขียน
f.write
มีข้อยกเว้น
File.write('filename', 'content')
IO.write('filename', 'content')
คุณสามารถใช้เวอร์ชั่นย่อ:
File.write('/path/to/file', 'Some glorious content')
มันคืนความยาวที่เขียน; ดู:: เขียนสำหรับรายละเอียดเพิ่มเติมและตัวเลือก
หากต้องการต่อท้ายไฟล์หากมีอยู่แล้วให้ใช้:
File.write('/path/to/file', 'Some glorious content', mode: 'a')
วิธีนี้เป็นวิธีที่แนะนำในกรณีส่วนใหญ่:
File.open(yourfile, 'w') { |file| file.write("your text") }
เมื่อบล็อกถูกส่งผ่านไปยังFile.open
วัตถุไฟล์จะถูกปิดโดยอัตโนมัติเมื่อบล็อกสิ้นสุดลง
หากคุณไม่ผ่านการบล็อกFile.open
คุณต้องตรวจสอบให้แน่ใจว่าไฟล์นั้นปิดอย่างถูกต้องและเนื้อหานั้นถูกเขียนลงในไฟล์
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.open
blog.rubybestpractices.com/posts/rklemme/ …มันยังกล่าวถึงในเอกสารอย่างเป็นทางการ
คำตอบของแซมเบียที่พบที่นี่ดีที่สุด
File.open("out.txt", '<OPTION>') {|f| f.write("write your stuff here") }
ตัวเลือกของคุณ<OPTION>
คือ:
r
- อ่านเท่านั้น. ไฟล์จะต้องมีอยู่
w
- สร้างไฟล์ว่างเปล่าสำหรับการเขียน
a
- ต่อท้ายไฟล์ไฟล์จะถูกสร้างขึ้นหากไม่มีอยู่
r+
- เปิดไฟล์สำหรับอัพเดตทั้งการอ่านและการเขียน ไฟล์จะต้องมีอยู่
w+
- สร้างไฟล์ว่างสำหรับทั้งการอ่านและการเขียน
a+
- เปิดไฟล์สำหรับอ่านและต่อท้าย ไฟล์ถูกสร้างขึ้นหากไม่มีอยู่
ในกรณีของคุณw
จะดีกว่า
สำหรับพวกเราที่เรียนรู้จากตัวอย่าง ...
เขียนข้อความไปยังไฟล์เช่นนี้:
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)
*** ถือว่าคุณได้ติดตั้งพลอยคลิปบอร์ดแล้ว
IO.write
ตัวเลือกเขียนทับเนื้อหาไฟล์แทนการผนวก ผนวกกับ IO.write ค่อนข้างน่าเบื่อ
Errno::ENOENT: No such file or directory @ rb_sysopen
ข้อความและไฟล์ที่สร้างขึ้นด้วยขนาด 0 ไบต์
หากต้องการทำลายเนื้อหาก่อนหน้าของไฟล์จากนั้นเขียนสตริงใหม่ลงในไฟล์:
open('myfile.txt', 'w') { |f| f << "some text or data structures..." }
หากต้องการต่อท้ายไฟล์โดยไม่เขียนทับเนื้อหาเดิมให้ทำดังนี้
open('myfile.txt', "a") { |f| f << 'I am appended string' }