vaguely

和歌山に戻りました。ふらふらと色々なものに手を出す毎日。

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| )++/」の場合はエラーとなります。

参考