2016-12-09 3 views
1

Ich habe eine Textdatei (. Txt), die ein Array enthält und die Elemente dieser Array ist im String-Format, aber das sind auch Arrays. Genau wie die folgenden:Problem beim Analysieren einer Datei in Ruby auf Schienen

Zum Beispiel läßt meine Datei betrachten als:

["[1, 2016-11-18 07:38:26 +0000, \"ho\"]","[1, 2016-11-18 07:38:29 +0000, \"hose cla\"]", "[1, 2016-11-18 08:24:54 +0000, \"mo\"]"] 

Jetzt habe ich diese Datei analysieren will, und ich brauche die Daten in folgendem Format drucken:

1 2016-11-18 07:38:26 +0000 ho 

1 2016-11-18 07:38:29 +0000 hose 

1 2016-11-18 08:24:54 +0000 mo 

Jetzt weiß ich einfach nicht wo ich anfangen soll. Ich weiß, wie man eine Textdatei in Rubin analysiert, aber dieses Mal enthält es ein Array. Ich bin also verwirrt, wie ich anfangen soll und habe noch nicht die richtige Idee.

Bitte helfen Sie mir, indem Sie mir ein paar Tipps geben.

Vielen Dank im Voraus !!!

Ich verwende den folgenden Code, um den Inhalt der Datei in das Array zu speichern. Aber es gibt mir nicht das richtige Format. Meine Datei enthält das Array zusammenhängend. Es gibt keine neue Zeile darin. Ich denke es verursacht das Problem im folgenden Code.

arr=[] 

arr=File.foreach('input.txt').map { |line| line.split(' ') } 
+0

ist es für Sie möglich, den Dateiinhalt in etwas wie '1, 2016-11-18 07:38:26 +0000," ho "\ n 1, 2016-11-18 07 zu ändern: 38:26 +0000, "ho" ' –

+0

oder möchten Sie die Datei analysieren, wie sie ist? –

+0

Ich möchte die Datei so analysieren, wie sie ist. Es ist eine systemgenerierte Datei. – Abhradip

Antwort

2

Antwort zu entfernen

könnten Sie json verwenden, um Ihre Datei zu analysieren, die wie eine aussieht Reihe von Zeichenfolgen:

require 'json' 
array = JSON.parse(File.read('file.txt')).map{|string| string.delete('[],"')} 

Ihr Array sieht nun wie folgt aus:

["1 2016-11-18 07:38:26 +0000 ho", 
    "1 2016-11-18 07:38:29 +0000 hose cla", 
    "1 2016-11-18 08:24:54 +0000 mo"] 

Wenn Sie die erste Linie wollen, nur array.first verwenden.

Alte Antwort

Dies ist wahrscheinlich der einfachste Weg, mit chomp Zeilenumbrüche am Ende jeder Zeile zu entfernen, und delete entfernen Sie alle angegebenen Zeichen:

array = ["[1, 2016-11-18 07:38:26 +0000, \"ho\"]","[1, 2016-11-18 07:38:29 +0000, \"hose cla\"]", "[1, 2016-11-18 08:24:54 +0000, \"mo\"]"] 

puts array.map{|string| string.chomp.delete('[],"')} 
#=> ["1 2016-11-18 07:38:26 +0000 ho", 
# "1 2016-11-18 07:38:29 +0000 hose cla", 
# "1 2016-11-18 08:24:54 +0000 mo"] 

Um zu zeigen, nur die ersten Zeile:

puts array.map{|string| string.chomp.delete('[],"')}[0] 
#=> "1 2016-11-18 07:38:26 +0000 ho" 
+0

Ok ,,, Jetzt kann ich die Datei lesen und Array wird erstellt. Aber der obige Code zeigt nicht das gewünschte Ergebnis. Ich habe puts array.map {| string | verwendet string.chomp.delete ('[],' ')} – Abhradip

+0

Darüber hinaus, wenn ich nur "1 2016-11-18 07:38:26 +0000 ho" drucken möchte, was soll ich dann schreiben? – Abhradip

+0

Aktualisierte Antwort. Nehmen Sie einfach das erste Element des Arrays –

0

Try

array = ["[1, 2016-11-18 07:38:26 +0000, \"ho\"]","[1, 2016-11-18 07:38:29 +0000, \"hose cla\"]", "[1, 2016-11-18 08:24:54 +0000, \"mo\"]"] 

array.each do |a| 
    puts a.gsub(/[\[\]\\",]/, '') 
end 

folgende Ausgabe:

1 2016-11-18 07:38:26 +0000 ho 
1 2016-11-18 07:38:29 +0000 hose cla 
1 2016-11-18 08:24:54 +0000 mo 

Um Datei

array = File.readlines('path/to/file.txt') 
+0

Wie lege ich den Inhalt meiner Datei in diese Array-Variable? – Abhradip

1
arr = ["[1, 2016-11-18 07:38:26 +0000, \"ho\"]","[1, 2016-11-18 07:38:29 +0000, \"hose cla\"]", "[1, 2016-11-18 08:24:54 +0000, \"mo\"]"] 

arr.map{ |str| str.gsub(/[\[\]\\",]/, '') } 

#=> [ 
#=> "1 2016-11-18 07:38:26 +0000 ho", 
#=> "1 2016-11-18 07:38:29 +0000 hose cla", 
#=> "1 2016-11-18 08:24:54 +0000 mo" 
#=> ] 

Jetzt lesen w Sie tun können hatever Sie wollen über die Daten

EDIT:

, wie der Inhalt meiner Datei in dieses Array-Variable setzen?

Sie können Datei mit

arr = File.readlines("#{Rails.root}/file.txt").map(&:strip) 

strip lesen ist nur alle zusätzlichen Räume

+0

Wie lege ich den Inhalt meiner Datei in diese Array-Variable? – Abhradip

Verwandte Themen