如何删除ruby中包含分隔符的所有文本

时间:2011-08-19 23:33:13

标签: ruby

我正在尝试使用我拥有的文本文档执行以下操作:

  1. 使用ruby导入.txt文件,逐行拆分,然后将其推送到数组
  2. 删除阵列中所有字符串的特定分隔符之后的所有字符
  3. 将每个数组元素写回新文本文件中的新行。
  4. 我正在尝试使用ruby这样做,我已经完成了第一步,但我无法通过第二步。我现在被一系列字符串困住了。任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:1)

这是让你开始做你想做的事情的东西。你可能想让它变得更紧凑,但我把它弄得很冗,所以你可以按照流程

path_to_file = '/dir_path_to_file'
delimiter = ':'

strings = %w(aa:aa bb:bb cc:cc dd:dd) # this is some test data. replace with your array read in from file

# Open file for writing
File.open(path_to_file, 'w') do |file|
  strings.each do |string|

    index_of_delimiter = string.index(delimiter)

    stripped_string = string.slice(0..index_of_delimiter - 1)

    # append line to file with \n for new line
    file << stripped_string << "\n"

   end
end

答案 1 :(得分:1)

假设你有一个这样的文本文件:

aaa
bbb
BEGIN
xxx
xxx
END
ccc

你可以使用触发器操作符的“脏”小Ruby技巧:

# Load file
lines = File.readlines("the_text_file")

# Reject all lines between BEGIN and END
lines.reject! { |line| true if (line =~ /^BEGIN/)..(line =~ /^END/) }

# Output result
puts lines

输出:

aaa
bbb
ccc

答案 2 :(得分:0)

您不必提前阅读整个文件。只需逐行处理。甚至还有一个ruby的命令行开关(-n)。

说你的分隔符是|

cat inputfile | ruby -ne 'puts $_.sub /\|.*/, ""' > outputfile

或(使用-p开关),

cat inputfile | ruby -pe '$_.sub! /\|.*/, ""' > outputfile