ぺんちゃん日記

食と歴史と IT と。 Web の旅人ぺんじろうが好奇心赴くままに彷徨います 。

テキストに含まれる改行を削除する【AutoHotkey】。

f:id:yasushiito:20190403184928p:plain
変数のテキスト中に改行が含まれていることがあります。
改行とはエンターキーを押したときに次の行に進んで、行の先頭に戻ることを言います。

文章を扱うときには、改行は改行として手をつけずに処理する方が安全なのですが、プログラムが扱うデータでは削除しないと邪魔になることがあります。
例えば、 Chrome で開いているすべてのタブの URL を取得するエクステンションを利用した場合、それぞれの URL が改行区切りで取得されます。
こんな時は 改行文字を探して切り分けたり削除するなどの処理を行います。
また、ブックマークなどの文字数が限られたテキスト入力では改行文字を削除した方が読みやすいこともあります。
今回は、テキストに含まれる改行を削除したいと思います。


まず改行とはカーソルを次の行に送る LF( ラインフィード)と左端に復帰させる CR( キャリッジリターン)の二つの動作で成立しています。
CR と LF 2はそれぞれの文字コードが割り当ててあるので、削除するには CR と LF の文字コードを検索して長さ0の文字に置換することとなります。
それらの文字コードは目に見えないしキーボードで入力することもできないので、通常の検索と置換では対応できません。
一般的なプログラミング言語では CR と LF の文字コードを探すには、正規表現を使います。
正規表現は検索するときの検索ワードをプログラムのように記号を組み合わせて記述するためのものです 一般参賀
もちろん AutoHotkey正規表現を使えます。
正規表現は英語で regular expression ですからRegExですね。

ahkwiki.net

AutoHotkey正規表現で CR を表すには\r 、 LF を表すには\nとします。
正規表現は改行文字以外にも色々な条件を検索できるので複雑です。
詳しくはリファレンスを参照してください。

ahkwiki.net

正規表現でマッチした文字を置換することもできます。
と言うか今回は改行コードを消したいので目的はそちらです。

ahkwiki.net

無駄な説明をだらだらとしてきましたが、実現するためのコードは次のようなとてもシンプルです。
第1パラメータで受け取った文字列の中に改行コードが含まれていたら削除して返す関数です。

ところで改行コードを crlf としてきましたが、 OS などの利用環境の違いによって改行コードの扱いが変わってきます。
Windows では改行コードを crlf ですが、 Linux など LF だけという環境もあります。
文字列を受け取る場合、相手がどんな環境で作ったテキストデータであるかを判別できないので、改行コードがどんな形式で記述されているか分かりません。
今回は問答無用で CR と LF を置換していますが、必要な CR を削除してしまう問題も発生するかもしれません。
Wikipedia を読むだけでも単純にはいかないのかなと分かります。

ja.wikipedia.org


この記事に登場するAutohotkey スクリプトについて

この記事の中で私が作成したプログラムは、全て自由に使うことができます。
詳しくはこちら