【问题标题】:How to remove line break when reading files in Ruby在 Ruby 中读取文件时如何删除换行符
【发布时间】:2015-12-24 13:42:38
【问题描述】:

我正在尝试从打印中删除括号 [] 和新行 \n

我的代码如下:

name1 = File.readlines('first.txt').sample(1)
name2 = File.readlines('middle.txt').sample(1)
name3 = File.readlines('last.txt').sample(1)

name = print (name1.strip 
    print name2.strip 
    print name3.strip)

puts name

我希望输出看起来像 JoshBobbyGreen。 但是,它看起来像:

[\"Josh\\n\"][\"Bobby\\n\"][\"Green\\n\"]

我尝试过使用.gsubchompsplit,但也许我用错了。

【问题讨论】:

    标签: ruby line newline file-read chomp


    【解决方案1】:

    还要考虑 File.readlines 中的可选 chomp 参数

    File.readlines("/path/to/file", chomp: true)
    

    【讨论】:

      【解决方案2】:

      为了避免多余的\n,我宁愿使用split

      File.read('first.txt').split("\n") # double quotes are important!
      

      为了避免让数组使用不带参数的sample方法:

      File.read('first.txt').split("\n").sample
      

      【讨论】:

        【解决方案3】:

        puts 在输出的末尾添加一个换行符。打印没有。 使用打印。它可能会解决您的问题。另外,请使用 .strip。

        "\tgoodbye\r\n".strip   #=> "goodbye"
        

        【讨论】:

        • 我收到此错误 fullname.rb:36:in strip': 来自 yahoo.rb:36:in <main>'的参数数量错误(1 代表 0)(ArgumentError)
        【解决方案4】:

        您的代码有一个小问题,导致您遇到的结果。

        当你使用时:

        name1 = File.readlines('first.txt').sample(1)
        

        返回值 ISN'T 是一个字符串,而是一个包含 1 个随机样本的数组。即:

        ["Jhon"]
        

        这就是为什么在使用 print 时会得到输出 ["Jhon"]

        既然你期望(并且更喜欢)一个字符串,那么试试这个:

        name1 = File.readlines('first.txt').sample(1)[0]
        name2 = File.readlines('middle.txt').sample(1)[0]
        name3 = File.readlines('last.txt').sample(1)[0]
        

        或:

        name1 = File.readlines('first.txt').sample(1).pop
        name2 = File.readlines('middle.txt').sample(1).pop
        name3 = File.readlines('last.txt').sample(1).pop
        

        或者,可能是你的意思,没有参数,sample 将返回一个对象而不是一个数组:

        name1 = File.readlines('first.txt').sample
        name2 = File.readlines('middle.txt').sample
        name3 = File.readlines('last.txt').sample
        

        另外,在打印时,如果您创建一个字符串来包含您想要的所有空格和格式会更好。即:

        name1 = File.readlines('first.txt').sample(1).pop
        name2 = File.readlines('middle.txt').sample(1).pop
        name3 = File.readlines('last.txt').sample(1).pop
        
        puts "#{name1} #{name2} #{name3}."
        # or
        print "#{name1} #{name2} #{name3}."
        

        【讨论】:

          【解决方案5】:

          如果:

          name1 = ["Josh\n"]
          name2 = ["Bobby\n"]
          name3 = ["Green\n"]
          

          只是:

          puts [name1, name2, name3].map { |a| a.first.strip }.join('')
            #=> JoshBobbyGreen
          

          【讨论】:

          • 我使用&:strip 准确吗?因为我得到了in map undefined method strip, for...
          • 对不起,我不关注。你运行这个有异常吗?我确定代码没问题。顺便说一句,map(&:strip) 产生与map { |s| s.strip } 相同的结果。
          • 我不确定&:strip 是不是一个错字
          • 但它说“在地图中:未定义的方法'strip'”
          • 这很奇怪。 name1name2name3 是字符串,而 Class 字符串肯定有一个方法 strip。使用 Ruby v2.2 的代码对我来说运行良好(我不认为这可能是版本问题)。你是否使用了我的定义name1name2name3?如果没有,我需要知道这些变量的值来诊断问题。
          【解决方案6】:
          puts %w(first middle last).map { |e| IO.readlines("#{e}.txt").sample.strip }.join
          

          【讨论】:

          • 如果可行,我们将不胜感激。 :)
          猜你喜欢
          • 1970-01-01
          • 2015-06-13
          • 1970-01-01
          • 2017-07-27
          • 1970-01-01
          • 1970-01-01
          • 2011-10-08
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多