2017-02-16 3 views
0

Ich bin sehr neu in der Ruby-Welt, also bitte, wenn es eine einfache Abfrage ist.Iterieren und drucken Sie den Inhalt aller Dateien in Ruby

Für eine meiner Zuweisungen, ich bin auf der Suche nach dem Inhalt aller Textdateien in einem Ordner (nur oberste Ebene) und leiten Sie die Dateiinhalte in einer einzigen Ausgabedatei in einem angehängten oder zusammengeführt.

Ich erwarte eine ein Format wie folgt:

Ausgabedatei

File Name: 1st file name 

all its contents 
==================================== 
File Name: 2nd file name 

all its contents 
==================================== 
File Name: 3rd file name 

all its contents 
==================================== 
    .... 
    .... 


==================================== 

ich die unten stehende Skript zu schreiben, verwalten aber die Ausgabedatei ist leer. Irgendwelche Vorschläge bitte.

File.open('C:\Users\darkop\Desktop\final_output.txt','a') do |final| 
    @files = Dir.glob("D:\text\*.txt") 
    for file in @files 
    text = File.open(file, 'r').read.sub(/#$/?\z/, $/) 
    text.each_line do |line| 
     puts "File Name:"#{file} 
     puts 
     final << line 
     puts "=" * 20 
     end 
    end 
end 

Ist es auch möglich, die Ausgabe im oben genannten Format zu einem Word-Dokument anstelle einer Textdatei umzuleiten?

Vielen Dank.

+0

Sie haben den "Versuch" und "erwartete Ausgabe" in Ihre Frage eingefügt. Sie sollten auch "Ihre Ausgabe" oder "Fehler" hinzufügen, die Sie bekommen. –

+0

@JagdeepSingh: Ich bekomme leere/leere Ausgabedatei. Thnks. – Goku

Antwort

1

Dies sollte funktionieren.

Der Dateiname war leer, weil Sie puts "File Name:"#{file} haben. Auf diese Weise wird #{file} nicht interpoliert, da es sich nicht in den doppelten Anführungszeichen befindet.

Sie haben auch nicht den Inhalt der Datei erhalten, weil Sie gerade puts statt puts line verwendet haben, was Sie wollen.

File.open('C:\Users\darkop\Desktop\final_output.txt','a') do |final| 
    @files = Dir.glob("D:\text\*.txt") 
    for file in @files 
    text = File.open(file, 'r').read.sub(/#$/?\z/, $/) 
    text.each_line do |line| 
     puts "File Name: #{file}" 
     puts 
     puts line 
     final << line 
     puts "=" * 20 
    end 
    end 
end 

-EDIT-

Da Sie Ruby neu sind, ist es besser, eine each Schleife zu verwenden, statt der for .. in Schleife. Geben Sie außerdem den Ausgabenamen mit einer Erweiterung .doc für ein Worddokument an.

File.open('C:\Users\darkop\Desktop\final_output.doc','a') do |final| 
    @files = Dir.glob("D:\text\*.txt") 
    @files.each do |file| 
    text = File.open(file, 'r').read.sub(/#$/?\z/, $/) 
    text.each_line do |line| 
     puts "File Name: #{file}" 
     puts 
     puts line 
     final << line 
     puts "=" * 20 
    end 
    end 
end 
+0

Van Dijik: +1 für die Identifizierung meines Fehlers. Ich habe weitere Änderungen vorgenommen, um das obige Format zu erhalten: 'File.open ('D: /output.doc', 'a') do | final | @files = Dir.glob ("D:./Text/* .txt") für Datei in @files final.puts "Dateiname: # {file}" \t final.puts text = File.open (Datei, 'r') .read (/ # $ /? \ z /, $ /) text.each_line do | line | letzte << Linie \t Ende \t final.puts "=" * 70 Ende end' hier Schätzen Sie Ihre Zeit. – Goku

Verwandte Themen