- 浏览: 335187 次
- 性别:
- 来自: 北京
文章分类
最新评论
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里有没有一个优雅的解决方式呢?
评论
14 楼
Hooopo
2009-06-16
| ・´ェ`・|
13 楼
night_stalker
2009-06-16
Matz 写道
In Ruby, we use / for path separator to enhance script portability. You can use File::ALT_SEPARATOR but it's a second class citizen in Ruby world.
Issue 被 reject 了……
建议将 monkey patch 代码加入自己的 support 中,并在说明中引用 Matz 的话 | ・´ェ`・|
12 楼
Hooopo
2009-06-16
night_stalker 写道
这个 SEPARATOR 确实是个问题,好一点的方法是重新定义 File.join ……
刚刚提交了 Issue,不知道会不会有人理。
if RUBY_PLATFORM =~ /mswin/ class << File alias fvckjoin join def join a, b fvckjoin(a,b).gsub '/','\\' end end end
刚刚提交了 Issue,不知道会不会有人理。
if RUBY_PLATFORM =~ /mswin/ class << File alias fvckjoin join def join *args fvckjoin(*args).gsub '/','\\' end end end
File.join可以多个参数。。
11 楼
night_stalker
2009-06-16
这个 SEPARATOR 确实是个问题,好一点的方法是重新定义 File.join ……
刚刚提交了 Issue,不知道会不会有人理。
if RUBY_PLATFORM =~ /mswin/ class << File alias fvckjoin join def join a, b fvckjoin(a,b).gsub '/','\\' end end end
刚刚提交了 Issue,不知道会不会有人理。
10 楼
Hooopo
2009-06-16
icefishc 写道
Hooopo 写道
output: 104 101 108 108 111 126 126 10
是的
这么看来ruby的\n还很神奇呢,,,哇咔咔
9 楼
icefishc
2009-06-16
Hooopo 写道
output: 104 101 108 108 111 126 126 10
是的
8 楼
Hooopo
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
7 楼
icefishc
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
或者你拿记事本打开看一下就知道了
6 楼
Hooopo
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"
5 楼
icefishc
2009-06-16
Hooopo 写道
icefishc 写道
首先先纠正LZ的一个笔误。
Windows下的换行符是\r\n *nix下是\r
第二个问题有点冤枉ruby了
\n在ruby中(perl也一样)表示换行符, 而不是实际的'\n'(ascii 10)
在windows中它就是'\r\n'
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
4 楼
icefishc
2009-06-16
file = File.new("temp.txt", "w") file.print("hello~~\n"); file.print("hello~~\n"); file.print("hello~~\n"); file.close
哦 这个是输出时才能体现出来. 你打印到文件里看一下.
我把我的测试结果也传上来了
3 楼
Hooopo
2009-06-16
icefishc 写道
首先先纠正LZ的一个笔误。
Windows下的换行符是\r\n *nix下是\r
第二个问题有点冤枉ruby了
\n在ruby中(perl也一样)表示换行符, 而不是实际的'\n'(ascii 10)
在windows中它就是'\r\n'
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
2 楼
Hooopo
2009-06-16
icefishc 写道
首先先纠正LZ的一个笔误。
Windows下的换行符是\r\n *nix下是\r
第二个问题有点冤枉ruby了
\n在ruby中(perl也一样)表示换行符, 而不是实际的'\n'(ascii 10)
在windows中它就是'\r\n'
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"符号的。
1 楼
icefishc
2009-06-16
首先先纠正LZ的一个笔误。
Windows下的换行符是\r\n *nix下是\n
第二个问题有点冤枉ruby了
\n在ruby中(perl也一样)表示换行符, 而不是实际的'\n'(ascii 10)
在windows中它就是'\r\n'
Windows下的换行符是\r\n *nix下是\n
第二个问题有点冤枉ruby了
\n在ruby中(perl也一样)表示换行符, 而不是实际的'\n'(ascii 10)
在windows中它就是'\r\n'
发表评论
-
新博客
2012-04-23 20:47 1734https://db-china.org -
Ruby Verbose Warning Mode
2011-10-16 14:48 2051Ruby在很多方面是一个更优雅的Perl,从Perl社区继承了 ... -
Pattern Match In Ruby
2011-10-07 01:17 2006最近看了一些Erlang,模式匹配是个好东西,简单的sum函数 ... -
Draper: View Models for Rails
2011-10-07 01:19 2268Draper是一个Ruby gem,它让Rails model ... -
Active Record batch processing in parallel processes
2011-10-07 01:20 2270Active Record 提供 find_each来分批处理 ... -
最轻量级的Ruby后台任务
2011-08-04 16:47 3860普通情况下ruby调用系统命令行的过程是堵塞的,无论是用sys ... -
test
2011-07-15 19:59 0test -
fiber
2011-06-17 09:37 0挖坑,待填。。 1.用到fiber.alive?、fiber ... -
Identity Map in Rails3.1
2011-06-12 18:29 2737Identity Map是Rails3.1的又 ... -
xx00
2011-06-06 03:40 0https://github.com/ngmoco/cache ... -
挖坑1
2011-06-06 02:17 0cache money 源码 替换memcache为redis ... -
websocket demo
2011-06-04 20:44 2054地址:https://github.com/hooopo/we ... -
ruby GC
2011-06-02 04:24 0http://blog.csdn.net/lijun84/a ... -
reduce method missing call stack with dynamic define method
2011-04-22 22:54 1592method_missing是ruby里面一个非常cool的h ... -
Autocompete with Trie
2011-04-09 04:04 1674像微薄里面用户输入一 ... -
用imagemagick和tesseract-ocr破解简单验证码
2011-04-09 01:31 18926工具:imagemagick + tesseract-ocr ... -
OAuth gem for rails,支持豆瓣,新浪微薄,腾讯微博,搜狐微博,网易微博
2011-03-26 03:13 4480地址:https://github.com/hooopo/oa ... -
用jmeter模拟amf请求进行压力测试
2010-12-16 16:56 30221.获取amf二进制包: 在本地建立proxy,端口为888 ... -
Memoization in Ruby
2010-11-14 11:42 1210这里的Memoization就是将ruby的方法或lambda ... -
整理了一下2008-2010的RubyHeroes博客列表
2010-10-07 02:26 2827Bryan Helmkamp(webrat作者)https:/ ...
相关推荐
count blank,table and newline.cpp
本资料"java-IO.rar_File and java"聚焦于Java I/O流在读写文件以及文件替换方面的实践应用。 一、Java I/O 流概述 Java I/O流模型基于流的概念,流可以看作是数据的序列,可以从源(如文件或网络连接)读取,也...
Regular expression popup menu had a double entry for the Tab character (\t) and no entry for the Newline character (\n) Insert column value highlighting did not work when using a RETURNING INTO clause...
"single-trailing-newline" 是一个针对这个目标而设计的开源库,它专注于确保字符串在结束时拥有一个单一的尾随换行符。这个库的出现解决了不同开发者在编写代码时对换行符处理不一致的问题,尤其是在多人协作项目中...
Regular expression popup menu had a double entry for the Tab character (\t) and no entry for the Newline character (\n) Insert column value highlighting did not work when using a RETURNING INTO clause...
`FileReadWrite with text aread output.zip_In Writing_file readers`这个标题暗示了我们将会探讨如何在Java中读取和写入文本文件。让我们详细地了解这个主题。 首先,Java提供了一些内置的类来处理文件I/O操作,...
在消息框中换行输出信息,C#源代码MessageBox.Show("编程技巧大全系列包括:" + Environment.NewLine + "Visual C# 2008编程技巧大全:" + Environment.NewLine + "Visual Basic 2008编程技巧大全:" + Environment...
在Android系统中,`File`类是用于操作文件和目录的基本工具。它是Java.io.File类的一个子类,但在Android环境中,有一些特定的注意事项和最佳实践。以下是对`File`类在Android中的使用进行的详细说明。 ### 文件...
在Java编程语言中,`File`类是处理文件和目录的核心类,位于`java.io`包下。这个类提供了一系列的方法来操作文件和目录,包括创建、删除、重命名、获取属性等。当我们谈论`File`类与IO流的结合时,主要是指使用`File...
bufferedWriter2.newLine(); // 添加换行符 } // 关闭流 bufferedWriter2.close(); bufferedReader1.close(); ``` 7. **异常处理**: 在实际编程中,上述操作可能抛出`IOException`,因此应使用try-catch...
bw.newLine(); bw.close(); ``` 4. **文件的读写权限** 在Android 6.0(API级别23)及以上版本,应用需要在运行时请求写入外部存储的权限。可以使用`ActivityCompat.checkSelfPermission()`检查权限,` ...
MySQL的`LOAD DATA INFILE`语句是一种高效的数据批量导入方法,它的性能通常是单条`INSERT`语句的几十倍,特别适用于大数据量的导入。从Mycat 1.4版本开始,它开始支持MySQL的压缩协议,这对于处理大量数据和大结果...
For example, `IFS=$'\n'` sets the separator to newline characters. - **Shell Name**: `$SHELL` returns the name of the shell that is currently executing the script. - **Language**: `$LANG` specifies ...
Print newline, word, and byte counts for each FILE, and a total line if more than one FILE is specified. With no FILE, or when FILE is -, read standard input. -c, --bytes print the byte counts -m, -...
File file1 = new File("file1.txt"); File file2 = new File("file2.txt"); File outputFile = new File("mergedFile.txt"); try (BufferedReader reader1 = new BufferedReader(new FileReader(file1)); ...
开源库 `is-newline` 正是针对这一需求而诞生的,它专注于判断一个给定的字符串是否包含换行符。这个小巧且高效的库能够帮助开发者在处理文本时更加精准地识别和操作换行。 `is-newline` 库的核心功能在于其简单的...
然而,通信和协作是受到高度重视的业务实践。根据 Gallup 报告,在全球范围内,缺乏协作和敬业精神导致的生产力损失大约为 7 万亿美元。当今时代,分散在不同地理位置处的移动员工使得团队合作更具挑战性。...
(1)error C2001: newline in constant 编号:C2001直译:在常量中出现了换行。错误分析: 1.①字符串常量、字符常量中是否有换行。2.②在这句语句中,某个字符串常量的尾部是否漏掉了双引号。3.③在这语句中,某个...
在Android系统中,文件输入/输出(File Input/Output,简称FileIO)是应用程序与本地存储交互的基础。本文将深入探讨Android平台上的文件操作,包括读取、写入、创建和管理文件,以及如何利用驱动程序进行高效的数据...
NewLine.zip