一行あたりの中の処理を書きます。
//ここに処理
for line:=0 to Form1.Memo1.Lines.Count-1 do begin
//一行あたりの処理
str:=Form1.Memo1.Lines[line];
//半角スペースを抜く
//大文字を小文字にする
//バイトを抜き出す
//ファイルに書き込む
end;
まずはとりあえず1行をstrに入れました。
その後、コメントの処理を実装していきます。
半角スペースを抜く
この処理は、バイナリデータが、
バイナリ1バイト分のテキスト(半角2文字)ずつ半角スペースで
区切ってあるものと仮定し、
あとで扱いやすいようにするためです。
処理するときは、スペースで区切られていない、
A419B1279DD1・・・
とかになるわけです。
逆に、この抜き取る処理をしておけば、
半角スペースで区切って無くても読み込めます。
これ、この前作った置換処理の、
「位置を探す」「削除する」「挿入する」
の3段階の、「位置を探す」と「削除する」だけで作れますね。
pos関数で見つからなくなるまでループして、
見つかるたびにDelete手続きです。
ここで変数が足りなくなりました。
varを書き直します。
var
line:Integer;
buf:Byte;
str:String;
hsp:Integer;
hspって別に ホットスーププロセッサーじゃないですよ。
HankakuSPace のつもりです。
そしたらコメントの部分にコードを書きましょう。
//半角スペースを抜く
while True do begin
hsp:=pos(' ',str);
if hsp=0 then break;
Delete(str,hsp,1);
end;
while true do begin-end; これは無限ループですね。
条件が正しい間ループ の 条件を、論理値で直接 True を入れています。
pos関数は「第2引数から第1引数を検索し、見つかった文字位置を返す」
でしたね。 str は 今処理すべき1行ですから、
strから' ' を探せ となっています。
' ' は、目には見えないけど半角スペースを挟んでるってことです。
if hsp=0 then break; は
hspが0ならbreak;ですね。 begin-end;の省略をしています。
break;の一つしか処理をしないからです。
hspはposの帰り値を代入してますから、
posは見つからないと0を返すので、
みつからなかったらbreak;ですね。
breakは今のループを抜ける です。
半角スペースをはずす処理のwhileを抜けますが、
forループは抜けないので、次の、小文字にする処理に進みます。
Delete(str,hsp,1);
ですが、
「第一引数の文字列の第二引数文字目から第3引数バイト削除」
でした。
わかりにくいですね、やっぱし。
この場合、
strのhsp文字目から1バイト です。
現在の処理している行の、半角スペースが見つかった位置から1バイト 削除
ってことです。
1バイトなのは、半角スペースが1バイトだからです。
大文字>小文字は次回
コンテンツ
最新の12件
2023-06-12
2021-02-15
2013-06-19
2012-07-14
2012-02-04
2012-01-06
2011-03-31
2010-08-26
2010-03-15
2009-10-21
2009-02-12
2008-11-18
メニュー編集
- counter: 876
- today: 1
- yesterday: 0
- online: 1