やぁ。すまない。また なんだ。 変数がたりなかったぁぁぁですうう。 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]に代入しなおして終了です! ついに完成!!!!! 実際に使ってみましょう。
全て保存 したら・・・
コンパイルして・・・ プロジェクトフォルダから実行!
適当な部分をコピーして・・・
&ref(): File not found: "img3O.png" at page "コラム/置換ツールを作ろう/13";
ぽちっとな
はりつけて・・・
書き込んでみる。
できました!!!!半角スペースのインデントがちゃんと生きてます!!!! おしまい!