format関数で全角と半角で桁をそろえるには

解決


つくも  2012-06-28 09:06:49  No: 42544

次のコードでENDを揃えた状態で出力したいのですが
どのようにすればよいのでしょうか?
文字を扱う場合はsのみと思うのですが
全角の場合2文字としないで
1文字とするためうまくいかないように思います。
何かほかの方法があるのでしょうか

よろしくお願いします。

  Memo1.Lines.Add(Format('%-10sEND', ['あああ']));
  Memo1.Lines.Add(Format('%-10sEND', ['いい']));

  Memo1.Lines.Add(Format('%-10sEND', ['aaa']));
  Memo1.Lines.Add(Format('%-10sEND', ['bb']));

出力結果
あああ       END
いい        END
aaa       END
bb        END

期待する結果
あああ    END
いい      END
aaa       END
bb        END

delphi XE2
Windows7 64bit


igy  2012-06-28 18:00:58  No: 42545

以下のようなのは、いかがですか?

procedure TForm1.Button11Click(Sender: TObject);

    function Test(s: String): String;
    var
        strTest: AnsiString;
        strSpc: String;
        SpcLen: Integer;
    begin
        strTest := s;
        strSpc := '';
        SpcLen := 10 - Length(strTest);
        if SpcLen > 0 then  strSpc := StringOfChar(' ', SpcLen);
        Result := Format('%s%sEND', [s, strSpc]);
    end;
begin
    Memo1.Lines.Clear;

    Memo1.Lines.Add(Test('あああ'));
    Memo1.Lines.Add(Test('いい'));
    Memo1.Lines.Add(Test('aaa'));
    Memo1.Lines.Add(Test('bb'));
end;


つくも  2012-06-29 08:42:38  No: 42546

ありがとうございます
登録されたソースで出来ました


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

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






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