こんにちは、お世話になります。
行末の文字を何文字か削除するプログラムを作っているのですが、
うまくいきません。(指定した文字数削除できたり、まったく削除されなかったりです)
どこが間違っているのでしょうか?
//プログラム
procedure TForm1.Button1Click(Sender: TObject);
var
RefText,LoadText,OutPutText:TStringList;
i:Integer;
MWord,befo,afte:String;
begin
LoadText := TStringList.Create;
OutPutText:= TStringList.Create;
OutPutText.Clear;
LoadText.LoadFromFile('D:\testtest.txt');
For i := 0 to LoadText.Count - 1 do
begin
MWord :='';
MWord := LoadText.Strings[i] ;
befo := MWord;
MWord := LeftStr(MWord, Length(MWord) - 4);
afte := MWord;
OutPutText.Add('before ' + befo + IntToStr(Length(befo)));
OutPutText.Add('after ' + afte + IntToStr(Length(afte)));
OutPutText.Add(#10#13);
end;
OutputText.SaveToFile('D:\出力testtest.txt');
LoadText.Free;
OutputText.Free;
ShowMessage('処理が完了しました');
end;
end.
//テスト用データ
ABC
ABCD
ABCDE
ABCDEF
ABCDEFG
文字は全角です。
よろしくお願いします。
MWord,befo,afte:String;を、
MWord,befo,afte:WideString;
に修正すればよいと思います。
実行結果は次のとおりでした。
-----------------------------
before ABC6
after A2
before ABCD8
after AB4
before ABCDE10
after ABC6
before ABCDEF12
after ABCD8
before ABCDEFG14
after ABCDE10
---------------------------------
お書きになったコードで正しく処理されるように思いますが,
どこがまずいとお考えですか?その箇所を教えてください。
これは全角文字だけを処理することが前提ですか?それとも,全角半角混合
ですか?
ぼるしちさん、回答ありがとうございます。
>MWord,befo,afte:WideString;
この修正でうまくいきました。
>お書きになったコードで正しく処理されるように思いますが,
>どこがまずいとお考えですか?その箇所を教えてください。
WideStringでなく、Stringで宣言していたので、3文字の場合以外はうまく処理されなかったようです。
>これは全角文字だけを処理することが前提ですか?それとも,全角半角混合
>ですか?
この部分は、全角だけの処理ですが、他は全角半角混合した処理をする予定です。
ありがとうございます。
実際に処理するファイルに近いもの(全角半角混合ファイル)で、動作を確認してみたところ
うまくいきました。
ツイート | ![]() |