getclipboardの末尾に付いてくる改行コーNo.07268
としひろ さん 13/08/30 11:38
 
Aファイルの中に、Bファイルと同一行があればその行を削除する、というマクロを作
っています。
色々とやり方を試した結果、Bファイル全体をクリップボードにコピーして、getclip
boardで1行ずつ取り出しながら
replaceallfastで削除するのが早そうだ、という事になりました。

ところで、ヘルプには、getclipboardは \x0D は除去されますが、\x0A は行末につ
いてきます。とあります。
私は普段、Shift-JIS、CR+LF、でファイルを作成していますので、改行コードの違い
から、同一行と見なされないのではないだろうか?
見なされないなら、取り出した後に改行コードを付加する等の必要があるのだろう
か?という懸念がありました。
ところが試した結果、何もしなくても思惑通りに動作しているようです。

しかし何となく釈然としません。どうしてちゃんと動いているのでしょう。
検索系の文においては、改行コードが違っていても同一文と見なされるのでしょうか?
またこれは、何か条件がそろっている場合のみ使える方法でしょうか?
それとも、いつでも安心して使える方法、という事でよろしいのでしょうか?

[ ]
RE:07268 getclipboardの末尾に付いてくるNo.07269
秀丸担当 さん 13/08/30 12:45
 

クリップボードの形式は、秀丸エディタだけのものではなく全てのソフトで共通
に扱えるようにする必要があるため、開いているファイルの改行コードに関わら
ず、常にCR+LFとして扱われます。

getclipboardについては、共通の形式であるCR+LFではなく、改行はLFだけの文
字列に自動変換されるということになります。
例えば以下の様なマクロでは、最後の一文字は文字コード10(つまりLF)になり
ます。

beginclipboardread;
message str(code(rightstr(getclipboard,1)));

これは秀丸のマクロで表される文字列中の"\n"と同じになります。
例えば、改行も一緒に消すには以下のように書きます。

replaceall "hoge\n","";

\nと書かれたところは、秀丸エディタでは開いているファイルの改行コードに関
わらず、CR+LFでもLFだけでも必ず改行にヒットします。

秀丸エディタの扱いとしては、とにかく改行といったら\nだけで、getclipboard
でも自動的に変換されるので特に気にしなくてもいいということになります。

(ちなみに区別した改行を調べるためにfindspecialという文もあります)

[ ]
RE:07269 getclipboardの末尾に付いてくるNo.07270
としひろ さん 13/08/30 21:04
 
早速のご回答、ありがとうございます。
詳しく説明していただき、すっきりしました。

[ ]