はじめに
サクラエディタでファイルの文字列置換を行う際、特定の条件を満たす場合にのみその文字を置換したくない場合があります。
そのような文字については、あらかじめ条件判定を行って置換されないような別の文字に置き換えた上で、本来行いたかった文字列置換を行い、元に戻す、というテクニックが有効になります。
今回の記事では、そのようなテクニックが有効となる例を紹介します。
また、一時的に置き換える文字としてお勧めの文字も紹介します。
一時的な文字置き換えが有効になる例
最もわかりやすい例の一つとして、CSVファイルの区切り文字であるカンマをタブ文字に置換する場合が挙げられます。
CSVファイルでは、文字列項目中に出現する区切り文字ではないカンマが存在することがあります。
区切り文字ではないカンマが含まれる文字列項目は、通常、ダブルクォートで囲まれます。
この場合、ダブルクォートで囲まれた区切り文字ではないカンマを別の文字に一時的に置き換えた後、カンマを一括置換し、一時的に置き換えた文字を元のカンマに戻すと、上手く置換できます。
例えば、以下のレコードをサクラエディタで置換したい場合、
5,”詰め合わせセット(ジュース,お菓子)”,1000
正規表現をONにして以下のように置換すると上手くいきます。
なお、ここでは、一時的に置き換える文字としてアットマークを使用します。
①ダブルクォートで囲まれた区切り文字ではないカンマを別の文字に一時的に置き換える
置換前 | (“[^,]*),([^,]*”) |
置換後 | ${1}@${2} |
②カンマを一括置換する
置換前 | , |
置換後 | \t |
③一時的に置き換えた文字を元のカンマに戻す
置換前 | @ |
置換後 | , |
一時的に置き換える文字としてお勧めの文字
ここで、一時的に置き換える文字としてどのような文字を使うかが問題になります。
上記の例ではアットマークを使用していましたが、ファイル中にアットマークの文字が出現する場合、エスケープ文字をカンマに戻す際にその文字も一緒にカンマに置換されてしまいます。
これを回避するために、通常入力されることがない文字を使用するべきです。
サクラエディタでは\x{01}のように指定すると16進コードで文字を指定できるため、これを利用して、キーボードから入力することが困難な文字を置換で指定することができます。
通常入力されることがない文字として、以下の文字を使うことをお勧めします。
何れも、現在では使われることが考えにくいASCIIコードの制御文字であり、かつカナ拡張されたIBMのEBCDICでも使われることがない文字です。
バイナリ文字が埋め込まれたファイルであったり、特殊な仕様が存在するファイルであったりしない限りは、使われる心配はしなくて良いでしょう。
- \x{01}~\x{08}
- \x{0b}~\x{0c}
- \x{0e}~\x{1f}
あとがき
実務では、テストや運用で文字列置換のようなちょっとした作業が発生することがあります。
プログラミングのスキルに加えて、今回紹介したようなちょっとしたテクニックを身につけると、より実務で活躍できるようになるでしょう。
株式会社サイゼントでは、即戦力のJavaプログラマーを育てるための書籍「絶対にJavaプログラマーになりたい人へ」をKindleで販売しています。

同じく、Spring Frameworkについてきめ細かく解説した別冊も販売中です。

また、上記の書籍をテキストとして用いたプログラミングスクール「サイゼントアカデミー」も開校しています。
このスクールは、受託開発事業・SES事業である弊社が、新入社員向けの研修で培ったノウハウを詰め込んだものです。

ご興味がある方は、上記画像から個別ページにアクセスしてみてください!
コメント