Ruby
blank_line_code

Rubyも正規表現もさっき始めたといっていい初心者です。
空行を消すだけなら正規表現が使えるエディタであれば一瞬でできますが、練習がてらRubyでスクリプトをかいてみました。

環境

  • Windows 8.1
  • Ruby 2.1.8

元ファイル

#include <stdio.h>

int main(void) {

  for (int i = 0; i <= 100; i++) {

    if (i % 3 == 0 && i % 5 == 0)

      printf("FizzBuzz\n");

    else if (i % 3 == 0)

      printf("Fizz\n");

    else if (i % 5 == 0)

      printf("Buzz\n");

    else

      printf("%d\n", i);

  }

  return 0;

}

一行だけで出来た

今回は、コマンドラインで入力元ファイルと出力先ファイルを指定し、実行するようにしました。
gsubなんて知りませんよ。

File.open(ARGV[0]).each_line { |line| puts line unless /^\n/ =~ line } #delblank.rb

やっていることは簡単です。

  1. コマンドで渡されたファイルを開く
  2. 1行ずつ順にみる
  3. 現在見ている行が改行で始まっていなければ出力

実行

ruby このファイル 入力元ファイルとすれば、処理結果が表示されます。
blank_ruby

別ファイルに書き出すにはruby このファイル 入力元ファイル > 出力先ファイルとして実行。
blank_ruby
何も表示されませんが、ディレクトリに結果のファイルが生成されます。
blank_ruby

Atomでの置換

練習は終わったので、Atomエディタで置換してみましょう。先ほどのコード内と同様、検索欄に^\nと入力してみます。 (検索に正規表現を使用するときは.*をオンにしましょう)
atom
すべての行が選択されてしまいました。この状態で置換をすると、すべての改行が削除されるのでコードが1行になってしまいます。

原因は改行コード

Windowsでは改行コードがLFではなくCRLFとなっているのが原因です。(説明略)解決するには改行をLFにするか、正規表現を^\r\nに変更する2通りの方法があります。

改行コードを変更した場合

右下にある改行コードを変更しています。
LF

正規表現を変更した場合

^\nから^\r\nに変更しています。 regex

置換の実行

REPLACE ALL !!!! atom-regex

あとがき

Rubyの勉強がんばります。