打印

[问题求助] 怎样去掉空格?

怎样去掉空格?

大家好,我现在需要将下列左边的格式转换为右边的格式.
左边的格式是这样的:字母前面有一个空格,字母和后面的数字之间也有一个或两个空格,数字后面还有一个或两个空格.
CB 859-2004 =>CB 859-2004
CB/T 145-1994 =>CB/T 145-1994
CBM 1001-1981 =>CBM 1001-1981
GB 2508-1989 =>GB 2508-1989
GB/T 2506-2005 =>GB/T 2506-2005
右边的格式是去掉字母前面和数字后面的空格,只在字母和数字之间留一个空格.
我的思路是先用正则表达式将空格全部删除,然后在字母和数字之间插入一个空格,可是这里的字母判断有四种类型:CB,CB/T,CBM,GB,GB/T,我不知道如何判断,望高手指教.
这里我是将原始格式的内容(即上面说的左边的)存在了一个txt文件中,希望将转换好格式的内容(即上面说的右边的)存在另一个txt文件中.希望得到大家的帮助,十分谢谢

[ 本帖最后由 liupei520520 于 2008-5-16 11:36 编辑 ]
本帖最近评分记录

TOP

文件的操作, 请参考一些教程.

"  CB   859-2004  ".split(' ').join(' ') #=>"CB 859-2004"


TOP

你会模式匹配吗?
用那个也可以完成你的需要。

TOP

str.sub(/^[ ]*/,'')
本帖最近评分记录

TOP

引用:
原帖由 5swords 于 2008-5-14 14:27 发表
文件的操作, 请参考一些教程." CB 859-2004 ".split(' ').join(' ') #=>"CB 859-2004"
这位正解,当然也可以先用
str.lstrip
去掉左边的空格
然后再
str.gsub(/[ ]{2}/," ")
把字母到数字之间的两个空格变为一个空格,如果是一个空格,那正好也就是你需要的。呵呵。
本帖最近评分记录

TOP

谢谢各位的帮助,我采用了4楼提供的方法,的确达到了预计的表达效果,可是有个问题,就是为什么是倒序输出呢?原始的顺序是:
GB/T 5312-1999
CB/T 3926-1999
CB/T 3780-1997
CB/T 3590-1994
可是格式调整后的顺序是:
CB/T 3590-1994
CB/T 3780-1997
CB/T 3926-1999
GB/T 5312-1999
也就是第一个跑到最后一个了。
因为我是分别输入一个txt文本,然后将格式调整好的以另一个文本输出的,因为还有其他用途,不希望倒序输出,请各位再帮我看看,我是ruby的超级菜鸟,但我正在努力学好它。

TOP

这个, 要看源码才知道问题. 你贴出来看看.

TOP

file_cb=File.open("#{Dir.getwd}/test.txt")
file_cb.each{|line|line_no=file_cb.lineno.to_s.rjust(4)
re=/^[ ]*/
line.gsub!(re,"")
File.new('d:\test\test1.txt',"a").puts line
}
file_cb.close
备注:test.txt为格式未调整的文件,即:
GB/T 5312-1999
CB/T 3926-1999
CB/T 3780-1997
CB/T 3590-1994
test1.txt为调整好格式后保存的文档,输出的内容为:
CB/T 3590-1994
CB/T 3780-1997
CB/T 3926-1999
GB/T 5312-1999
可以看出结果是倒着输出了,我希望仍按原先的顺序输出。不知是什么原因,关于正则表达式,我不是很熟练,希望给与指点!

TOP



file_cb=File.open("#{Dir.getwd}/test.txt")
file_out=File.new('d:\test\test1.txt',"a") #added
file_cb.each{|line|line_no=file_cb.lineno.to_s.rjust(4)
re=/^[ ]*/
line.gsub!(re,"")
file_out.puts line #updated
}
file_cb.close


和正则好象没关系啊.

[ 本帖最后由 5swords 于 2008-5-16 11:29 编辑 ]

TOP

re=/^[ ]*/,这个不是正则表达式吗?我一直认为是呢?那这是什么匹配呢?麻烦你告诉我,我是刚接触ruby语言,Ruby 语言入门教程 v1.0还没有全看完。另外输出结果为什么是倒着输出的?可以有什么方法使它按原来的顺序输出吗?谢谢!

TOP

我上面的代码已经改过了,是写文件时打开多次的原因.

TOP

非常感谢5swords的热心帮助, 输出结果正确了。对于是因为多次打开文件的原因,我不是很清楚,就算是每打开一次,写入数据时也是从上往下排列,从原始文件中取出第一行进行调整格式,然后放到输出文件的第一行,然后是第二行,怎么会最先排好格式的第一行跑到最后了呢?
本帖最近评分记录

TOP

每次打开都没关闭, 是系统关的.

那么RUBY在关闭的时候按什么顺序来, 那是不知道的.(很可能就是反着来的,最近打开的文件先关掉.)

你试试每次打开后关闭,应该也会正确(没试过).

不过, 本来就应该在循环外打开文件,写好了关掉文件. 上面代码里我也没关掉, 寒一个先.
本帖最近评分记录

TOP

对于文件的打开和关闭那时操作系统的事了。
我们应该自己保证一些事情,才年写出很好的代码

TOP

2008-11-22 20:06 Crawled by CCBot/1.0 (+http://www.commoncrawl.org/bot.html) @38.103.63.61