2016-05-13 10 views
1

Ich habe eine Liste von Namen (names.txt), die durch eine Linie getrennt sind. Nachdem ich jede Zeile durchlaufen habe, möchte ich sie in eine andere Datei verschieben (processed.txt).Zeile von einer Textdatei zu einer anderen verschieben

Meine aktuelle Implementierung durch jede Zeile in einer Schleife:

open("names.txt") do |csv| 
    csv.each_line do |line| 
    url = line.split("\n") 
    puts url 
    # Remove line from this file amd move it to processed.txt 
    end 
end 

Antwort

1

Sie können es wie folgt tun:

File.open('processed.txt', 'a') do |file| 
    open("names.txt") do |csv| 
    csv.each_line do |line| 
     url = line.chomp 
     # Do something interesting with url... 
     file.puts url 
    end 
    end 
end 

Dies wird in processed.txt enthält alle URLs führen, die mit diesem Code verarbeitet wurden .

Hinweis: Das Entfernen der Linie von names.txt ist mit dieser Methode nicht praktikabel. Weitere Informationen finden Sie unter How do I remove lines of data in the middle of a text file with Ruby. Wenn dies ein echtes Ziel dieser Lösung ist, wird es eine viel größere Implementierung mit einigen Designüberlegungen sein, die definiert werden müssen.

+0

Danke. Da das Entfernen der Zeile nicht praktikabel ist, wäre es möglich, am Anfang der Zeile ein Zeichen hinzuzufügen (um es als abgeschlossen zu markieren?) – Onichan

+0

Das ist möglich, und wenn die Datei 'names.txt' (ziemlich) klein ist könnten wir die Datei möglicherweise nach der Verarbeitung neu schreiben und die erste Zeile auslassen. Ist diese Datei groß oder überschaubar? –

+0

Eigentlich denke ich, ich schreibe einfach die aktuelle Zeile in eine neue Datei mit jeder Iteration der Schleife. Dann weiß ich, welche Zeile verarbeitet wurde. Ist das ein praktischer Ansatz? – Onichan

1
def readput 
    @names = File.readlines("names.txt") 
    File.open("processed.txt", "w+") do |f| 
    f.puts(@names) 
    end 
end 
Verwandte Themen