2016-03-21 3 views
0

Ich versuche, eine Textdatei zu lesen und dann ihre einzelnen Wörter in einem Array zu speichern. Aber ich finde keinen Weg, es nach Worten aufzuteilen.Brechen Textdatei in separate Wörter und speichern in Array in Ruby

text_file = [] 

File.open(file, "r") do |f| 
    f.lines.each do |line| 
    text_file << line.split.map(&:to_s) 
    end 
end 

Die obige Methode erstellt ein Array von Arrays, die alle Wörter in einer einzelnen Zeile in einem Array und so weiter speichert.

Gibt es eine Möglichkeit, in der das Array text_file ein einziges Array aller Wörter enthalten kann?

+0

Wenn die Datei nicht sehr groß ist, könnte man "Schluck" es in einen String, dann gilt [String # scan] (http: // ruby -doc.org/core-2.2.0/String.html#method-i-scan): 'File.read (FName) .scan (/ \ w + /)'. Um es zu versuchen, erstellen Sie zuerst eine Datei: 'File.write (" temp "," Jetzt ist \ ndie Zeit \ nfreuen Sie sich. ") # => 27'. Dann test: 'File.read (" temp "). Scan (/ \ w + /) # => [" Jetzt "," ist "," die "," zeit "," zu "," freuen "]'. –

Antwort

2

Ja. Entweder tun:

text_file.push(*line.split.map(&:to_s)) 

oder:

text_file.concat(line.split.map(&:to_s)) 
+4

Es scheint seltsam, Zeichenfolgen in Zeichenfolgen zu konvertieren. – tadman

+0

@tadman Richtig. 'map (&: to_s)' ist redundant. Aber das ist es, was das OP gab, und obwohl es keinen Sinn ergibt, funktioniert es immer noch, also habe ich es verlassen. – sawa

+0

@tadman du hast recht, es ist überflüssig, also entferne ich es jetzt. Vielen Dank – anonn023432

1

Wenn Sie alle Wörter wollen, einzigartig, sortiert:

text_file = [ ] 

File.open(file, "r") do |f| 
    f.each_line do |line| 
    text_file += line.split 
    end 
end 

text_file.uniq! 
text_file.sort! 

Dies ist nicht die optimale Umsetzung, aber es sollte funktionieren . Um dies an Situationen in der realen Welt anzupassen, müssen Sie wahrscheinlich String#scan verwenden, um spezifischere Wörter herauszuziehen, anstatt über Dinge wie Interpunktion oder Bindestriche zu stolpern.

0

Ihren Code ändert, wird dies den Trick:

text_file = [] 

File.open('document.rb', "r") do |f| 
    f.each_line do |line| 
    arr = line.split(' ') 
    arr.each do |word| 
     text_file << word 
    end 
    end 
end 
Verwandte Themen