Ich habe versucht, den folgenden Code zum Lesen von Zeilen aus einer Datei zu verwenden. Beim Lesen einer Datei befindet sich der Inhalt jedoch alle in einer Zeile:
line_num=0
File.open('xxx.txt').each do |line|
print "#{line_num += 1} #{line}"
end
Diese Datei druckt jedoch jede Zeile separat.
Ich muss stdin verwenden, ruby my_prog.rb < file.txt
wo ich nicht annehmen kann, welches Zeilenendezeichen die Datei verwendet. Wie kann ich damit umgehen?
ruby
line-endings
zeichnen
quelle
quelle
line_num = 0
, könnten Sie verwendeneach.each_with_index
oder möglicherweiseeach.with_index
.read
.line.chomp
, um die Zeilenenden zu behandeln (mit freundlicher Genehmigung von @SreenivasanAC )Antworten:
Ich glaube , meine Antwort deckt Ihre neue Sorgen über jede Art von Zeilenenden , da sowohl der Handhabung
"\r\n"
und"\r"
werden auf Linux - Standard konvertiert ,"\n"
bevor die Linien Parsen.Um den
"\r"
EOL-Charakter zusammen mit dem regulären"\n"
und"\r\n"
unter Windows zu unterstützen, würde ich Folgendes tun:Natürlich könnte dies bei sehr großen Dateien eine schlechte Idee sein, da dies bedeutet, dass die gesamte Datei in den Speicher geladen wird.
quelle
/\r?\n/
die sowohl \ r \ n als auch \ nRuby hat eine Methode dafür:
http://ruby-doc.org/core-1.9.3/IO.html#method-c-readlines
quelle
with_index
?File.readlines(filename).each_with_index { |line, i| puts "#{i}: #{line}" }
Dadurch wird der angegebene Block für jede Zeile in der Datei ausgeführt, ohne dass die gesamte Datei in den Speicher verschoben wird. Siehe: IO :: foreach .
quelle
Ihre erste Datei hat Mac Classic-Zeilenenden (
"\r"
anstelle der üblichen"\n"
). Öffne es mitum die Zeilenenden anzugeben.
quelle
Dies liegt an den Endzeilen in den einzelnen Zeilen. Verwenden Sie die Chomp-Methode in Ruby, um die Endzeile '\ n' oder 'r' am Ende zu löschen.
quelle
Ich bin Teil des folgenden Ansatzes für Dateien mit Headern:
Auf diese Weise können Sie eine Kopfzeile (oder Zeilen) anders als die Inhaltszeilen verarbeiten.
quelle
wie etwa bekommt ?
quelle
Vergessen Sie nicht, dass Sie die Datei immer lesen können, wenn Sie Bedenken haben, eine Datei einzulesen, die möglicherweise große Zeilen enthält, die Ihren RAM zur Laufzeit überfüllen könnten. Siehe " Warum das Schlürfen einer Datei schlecht ist ".
quelle