2011-08-19 64 views
0

我試圖做的,我有一個文本文檔以下分隔符:如何刪除後的所有文本和包括紅寶石

  1. 導入.txt文件使用紅寶石,由線分割它,推它到一個數組
  2. 刪除數組中所有字符串後面的所有字符
  3. 將每個數組元素寫回新文本文件中的新行。

我想使用紅寶石做這個,我已經有了第一步工作,但我無法通過第二步。我現在用一串字符串卡住了。任何幫助將不勝感激。

+1

你想要什麼後刪除所有字符? – dave

回答

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

假設你有一個文本文件是這樣的:

aaa 
bbb 
BEGIN 
xxx 
xxx 
END 
ccc 

有一個「髒」一點紅寶石欺騙你可以用觸發器操作使用方法:

# 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 
+0

他們正在尋找切割每一行:「按行分割,並將其推送到數組2)刪除所有字符後,包括數組中的所有字符串的特定分隔符」 –

+0

@mu - Riiight..Oops ..好。那麼他們下次更好地描述他們的問題,所以我不提供無用的答案:)雖然它仍然是一個巧妙的技巧。我免費在這裏。 – Casper

+0

它被稱爲觸發器操作符,不是範圍操作符。 –

0

您不必預先讀取整個文件。只需逐行處理。甚至還有一個ruby的命令行開關(-n)。

說你的分隔符是|

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

或(使用-p開關),

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