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

解決


また  2007-09-02 04:30:39  No: 27622

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

//プログラム
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-02 07:33:11  No: 27623

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


実行結果  2007-09-02 07:37:11  No: 27624

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

before ABCD8
after AB4

before ABCDE10
after ABC6

before ABCDEF12
after ABCD8

before ABCDEFG14
after ABCDE10

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

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


もう1点  2007-09-02 07:39:59  No: 27625

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


またABCから  2007-09-02 17:09:55  No: 27626

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

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

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


またABCから  2007-09-02 17:43:23  No: 27627

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


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加