コラム / 置換ツールを作ろう / 13



やぁ。すまない。また なんだ。
変数がたりなかったぁぁぁですうう。
var
i :integer;
p :integer;
str:string;
string型の変数、strを追加してください。
stringってのは文字列型です。
配列、TStringList.stringsの一個の要素にあたる型です。 
まぁなんども出てきてるのでおkかな?
んじゃさっそく、whileの無限ループの中身を以下のようにどうぞ。
        //ここに一行あたりの置換処理が入る
        while true do begin
           p:=pos(' ',tex[i]);
           if p=O then begin
               break;
           end;
           //ここに半角スペース削除処理
           str:=tex[i];
           Delete(str,p,1);
           //ここに 挿入処理
           Insert(' ',str,p);
           tex[i]:=str;
        end;
pがOだったら脱出〜 の下に追加してありますね。
ここが今回の核、置換部分です。
最初と最後、
           str:=tex[i]; 
           tex[i]:=str;
はわかると思います。 似たようなのがありましたね。
そう、クリップボードからいったんコピー→置換→戻す
ってやるところです。
これも同じで、置換のために使う関数に、
tex[i] の形式では使えないのです。
引数のオプションというのがあって、まぁ関数のルールなんですが、
いったんただのstringのstrに代入して、置換した後、
texに戻す、という仕組みです。
さて、置換部分は2行です。
           Delete(str,p,1);
           Insert(' ',str,p);
まずはDelete関数の説明。
「Deleteは、文字列のindex文字目からcountバイト分の文字列を削除します」
indexというのは第二引数、countというのは第3引数です。
手続きなので帰り値はありません。
さて、この場合はどうなるかというと、
strは置換したい行ですね。pはなんでしょう。
って野暮なクイズかw その前でpos関数の帰り値を代入してある変数でしたね。
つまり、半角スペースのある文字数目(? 言葉が変だ)を指しています。
これで、置換したい行の半角スペースの開始文字目を指定できました。
あとの引数は、普通の数値で 1 と書いてありますが、
半角スペースは半角文字ですから1バイトです。なので、1と書けばいいんです。
全角文字を消す場合は、2って書かないといけません。
これで、
「置換したい行から半角スペースが削除」されました。
削除したら、変わりに入れるテキストを入れます。
           Insert(' ',str,p);
がその処理をしています。説明は。。。
「Insertは文字列を文字列のindex文字目に挿入します。」
入れる文字列は第一引数、受身の娘は第二引数です。
第一引数は、' 'ですね。これはタダの文字列です。本日3度目?
こいつに置換したいわけです。そして、第二引数はstr。
pは半角スペースがあった位置、すなわち、変わりにおきたい位置ですね。
これで、

 「置換したい行の半角スペースがあった位置に が挿入されました。」

これでstrが置換できたので、tex[i]に代入しなおして終了です!
ついに完成!!!!!
実際に使ってみましょう。
全て保存  したら・・・

img28.png

コンパイルして・・・
プロジェクトフォルダから実行!

img29.png

適当な部分をコピーして・・・

&ref(): File not found: "img3O.png" at page "コラム/置換ツールを作ろう/13";

ぽちっとな

img31.png

はりつけて・・・

img32.png

書き込んでみる。

img33.png

できました!!!!半角スペースのインデントがちゃんと生きてます!!!!
おしまい!