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
  1. s = <<e
  2. a

  3. bc
  4. ea
  5. da

  6. e
  7. s.gsub!(/\n\n/){"\\"}
  8. s.gsub!(/\n/){"\\"}
  9. 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 编辑
  1. str = ''
  2. open('1.txt', 'r') { |f|
  3.   str = f.read
  4.   str.gsub!(/(?: *\n *)+/, '/')
  5.   str.gsub!(/(?:^\/|\/$)/, '')
  6. }
  7. print str
复制代码

作者: 赛露休斯    时间: 2010-9-6 03:36
回复 紫苏 的帖子
用了以后发现文本中的所有 " 号会变成 \"

   




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1