代码之家  ›  专栏  ›  技术社区  ›  Ahmad Ramdani

将输出写入文件

  •  0
  • Ahmad Ramdani  · 技术社区  · 15 年前

    我的ruby代码类似于:

    ok.rb
    hasil = "input operator salah"
     puts hasil
    
    exec("sort ok.rb > output.txt") if fork.nil?
    

    它把所有的代码都写进 output.txt . 不过,我只想 hasil 要写入的结果 输出端 . 我应该如何修改这样一个最终结果的代码?

    2 回复  |  直到 15 年前
        1
  •  2
  •   Jon Skeet    15 年前

    你已经执行了 sort 接受命令 ok.rb 作为 输入 . 相反,你想跑 RB 并采取它的 输出 作为要排序的输入。

    在不了解鲁比的情况下,我想这应该是:

    exec("ruby ok.rb | sort > output.txt") if fork.nil?
    

    我刚刚在我的Linux桌面上尝试过这个,它运行得很好:

    RB:

    hasil = "input operator salah"
    puts hasil
    

    RB:

    exec(“ruby ok.rb sort>output.txt”)如果fork.nil?
    

    执行:

    $ ruby other.rb
    $ cat output.txt
    input operator salah
    

    (您只提供了一行输出,因此没有太多要排序的内容。)

        2
  •  1
  •   sepp2k    15 年前

    最干净的方法是更改前面的代码,使其不直接生成到stdout的输出,而是只生成字符串,然后从ruby对其进行排序并将其打印到文件中。例如:

    hasil = "input operator salah"
    
    File.open("output.txt", "w") do |f|
      f.puts hasil.split("\n").sort.join("\n")
    end
    

    如果用Ruby排序替换UNIX排序不是一个选项(可能是因为排序只是一个示例,而实际上,您正在向一个不容易被Ruby替换的不同应用程序进行管道),您可以直接将代码写入应用程序,而不是写入STDUT。你甚至可以编写足够通用的代码来编写任何IO。

    def generate_output(out)
      hasil = "input operator salah"
      out.puts hasil
    end
    
    # If you decide to output the text directly to stdout (without sorting)
    generate_output(stdout)
    
    # If you instead want to pipe to sort:
    IO.popen("sort > output.txt", "w") do |sort|
      generate_output(sort)
    end