1. ホーム
  2. ruby

Rubyでキャリッジリターンを削除するには?

2023-09-03 04:54:21

質問

このコードはうまくいくと思ったのですが、正規表現は決して \rn にマッチしません。読み込んでいるデータを16進エディタで見て、本当に16進Dと16進Aのパターンがファイル内にあることを確認しました。

正規表現の/xDxA/mと/x0Dx0A/mも試してみましたが、こちらもマッチしません。

これが今の私のコードです。

   lines2 = lines.gsub( /\r\n/m, "\n" )
   if ( lines == lines2 )
       print "still the same\n"
   else
       print "made the change\n"
   end

代替案に加えて、何が間違っているのか(私自身の学習を促進するために)教えてもらえるとうれしいです :)

どのように解決するのですか?

を実行するとどうなるのでしょうか? puts lines ? それがヒントになります。

デフォルトでは File.open はテキストモードでファイルを開くので \r\n の文字は自動的に \n . そのためか lines が常に lines2 . Ruby が行末を解析するのを防ぐために rb モードを使用します。

C:\> copy con lala.txt
a
ファイル
を
多くの
行
^Z

C:\> irb
irb(main):001:0> text = File.open('lala.txt').read
=> "anfile ↵nmany ↵nmanylinesn"
irb(main):002:0> bin = File.open('lala.txt', 'rb').read
=> "aⅮⅮⅮⅮ
irb(main):003:0>

しかし、あなたの質問とコードから、あなたは単にデフォルトのモディファイアでファイルを開く必要があることがわかりました。変換の必要はなく、より短い File.read .