[转帖]ruby 输入输出_Android, Python及开发编程讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  Android, Python及开发编程讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 3232 | 回复: 0   主题: [转帖]ruby 输入输出        下一篇 
zhongwei.wang
注册用户
等级:中校
经验:1859
发帖:60
精华:1
注册:2013-12-23
状态:离线
发送短消息息给zhongwei.wang 加好友    发送短消息息给zhongwei.wang 发消息
发表于: IP:您无权察看 2013-12-27 9:41:56 | [全部帖] [楼主帖] 楼主

Ruby提供了两种不同的I/O方法。
第一种就是我们一直在用的RUBY的内核模块中的gets,open, print, printf, putc, puts, readline, readlines, 以及test。做为一直以来都在使用的standard input和standard output,我就不多做解释了。只要说一句大家就明白了,上面的函数如果出现在C中,那么实现就和C的语法一样,如果出现在JAVA中,你就直接使用JAVA的写法去调用,完全OK。
第二种方法就要体现出Ruby自己的东西了:I/O对象。接下来,我们就来看一下I/O对象的几类。还是从我们最常用的一个子类开始吧:File。
1、打开文件
可能你马上就想到了,既然File是一个类,那么new方法就应该可以用吧,呵呵,没错,我们可以用File.new(filename,openMode)这种方法来打开一个文件,相对的,我们也可以用File.close来关闭对一个文件的引用,这不需赘述。
可是我却要向大家推荐另外一种用法:File.open,这种方法也同样可以打开一个文件,那么他和new有何不同吗?在通常的应用之中,这两种方法并没有什么不同。但是如果在打开文件的方法之后附加了一个块的话,那他们的表现就不同了。Open方法将不再返回一个文件引用,而是去调用块里的代码,并把新打开的文件作为参数传给块使用。而当块中的代码执行完以后,文件将会自动关闭。Open的另外一个好处是,如果在执行过程中程序发生了异常,那么文件也将会自动关闭。而New就有可能因无法执行close而无法关闭文件。
2、读写文件
说起来没有什么大不了的,其实所谓读写文件不过是标准输入输出函数前面加上一个File.而已,也就是说我们用objFile.puts和objFile.gets来进行文件的读写就可以了。
3、使用迭代器读取文件

 a.IO#each_byte将会得到I/O对象的接下来的8位。
File.open("testfile") do |file|
file.each_byte {|ch| putc ch; print "." }
end
b.IO#each_line将得到接下来的一行。
File.open("testfile") do |file|
file.each_line {|line| puts "Got #{line.dump}" }
end


       c.each_line中还可以使用分隔符。

 File.open("testfile") do |file|
file.each_line("e") {|line| puts "Got #{ line.dump }" }
end


d.如果你把迭代器与自动关闭的块特征相联系的话,那就可以使用IO.foreach。这种方法以I/O源做为参数,并打工它,然后自动对行进行迭代,最后再关闭文件。好像有点糊涂了,还是来看代码吧:

IO.foreach("testfile") {|line| puts line }


         是不是有点惊讶于RUBY的快捷了?
       e.当然了,你还可以把文件读进字符串或者一个字符串数组里。

 # read into string
str = IO.read("testfile")


或者:

# read into an array
arr = IO.readlines("testfile")


Ruby语言最为常用的就是输入输出的应用。我们经常使用print和puts方法来实现这些输入输出功能。

所有这些和其它处理Ruby输入输出的方法都定义于Kernel模块中。这个Kernel模块又被包含在Object类中。因此,Kernel的方法出现在每一个对象中。在输出方面,Kernel定义了print,printf,putc和IO类和两个子类(File和BasicSocket)-它们允许读写文件和套接字。BasicSocket是套接字库的一部分并且将在以后讨论它。

包含了FileTest模块的File类,提供了许多方法来操作系统文件和目录。从Kernel中使用的用于读写到标准输入/输出机制的方法被进一步重用于File实例中的读写操作。下面是一个Ruby输入输出代码示例-它把一些名字写入一个新建的文件中,然后再把这些名字读回到一个数组中。

customers=%w[Jim Kevin Davin Andrew]
outFile = File.new("c:\\
examples\\test\\customers.txt", "w")
customers.each{|customer
| outFile.puts(customer)}
outFile.close
inFile= File.new("c:
\\examples\\customers.txt", "r")
readCustomers=inFile.readlines
readCustomers.each{
|customer| puts customer}
inFile.close




赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论