後の文字を削除したいのですが

解決


また  2007-09-01 19:30:39  No: 27622  IP: [192.*.*.*]

こんにちは、お世話になります。
行末の文字を何文字か削除するプログラムを作っているのですが、
うまくいきません。(指定した文字数削除できたり、まったく削除されなかったりです)
どこが間違っているのでしょうか?

//プログラム
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

文字は全角です。
よろしくお願いします。

編集 削除
ぼるしち  2007-09-01 22:33:11  No: 27623  IP: [192.*.*.*]

MWord,befo,afte:String;を、
MWord,befo,afte:WideString;
に修正すればよいと思います。

編集 削除
実行結果  2007-09-01 22:37:11  No: 27624  IP: [192.*.*.*]

実行結果は次のとおりでした。
-----------------------------
before ABC6
after A2



before ABCD8
after AB4



before ABCDE10
after ABC6



before ABCDEF12
after ABCD8



before ABCDEFG14
after ABCDE10



---------------------------------

お書きになったコードで正しく処理されるように思いますが,
どこがまずいとお考えですか?その箇所を教えてください。

編集 削除
もう1点  2007-09-01 22:39:59  No: 27625  IP: [192.*.*.*]

これは全角文字だけを処理することが前提ですか?それとも,全角半角混合
ですか?

編集 削除
またABCから  2007-09-02 08:09:55  No: 27626  IP: [192.*.*.*]

ぼるしちさん、回答ありがとうございます。
>MWord,befo,afte:WideString;
この修正でうまくいきました。

>お書きになったコードで正しく処理されるように思いますが,
>どこがまずいとお考えですか?その箇所を教えてください。
WideStringでなく、Stringで宣言していたので、3文字の場合以外はうまく処理されなかったようです。

>これは全角文字だけを処理することが前提ですか?それとも,全角半角混合
>ですか?
この部分は、全角だけの処理ですが、他は全角半角混合した処理をする予定です。

編集 削除
またABCから  2007-09-02 08:43:23  No: 27627  IP: [192.*.*.*]

ありがとうございます。
実際に処理するファイルに近いもの(全角半角混合ファイル)で、動作を確認してみたところ
うまくいきました。

編集 削除