Rubyで文字列操作
ちょっと必要になったのでメモ。
やりたいこと
Rubyファイルと同じ場所に置いた外部テキストファイルを読み込んで、改行、任意に含まれたスペースを削除する
test.txt
読み込み対象の外部テキストファイルです。
t e s t です
getTextData.rb
#ファイルを開いて読み込む
file = File.open('test.txt', 'r:utf-8')
strOriginal = file.read
#改行を削除し、複数の半角・全角スペースを一つにまとめる
strOriginal.gsub!(/\n+/, '')
strOriginal.gsub!(/(\s| )+/, ' ')
#ファイルを閉じる
file.close
puts strOriginal
File.openだけでファイルが開いちゃうって凄いですね...。
gsubは文字列に含まれる対象の文字(第一引数)全てを第二引数に置き換えます。
また!をつけることで、strOriginalの中身自体を置き換えています。
ここで引っかかったのがバックスラッシュ()。
Windowsではフォントによって「¥」と「\」の表示が変わっていたので、Macでも特に気にしなくて良いのかな〜、と考えていたら文字列が置き換わらない...。
alt + ¥を押すことで、バックスラッシュが入力できました。
正規表現
「/」で囲ってやることで、置き換え対象の文字列を正規表現で記述できます。
「(\s| )」とすることで、半角スペース(\s)または全角スペース( )を指定し、0個以上含むかを指定する場合は「*」、1個以上の場合は「+」を後ろにつけてやります。
なお、「/(\s| )*+/」の場合はエラーは起きませんが、「/(\s| )++/」の場合はエラーとなります。