Project1
标题:
请教编辑字符串有关的问题
[打印本页]
作者:
赛露休斯
时间:
2010-9-5 17:28
标题:
请教编辑字符串有关的问题
本帖最后由 赛露休斯 于 2010-9-6 02:47 编辑
我有一个记事本上面有这样6行,其中第2行和第6行为空行,其中第3行的行首和行尾都有空格
ab c
de12
fg()
q35ty
现在我打算编辑一下:
1、在行尾处加上 / 号
2、如果是 空行 或是 最后一个非空行 则不加 / 号
3、去掉所有换行
4、行首或行尾有空格时去掉空格,行间的空格则保留
使最终的字符串为 abc/de12/fg()/q35ty
作者:
IamI
时间:
2010-9-5 17:29
s = File.open("x.txt").read
s.gsub! (/\n/) {"/"}
……没测试
作者:
赛露休斯
时间:
2010-9-5 17:45
回复
IamI
的帖子
谢谢,测试成功
才发现主楼发帖时没有考虑到一种情况,现在补上,就是当该行为空行时直接去掉换行,也就是说文本中的空行直接去掉,后面不加 /
作者:
逸豫
时间:
2010-9-5 18:14
s = <<e
a
bc
ea
da
e
s.gsub!(/\n\n/){"\\"}
s.gsub!(/\n/){"\\"}
s[-1] = "" if s[-1] == 92
复制代码
作者:
赛露休斯
时间:
2010-9-5 18:26
本帖最后由 赛露休斯 于 2010-9-5 18:27 编辑
用了楼上的方法,最终返回了 abc/de12/fg()/q35ty/
最后一个非空行q35ty后面多了一个 / 号,没有满足主楼的第2个条件
另外,如果直接用\n\n替换,又如果替换内容是连续2个以上空行比如\n\n\n时发现会多出一个 / 号
作者:
后知后觉
时间:
2010-9-5 18:56
用 split 把 read的 String 弄成数组.
再delete ""
循环数组的 0...size
作者:
六祈
时间:
2010-9-5 21:51
本帖最后由 六祈 于 2010-9-6 00:39 编辑
file = open("xxx.txt" , "r")
str = file.readlines.collect{|line| line.chomp}.select{|line| line.index(/\S/) != nil}.join("/")
file.close
作者:
赛露休斯
时间:
2010-9-5 22:02
回复
六祈
的帖子
p str 后发现是一排 true/true/true/true/true 这样的
作者:
逸豫
时间:
2010-9-5 22:10
s = <<e
a
bc
ea
da
e
s.gsub!(/\n+/){"\\"}
s[-1] = "" if s[-1] == 92
print s
作者:
赛露休斯
时间:
2010-9-5 22:24
回复
逸豫
的帖子
发现直接使用{"\\"}是符合条件2,但当我把{"\\"}换成自己需要的{"/"}后,返回的字符串最后一个非空行后面会有一个 / ,也就是da/,不满足条件2了
作者:
后知后觉
时间:
2010-9-6 00:36
本帖最后由 后知后觉 于 2010-9-6 00:39 编辑
把 92 改成 47 或 "/"
s.gsub!(/\n+/){"/"}
s[-1] = "" if s[-1] == 47
or
s.gsub!(/\n+/){"/"}
s[-1] = "" if s[-1] == "/"
作者:
赛露休斯
时间:
2010-9-6 02:44
7楼的脚本可以成功了,然后9L脚本那里改成47后也能达到类似效果
刚在实际处理文本时发现自己漏考虑到一个条件,就是当该行行首或行尾有空格时去掉空格,其它行间的空格依然保留
作者:
紫苏
时间:
2010-9-6 03:22
本帖最后由 紫苏 于 2010-9-6 03:40 编辑
str = ''
open('1.txt', 'r') { |f|
str = f.read
str.gsub!(/(?: *\n *)+/, '/')
str.gsub!(/(?:^\/|\/$)/, '')
}
print str
复制代码
作者:
赛露休斯
时间:
2010-9-6 03:36
回复
紫苏
的帖子
用了以后发现文本中的所有 " 号会变成 \"
欢迎光临 Project1 (https://rpg.blue/)
Powered by Discuz! X3.1