Latest web development tutorials
×

Ruby หลักสูตร

Ruby หลักสูตร Ruby แนะนำโดยย่อ Ruby สิ่งแวดล้อม Ruby ติดตั้ง Linux Ruby ติดตั้ง Windows Ruby การเข้ารหัสจีน Ruby เลือกบรรทัดคำสั่ง Ruby ตัวแปรสภาพแวดล้อม Ruby ไวยากรณ์ Ruby ชนิดข้อมูล Ruby คลาสและวัตถุ Ruby กรณีระดับ Ruby ตัวแปร Ruby ผู้ประกอบการ Ruby หมายเหตุ Ruby เงื่อนไข Ruby การไหลเวียน Ruby ทาง Ruby กลุ่ม Ruby โมดูล Ruby เชือก Ruby แถว Ruby กัญชา Ruby วันที่และเวลา Ruby ขอบเขต Ruby iterator Ruby input และ output ไฟล์ Ruby File ชั้นเรียนและวิธี Ruby Dir ชั้นเรียนและวิธี Ruby ผิดปกติ

Ruby การสอนที่ทันสมัย

Ruby เชิงวัตถุ Ruby นิพจน์ปกติ Ruby การเข้าถึงฐานข้อมูล - DBI หลักสูตร Ruby MySQL Ruby CGI โครงการ Ruby CGI ทาง Ruby CGI Cookies Ruby CGI Sessions Ruby ส่ง Email SMTP Ruby Socket โครงการ Ruby XML, XSLT, XPath Ruby Web Services Ruby multithreading Ruby JSON Ruby RubyGems

ทับทิมยื่นเข้าและส่งออก

ทับทิมให้ชุดของวิธีการ / O ที่เกี่ยวข้องกับการดำเนินการในเคอร์เนล (Kernel) โมดูลฉัน ทั้งหมดที่ฉันวิธีการ / O ได้มาจากคลาส IO

IOให้ทุกวิธีคลาสเช่นอ่านเขียนได้รับทำให้, ReadLine, GETC และprintf

ส่วนนี้จะอธิบายทับทิมตาม I / O ฟังก์ชั่นที่มีอยู่ทั้งหมด สำหรับฟังก์ชั่นเพิ่มเติมโปรดดูที่ชั้นIOทับทิม

ทำให้คำสั่ง

ในส่วนก่อนหน้านี้คุณกำหนดให้กับตัวแปรและจากนั้นใช้คำสั่งพิมพ์ออกมาทำให้

คำสั่งทำให้บ่งชี้ว่าโปรแกรมจะแสดงค่าที่เก็บไว้ในตัวแปรนี้จะเพิ่มแถวใหม่ในตอนท้ายของแต่ละบรรทัด

ตัวอย่าง

#!/usr/bin/ruby

val1 = "This is variable one"
val2 = "This is variable two"
puts val1
puts val2

เรียกเอาท์พุทตัวอย่างข้างต้นคือ

This is variable one
This is variable two

ได้รับงบ

ได้รับงบสามารถนำมาใช้เพื่อให้ได้ผู้ใช้ป้อนข้อมูลจากหน้าจอมาตรฐานที่เรียกว่าSTDIN

ตัวอย่าง

รหัสต่อไปนี้แสดงให้เห็นถึงวิธีการใช้คำสั่งที่ได้รับ รหัสจะแจ้งให้ผู้ใช้ป้อนค่าที่จะเก็บไว้ใน Val ตัวแปรสุดท้ายจะถูกพิมพ์ลงบน STDOUT

#!/usr/bin/ruby

puts "Enter a value :"
val = gets
puts val

เรียกเอาท์พุทตัวอย่างข้างต้นคือ

Enter a value :
This is entered value
This is entered value

คำสั่งputc

และทำให้คำสั่งที่แตกต่างกันคำสั่งที่ทำให้การส่งออกของสตริงทั้งหน้าจอในขณะที่คำสั่งputc สามารถนำมาใช้เพื่อการส่งออกลำดับตัวอักษร

ตัวอย่าง

การส่งออกของรหัสต่อไปนี้เพียงตัวอักษร H:

#!/usr/bin/ruby

str="Hello Ruby!"
putc str

เรียกเอาท์พุทตัวอย่างข้างต้นคือ

H

งบการพิมพ์

งบการพิมพ์และทำให้คำสั่งที่คล้ายกันความแตกต่างเพียงอย่างเดียวคือว่าหลังจากที่คำสั่งที่ทำให้การส่งออกจะข้ามไปยังบรรทัดถัดไปขณะที่การใช้คำสั่งพิมพ์เคอร์เซอร์อยู่ในตำแหน่งในบรรทัดเดียวกัน

ตัวอย่าง

#!/usr/bin/ruby

print "Hello World"
print "Good Morning"

เรียกเอาท์พุทตัวอย่างข้างต้นคือ

Hello WorldGood Morning

การเปิดและปิดไฟล์

ณ ตอนนี้คุณมีการอ่านและเขียนเพื่อเข้ามาตรฐานและการส่งออก ตอนนี้เราจะดูที่วิธีแฟ้มข้อมูลที่เกิดขึ้นจริง

วิธีFile.new

คุณสามารถสร้างวัตถุไฟล์ใช้ในการอ่านวิธีFile.new เขียนหรือการอ่านและเขียนอ่านและเขียนสิทธิ์ขึ้นอยู่กับพารามิเตอร์โหมด สุดท้ายคุณก็สามารถใช้วิธีการFile.closeจะปิดแฟ้ม

ไวยากรณ์

aFile = File.new("filename", "mode")
   # ... 处理文件
aFile.close

วิธีFile.open

คุณสามารถสร้างวัตถุไฟล์ใหม่โดยใช้วิธีการFile.openและวัตถุที่ได้รับมอบหมายไปยังแฟ้มแฟ้ม แต่มีสิ่งหนึ่งที่แตกต่างระหว่างFile.openและFile.newวิธี ความแตกต่างคือวิธีFile.openสามารถเชื่อมโยงกับบล็อก แต่ไม่วิธีFile.new

File.open("filename", "mode") do |aFile|
   # ... process the file
end

ตารางต่อไปนี้แสดงรายการไฟล์ที่เปิดในรูปแบบที่แตกต่างกัน

模式描述
r只读模式。文件指针被放置在文件的开头。这是默认模式。
r+读写模式。文件指针被放置在文件的开头。
w只写模式。如果文件存在,则重写文件。如果文件不存在,则创建一个新文件用于写入。
w+读写模式。如果文件存在,则重写已存在的文件。如果文件不存在,则创建一个新文件用于读写。
a只写模式。如果文件存在,则文件指针被放置在文件的末尾。也就是说,文件是追加模式。如果文件不存在,则创建一个新文件用于写入。
a+读写模式。如果文件存在,则文件指针被放置在文件的末尾。也就是说,文件是追加模式。如果文件不存在,则创建一个新文件用于读写。

การอ่านและการเขียนไฟล์

วิธีการที่เรียบง่ายของ I / O ยังสามารถนำมาใช้สำหรับวัตถุไฟล์ทั้งหมดดังนั้นได้รับอ่านบรรทัดจากการป้อนข้อมูลมาตรฐานaFile.gets aFile อ่านบรรทัดจากวัตถุไฟล์

แต่ I / O วัตถุให้ชุดเพิ่มเติมของวิธีการเข้าถึงให้เรามีความสะดวกสบาย

วิธีsysread

คุณสามารถใช้วิธีsysreadอ่านเนื้อหาของแฟ้ม เมื่อใช้วิธี sysread คุณสามารถใช้ใดโหมดหนึ่งเพื่อเปิดไฟล์ ตัวอย่างเช่น:

ต่อไปนี้เป็นไฟล์ป้อนข้อความนี้:

This is a simple text file for testing purpose.

ตอนนี้เรามาลองอ่านไฟล์:

#!/usr/bin/ruby

aFile = File.new("input.txt", "r")
if aFile
   content = aFile.sysread(20)
   puts content
else
   puts "Unable to open file!"
end

คำสั่งนี้จะเข้าสู่ 20 ตัวอักษรแรกของไฟล์ ตัวชี้ไฟล์จะถูกวางไว้ในตำแหน่งที่อยู่ในแฟ้ม 21 ตัวอักษร

วิธีsyswrite

คุณสามารถใช้วิธีsyswriteในการเขียนไปยังแฟ้ม เมื่อใช้วิธี syswrite คุณต้องเปิดแฟ้มในโหมดการเขียน ตัวอย่างเช่น:

#!/usr/bin/ruby

aFile = File.new("input.txt", "r+")
if aFile
   aFile.syswrite("ABCDEF")
else
   puts "Unable to open file!"
end

งบจะเขียน "ABCDEF" ไปยังแฟ้ม

วิธีeach_byte

วิธีการนี้เป็นไฟล์ชั้นเรียนEach_byte วิธีซ้ำสามารถสตริงตัวละครแต่ละตัว พิจารณาตัวอย่างรหัสต่อไปนี้:

#!/usr/bin/ruby

aFile = File.new("input.txt", "r+")
if aFile
   aFile.syswrite("ABCDEF")
   aFile.rewind
   aFile.each_byte {|ch| putc ch; putc ?. }
else
   puts "Unable to open file!"
end

หนึ่งโดยตัวละครตัวหนึ่งจะถูกส่ง CH ตัวแปรแล้วปรากฏบนหน้าจอที่แสดงด้านล่าง:

A.B.C.D.E.F.s. .a. .s.i.m.p.l.e. .t.e.x.t. .f.i.l.e. .f.o.r. .t.e.s.t.i.n.g. .p.u.r.p.o.s.e...

วิธีIO.readlines

คลาแฟ้มเป็นsubclass ของชั้น IO ระดับ IO นอกจากนี้ยังมีวิธีการบางอย่างสำหรับการจัดการไฟล์

IO.readlinesเป็นชั้น IO วิธีการ วิธีการก้าวหน้าผลตอบแทนที่เนื้อหาของแฟ้ม รหัสต่อไปนี้แสดงให้เห็นถึงวิธีการIO.readlinesใช้:

#!/usr/bin/ruby

arr = IO.readlines("input.txt")
puts arr[0]
puts arr[1]

ในรหัสนี้ตัวแปรเป็น ARR อาร์เรย์ แต่ละแถวจะเป็นไฟล์ ARR อาร์เรย์input.txtองค์ประกอบ ดังนั้น ARR [0] จะมีบรรทัดแรกและ ARR [1] จะมีบรรทัดที่สองของไฟล์

วิธีIO.foreach

วิธีการส่งกลับการส่งออกมีความก้าวหน้าforeachระหว่างวิธีการที่แตกต่างกันและวิธีการreadline จะมีการเชื่อมโยงวิธีforeach บล็อก แต่แตกต่างจากวิธีการreadline จะวิธีforeach แทนที่จะกลับอาร์เรย์ ตัวอย่างเช่น:

#!/usr/bin/ruby

IO.foreach("input.txt"){|block| puts block}

รหัสนี้จะทดสอบเนื้อหาของไฟล์ผ่านบล็อกก้าวหน้าตัวแปรแล้วออกจะปรากฏบนหน้าจอ

เปลี่ยนชื่อและลบไฟล์

คุณสามารถเปลี่ยนชื่อและลบไฟล์เปลี่ยนชื่อและลบวิธี

ตัวอย่างต่อไปนี้จะเปลี่ยนชื่อไฟล์ที่มีอยู่แล้วTest1.txt A:

#!/usr/bin/ruby

# 重命名文件 test1.txt 为 test2.txt
File.rename( "test1.txt", "test2.txt" )

ตัวอย่างต่อไปนี้จะลบไฟล์ที่มีอยู่test2.txt:

#!/usr/bin/ruby

# 删除文件 test2.txt
File.delete("text2.txt")

โหมดไฟล์และความเป็นเจ้าของ

ใช้chmodการเปลี่ยนแปลงวิธีการที่มีรูปแบบหน้ากากหรือแฟ้มสิทธิ์การเข้าถึงรายการ /:

ตัวอย่างของการเปลี่ยนแปลงต่อไปนี้รูปแบบการtest.txtไฟล์ที่มีอยู่สำหรับค่าหน้ากาก:

#!/usr/bin/ruby

file = File.new( "test.txt", "w" )
file.chmod( 0755 )

ตารางต่อไปนี้แสดงหน้ากากที่แตกต่างกันวิธีการchmodสามารถนำมาใช้:

掩码描述
0700rwx 掩码,针对所有者
0400r ,针对所有者
0200w ,针对所有者
0100x ,针对所有者
0070rwx 掩码,针对所属组
0040r ,针对所属组
0020w ,针对所属组
0010x ,针对所属组
0007rwx 掩码,针对其他人
0004r ,针对其他人
0002w ,针对其他人
0001x ,针对其他人
4000执行时设置用户 ID
2000执行时设置所属组 ID
1000保存交换文本,甚至在使用后也会保存

เข้าถึงเอกสาร

คำสั่งต่อไปนี้เพื่อตรวจสอบไฟล์ก่อนที่จะเปิดไฟล์ที่มีอยู่แล้ว:

#!/usr/bin/ruby

File.open("file.rb") if File::exists?( "file.rb" )

คำสั่งดังต่อไปนี้เพื่อสอบถามว่าไฟล์แน่นอนเอกสาร:

#!/usr/bin/ruby

# 返回 true 或false
File.file?( "text.txt" ) 

คำสั่งดังต่อไปนี้เพื่อตรวจสอบว่าชื่อไฟล์ที่ได้รับเป็นไดเรกทอรี:

#!/usr/bin/ruby

# 一个目录
File::directory?( "/usr/local/bin" ) # => true

# 一个文件
File::directory?( "file.rb" ) # => false

มีคำสั่งต่อไปนี้เพื่อตรวจสอบไฟล์ที่สามารถอ่านได้เขียนได้ปฏิบัติการ:

#!/usr/bin/ruby

File.readable?( "test.txt" )   # => true
File.writable?( "test.txt" )   # => true
File.executable?( "test.txt" ) # => false

คำสั่งต่อไปจะตรวจสอบขนาดของไฟล์ให้เป็นศูนย์:

#!/usr/bin/ruby

File.zero?( "test.txt" )      # => true

คำสั่งต่อไปผลตอบแทนที่ขนาดของแฟ้ม:

#!/usr/bin/ruby

File.size?( "text.txt" )     # => 1002

คำสั่งดังต่อไปนี้จะใช้ในการตรวจสอบประเภทของไฟล์:

#!/usr/bin/ruby

File::ftype( "test.txt" )     # => file

วิธี ftypeส่งกลับค่าต่อไปนี้เพื่อระบุชนิดของแฟ้ม: ไฟล์ไดเรกทอรี characterSpecial, blockSpecial, FIFO เชื่อมโยงซ็อกเก็ตหรือไม่ทราบ

คำสั่งดังต่อไปนี้จะใช้ในการตรวจสอบไฟล์ที่ถูกสร้างแก้ไขหรือเวลาเข้าถึงล่าสุด:

#!/usr/bin/ruby

File::ctime( "test.txt" ) # => Fri May 09 10:06:37 -0700 2008
File::mtime( "text.txt" ) # => Fri May 09 10:44:44 -0700 2008
File::atime( "text.txt" ) # => Fri May 09 10:45:01 -0700 2008

ไดเรกทอรีทับทิม

ไฟล์ทั้งหมดที่มีอยู่ในไดเรกทอรีทับทิมมีไฟล์และไดเรกทอรีกระบวนการไฟล์ชั้นเรียนสำหรับการทำงานกับไฟล์เรียนผบ.สำหรับไดเรกทอรีการทำงาน

เรียกดูแคตตาล็อก

เปลี่ยนไดเรกทอรีในโครงการทับทิมโปรดใช้Dir.chdirตัวอย่างของการเปลี่ยนแปลงต่อไปนี้ไดเรกทอรีปัจจุบันคือ/ usr / bin

Dir.chdir("/usr/bin")

คุณสามารถดูDir.pwd ไดเรกทอรีปัจจุบัน:

puts Dir.pwd # 返回当前目录,类似 /usr/bin

คุณสามารถใช้Dir.entriesรับรายชื่อของไฟล์และไดเรกทอรีภายในไดเรกทอรีที่ระบุไปนี้:

puts Dir.entries("/usr/bin").join(' ')

Dir.entriesส่งกลับอาร์เรย์ที่มีทั้งหมดไดเรกทอรีที่ระบุDir.foreachให้ฟังก์ชันการทำงานเหมือนกัน:

Dir.foreach("/usr/bin") do |entry|
   puts entry
end

ได้รับรายชื่อไดเรกทอรีวิธีที่รัดกุมมากขึ้นเป็นวิธีการโดยใช้ระดับอาร์เรย์ Dir A:

Dir["/usr/bin/*"]

สร้างไดเรกทอรี

Dir.mkdirสามารถนำมาใช้ในการสร้างไดเรกทอรี:

Dir.mkdir("mynewdir")

นอกจากนี้คุณยังสามารถตั้งค่าสิทธิ์บนไดเรกทอรีใหม่ (ไม่ไดเรกทอรีที่มีอยู่) เป็นลูกบุญธรรม mkdir:

หมายเหตุ: หน้ากาก 755 เจ้าของชุด (เจ้าของ) เป็นสมาชิกของกลุ่ม (Group) ทุกคน (โลก [ทุกคน]) สิทธิ์ rwxr-xr-X ที่ r = อ่านอ่าน W = เขียนเขียน x = ดำเนินการการดำเนินการ

Dir.mkdir( "mynewdir", 755 )

ลบไดเรกทอรี

Dir.deleteจะใช้ในการลบไดเรกทอรีDir.unlinkและDir.rmdirดำเนินการฟังก์ชันเดียวกันให้เรามีความสะดวกสบาย

Dir.delete("testdir")

สร้างไฟล์ชั่วคราวและไดเรกทอรี

ไฟล์ชั่วคราวที่ถูกสร้างขึ้นที่มีเพียงแค่อยู่ในขั้นตอนของการดำเนินการของโครงการ แต่ไม่ได้เก็บไว้ข้อมูลอย่างถาวร

Dir.tmpdirให้เส้นทางไดเรกทอรีชั่วคราวของระบบปัจจุบันซึ่งโดยค่าเริ่มต้น แต่ไม่พร้อมใช้งาน เพื่อให้Dir.tmpdirใช้ได้กับ 'TMPDIR' เป็นสิ่งที่จำเป็นต้องใช้

คุณสามารถDir.tmpdirและFile.joinใช้ร่วมกันเพื่อสร้างแพลตฟอร์มไฟล์ชั่วคราว:

require 'tmpdir'
   tempfilename = File.join(Dir.tmpdir, "tingtong")
   tempfile = File.new(tempfilename, "w")
   tempfile.puts "This is a temporary file"
   tempfile.close
   File.delete(tempfilename)

รหัสนี้สร้างแฟ้มชั่วคราวในการที่จะเขียนข้อมูลและลบไฟล์ ห้องสมุดมาตรฐานทับทิมยังมีห้องสมุดชื่อtempfileของห้องสมุดสามารถนำมาใช้ในการสร้างแฟ้มชั่วคราว:

require 'tempfile'
   f = Tempfile.new('tingtong')
   f.puts "Hello"
   puts f.path
   f.close

Built-in ฟังก์ชั่น

ต่อไปนี้จะมีรายการที่สมบูรณ์ของไฟล์และไดเรกทอรีในรูบีในตัวฟังก์ชั่น: