Ich dachte, dieser Code würde funktionieren, aber der reguläre Ausdruck stimmt nie mit dem \ r \ n überein. Ich habe die Daten, die ich lese, in einem Hex-Editor angezeigt und überprüft, ob die Datei wirklich ein Hex-D- und ein Hex-A-Muster enthält.
Ich habe auch die regulären Ausdrücke / \ xD \ xA / m und / \ x0D \ x0A / m ausprobiert, aber sie stimmten auch nicht überein.
Dies ist jetzt mein Code:
lines2 = lines.gsub( /\r\n/m, "\n" )
if ( lines == lines2 )
print "still the same\n"
else
print "made the change\n"
end
Zusätzlich zu Alternativen wäre es schön zu wissen, was ich falsch mache (um meinerseits das Lernen zu erleichtern). :) :)
Verwenden Sie String # strip
z.B
" hello ".strip #=> "hello" "\tgoodbye\r\n".strip #=> "goodbye"
Mit gsub
string = string.gsub(/\r/," ") string = string.gsub(/\n/," ")
quelle
each_line
Anrufs verwendet wird, spielt das keine Rolle.Wenn ich mich mit Strippen oder \ n beschäftige, suche ich im Allgemeinen nach beidem, indem ich so etwas mache
lines.gsub(/\r\n?/, "\n");
Ich habe festgestellt, dass je nachdem, wie die Daten gespeichert wurden (das verwendete Betriebssystem, der verwendete Editor, Jupiters Beziehung zu Io zu der Zeit), nach dem Wagenrücklauf möglicherweise die neue Zeile vorhanden ist oder nicht. Es scheint seltsam, dass Sie beide Zeichen im Hex-Modus sehen. Hoffe das hilft.
quelle
Wenn Sie Rails verwenden, gibt es eine
squish
Methode"\tgoodbye\r\n".squish => "goodbye"
"\tgood \t\r\nbye\r\n".squish => "good bye"
quelle
str.gsub(/[[:space:]]+/, ' ').strip
modified_string = string.gsub(/\s+/, ' ').strip
quelle
lines2 = lines.split.join("\n")
quelle
"still the same\n".chomp
oder
"still the same\n".chomp!
http://www.ruby-doc.org/core-1.9.3/String.html#method-i-chomp
quelle
chomp
wird nur vom Ende einer Zeichenfolge entfernt, scheint, dass die Frage alle Wagenrückläufe entfernen möchte.Wie wäre es mit folgendem?
irb(main):003:0> my_string = "Some text with a carriage return \r" => "Some text with a carriage return \r" irb(main):004:0> my_string.gsub(/\r/,"") => "Some text with a carriage return " irb(main):005:0>
Oder...
irb(main):007:0> my_string = "Some text with a carriage return \r\n" => "Some text with a carriage return \r\n" irb(main):008:0> my_string.gsub(/\r\n/,"\n") => "Some text with a carriage return \n" irb(main):009:0>
quelle
Ich denke, Ihre Regex ist fast vollständig - hier ist, was ich tun würde:
lines2 = lines.gsub(/[\r\n]+/m, "\n")
Oben habe ich \ r und \ n in eine Klasse eingefügt (auf diese Weise spielt es keine Rolle, in welcher Reihenfolge sie erscheinen) und das Qualifikationsmerkmal "+" hinzugefügt (so dass "\ r \ n \ r \ n" \ r \ n "würde auch einmal übereinstimmen, und das Ganze durch" \ n "ersetzt)
quelle
Nur eine andere Variante:
lines.delete(" \n")
quelle
Warum lesen Sie die Datei nicht im Textmodus und nicht im Binärmodus?
quelle
Sie können dies verwenden:
my_string.strip.gsub(/\s+/, ' ')
quelle
lines.map(&:strip).join(" ")
quelle
def dos2unix(input) input.each_byte.map { |c| c.chr unless c == 13 }.join end remove_all_the_carriage_returns = dos2unix(some_blob)
quelle