Rubyで文書ファイルを読み込んだときに空白行を削除したいgsubと「^\n」

結論

正規表現の「空白行^\n」を.gsubで空文字「””」に置き換える。
「file.gsub!(/^\n/, “”)」

そんな都合のいいものなんてある?

対象を「\n」にしてしまうと全ての文章が段落なしの1行でエディタに表示されてしまう。そのままでは作成するときに視認性が悪いので、文の段落は守りたい。

でも空白行だけ削除したい!こんなわがまま通じるのだろうか?

検索してみる。

Google検索
「正規表現 空白行」
https://hodade.com/seiki/page.php?r_karagyou_sakujo

「^\n」が空白行?再度調べてみる。

Google検索
「正規表現 ^\n」
http://gimite.net/help/devas-ja/all_regex.html

なるほど、「^」は行頭を示し、「\n」は改行文字なので、「この2つの組み合わせで空白行を示す」ってことですね。

すげぇ~、ますます文字列操作には正規表現が欠かせないですね!

サンプル

次のサンプル文章の変なところにわざと空白行を入れてみました。

test.txt↓
おはようございます。
今日もいい天気ですね。

でも夕方ごろからは強烈な寒気が入ってくるようです。
ここら一帯は猛吹雪になるみたいですよ。

大丈夫でしょ。私はいまハワイにいますから。

電話かよ!

次のコードで段詰めが実行できるということですね。

Rubyコード↓
file = File.read("test.txt") #ファイル読み込み
p file #加工前
file.gsub!(/^\n/, "") #メソッド実行
puts file #加工後

つまづいたところ

「!」ビックリマークを付けるか付けないかの違いです。

読み込んでメソッドを実行するだけでは一瞬空中に結果が出力されてそのあとはすぐ消えてしまう。(というイメージです。)
こちらの「mapメソッドについて「!」について詳しく記載しています。」
「Rubyのmapメソッドについて」

だから最初は次のように書いて「え?なんで?なんで置き換わってないの?書き方間違っている?え?どして?どして?」って7分くらいパニックになっていました。↓

#これは間違いというか出力に変化なし
file = File.read("test.txt")
puts file #加工前
file.gsub(/^\n/, "")
puts file #加工後、と思っていた

「.gsub(/^\n/, “”)」を実行したって、2回目のputsでも同じfileを表示していることになる。

加工後を文章を表示するには方法は2つあります。

  • メソッド付きfileをputsする。
  • 破壊的メソッドにして元変数を変えて上書きしてしまう。

です。

#1つ目
file = file.gsub(/^\n/, "")

#2つ目
file.gsub!(/^\n/, "")
puts file

あとは元変数を変えたいかどうかですね!