2015-10-05 20 views
-1

我有一個包含文本塊的文件。 (見https://github.com/rochford77/hw2_rochf1rt/blob/master/ClassList)。在文件的新行中創建單詞陣列

我需要在空格之間的每個代碼塊都是自己的數組,而不是字符數組。

我可以

in_file_array = IO.readlines('filename.txt') 

我有三個選項,其中沒有我可以找出讀取的文件中的行由行,作爲字的陣列。我只需要一小段時間內數組中的每個文本塊,因此我可以將一些信息打印到一個新文件中。

  • 選項1是要擁有一個新行上面的代碼停下來,給我的陣列,讓我惹它,然後就行了,直到下一個之後的下一個循環的簡歷,補充我的數組新信息。
  • 我也可以製作一堆數組,每行之間有一個數組,併爲它們指定所有不同的名稱。
  • 我可以將它們作爲一個巨大的數組,然後將它們切成幾行之間的較小數組。

我似乎無法得到任何上述工作。有人可以提供一些幫助嗎?

爲了澄清我需要的是包含類似的數組:

array1 = [PH03, ----, fine1l, howar1s,...] 
#do something to array 
array1 = [MT03, ----, fine1l, clega1s....] 

但是從文件中讀取。

+2

歡迎來到Stack Overflow。在尋求編程問題的幫助時,我們希望您向我們展示您嘗試的內容。堆棧溢出是關於幫助調試代碼的特定問題,而不是爲您編寫代碼,或者在編寫任何代碼之前建議如何去做。如果您還沒有嘗試過,請在提問前進行。如果你已經嘗試了,請告訴我們你寫的是什麼,並解釋它爲什麼不做你想要的。 –

+0

歡迎來到StackOverflow。請參閱stackoverflow.com/help/how-to-ask和stackoverflow.com/help/mcve。大多數情況下,我們需要您發佈您編寫的代碼和結果。 – Prune

+0

另外,'readlines'的使用是不可擴展的。一個大文件會導致整個文件被拖入內存中,速度很慢。請在問題本身中顯示一個輸入文件的小例子,而不是要求我們去單獨的網站。如果/當鏈接腐爛時,你的問題對將來尋找類似問題答案的人將無用。 –

回答

0

讓我們創建了一些數據文件:

text = <<_ 
PH03 
---- 
fine1l 
howar1s 

MT03 
---- 
fine1l 
clega1s 
targa1d 

PH05 
---- 
howar1m 

EN01 
---- 
howar1c 
fine1l 
tai1db 
_ 

FName = "my_file" 

IO.write(FName, text) 
    #=> 111 

構建所需的陣列的最有效的方法是做它作爲文件被讀取,而不是第一個文件讀入一個字符串或數組。爲此,它的方便閱讀與IO:foreach返回一個枚舉形式的文件:

IO.foreach(FName).with_object([[]]) {|w,a| w.strip! == '' ? a << [] : a[-1] << w} 
    #=> [["PH03", "----", "fine1l", "howar1s"], 
    # ["MT03", "----", "fine1l", "clega1s", "targa1d"], 
    # ["PH05", "----", "howar1m"], 
    # ["EN01", "----", "howar1c", "fine1l", "tai1db"]] 

編輯: @ theTinMan的指教可以實現如下:

IO.foreach(FName, $/+$/).map { |s| s.strip.lines.map(&:strip) } 

注意IO.foreach(FName, $/+$/)也返回一個枚舉器。

+0

雖然'$/+ $ /'是定義兩個行結束符的好方法(也很難快速找到),但使用鏈接的'map'將會否定使用'foreach'的好處,因爲它會導致文件內容在返回任何東西之前被緩衝。 –

+0

@theTinMan,在後一種解決方案中,我不明白爲什麼文件內容會被緩衝。 「行」(結尾爲「\ n \ n」')由'foreach'逐一讀取並傳遞給'map',它將字符串轉換爲它將返回的數組元素。一旦塊變量's'被分配到下一行,上一行是否可用於垃圾收集? –

0

Ruby的IO類有幾種方法可以讓我們定義行尾字符在文件中找到的字符串,該字符串是定義要返回的字符串結尾的字符序列。

通常它是「\ n」,但「\ n \ n」會以塊,塊,段落或任何你想調用它們的方式返回文件。

有關更多信息,請參閱「How to read a file by paragraphs or chunks into arrays」。