精华帖 (0) :: 良好帖 (1) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-06-16
最后修改:2009-06-16
ruby 1.8.6 on windows File.join总生成“/”作为File Separator:
File.expand_path(File.join(File.dirname(__FILE__),"..","lib")) #=> "C:/Documents and Settings/lib" 而File::SEPARATOR也默认是"/"
File::SEPARATOR => "/" 尽管Windows API支持"/"和"\"两种形式。但是在cmd里面,windows却不能识别"/"。让人有点不爽... 似乎这个问题可以这样解决:
File::REAL_SEPARATOR = File::ALT_SEPARATOR || File::SEPARATOR File.join('dir','file').gsub(File::SEPARATOR,File::REAL_SEPARATOR) #on win => dir\name #on *nix => dir/name 但是,为什么ruby不能自动根据平台自己决定separator呢?或是说为什么windows下默认separator不是"\"呢? 还有更糟糕的换行... 匹配或替换不同系统产生的换行问题很好解决,用正则\s很容易搞定。 不管怎么说File Separator已经在ruby里是一个常量存在。但是newline却只能硬编码成"\n"或"\r\n" 为什么没有一个这样的常量:String::NEWLINE 在windows 返回 "\r\n",*nix返回 "\n"
不知道上面上面说的两个问题ruby里有没有一个优雅的解决方式呢? 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2009-06-16
最后修改:2009-06-16
首先先纠正LZ的一个笔误。
Windows下的换行符是\r\n *nix下是\n 第二个问题有点冤枉ruby了 \n在ruby中(perl也一样)表示换行符, 而不是实际的'\n'(ascii 10) 在windows中它就是'\r\n' |
|
返回顶楼 | |
发表时间:2009-06-16
icefishc 写道 首先先纠正LZ的一个笔误。
Windows下的换行符是\r\n *nix下是\r 第二个问题有点冤枉ruby了 \n在ruby中(perl也一样)表示换行符, 而不是实际的'\n'(ascii 10) 在windows中它就是'\r\n' '\n' 10 换行(newline) '\r' 13 回车(return) 也可以表示为'\x0a'和'\x0d'.(16进制) 在windows系统下,回车换行符号是"\r\n".但是在Linux等系统下是没有"\r"符号的。 |
|
返回顶楼 | |
发表时间:2009-06-16
icefishc 写道 首先先纠正LZ的一个笔误。
Windows下的换行符是\r\n *nix下是\r 第二个问题有点冤枉ruby了 \n在ruby中(perl也一样)表示换行符, 而不是实际的'\n'(ascii 10) 在windows中它就是'\r\n' perl我不知道,但是ruby里的"\n"就是ascii 10,看下面代码: irb(main):034:0> "\n".size => 1 irb(main):035:0> p "\n"[0] 10 |
|
返回顶楼 | |
发表时间:2009-06-16
最后修改:2009-06-16
file = File.new("temp.txt", "w") file.print("hello~~\n"); file.print("hello~~\n"); file.print("hello~~\n"); file.close 哦 这个是输出时才能体现出来. 你打印到文件里看一下. 我把我的测试结果也传上来了 |
|
返回顶楼 | |
发表时间:2009-06-16
Hooopo 写道 icefishc 写道 首先先纠正LZ的一个笔误。
Windows下的换行符是\r\n *nix下是\r 第二个问题有点冤枉ruby了 \n在ruby中(perl也一样)表示换行符, 而不是实际的'\n'(ascii 10) 在windows中它就是'\r\n' '\n' 10 换行(newline) '\r' 13 回车(return) 也可以表示为'\x0a'和'\x0d'.(16进制) 在windows系统下,回车换行符号是"\r\n".但是在Linux等系统下是没有"\r"符号的。 -_-||| 手滑了..... 是\n |
|
返回顶楼 | |
发表时间:2009-06-16
icefishc 写道 file = File.new("temp.txt", "w") file.print("hello~~\n"); file.print("hello~~\n"); file.print("hello~~\n"); file.close 哦 这个是输出时才能体现出来. 你打印到文件里看一下. 我把我的测试结果也传上来了 file = File.new("temp.txt", "w") file.print("hello~~\n"); file.print("hello~~\n"); file.print("hello~~\n"); file.close File.open("temp.txt","r") do |f| p f.read end 结果: "hello~~\nhello~~\nhello~~\n" |
|
返回顶楼 | |
发表时间:2009-06-16
最后修改:2009-06-16
Hooopo 写道 "hello~~\nhello~~\nhello~~\n" :( 这个是ruby输出的问题, 他会把换行输出成\n。 不是真实的内用 #include <cstdio> int main(){ FILE *input = fopen("temp.txt", "r"); for(int i = 0; i < 9; i++) printf("%d\n", fgetc(input)); } output: 104 101 108 108 111 126 126 13 10 或者你拿记事本打开看一下就知道了 |
|
返回顶楼 | |
发表时间:2009-06-16
icefishc 写道 Hooopo 写道 "hello~~\nhello~~\nhello~~\n" :( 这个是ruby输出的问题, 他会把换行输出成\n。 不是真实的内用 #include <cstdio> int main(){ FILE *input = fopen("temp.txt", "r"); for(int i = 0; i < 9; i++) printf("%d\n", fgetc(input)); } output: 104 101 108 108 111 126 126 13 10 或者你拿记事本打开看一下就知道了 记事本看不到的.. 这么说上面同样的程序在linux下会产生这样结果?: output: 104 101 108 108 111 126 126 10 |
|
返回顶楼 | |
发表时间:2009-06-16
Hooopo 写道 output: 104 101 108 108 111 126 126 10 是的 |
|
返回顶楼 | |