8

固定長のテキスト行を生成する必要があります。

私が今持っているものは次のとおりです。

StringBuilder _sb = new StringBuilder();

_sb.Append(string.Format("{0,5}", "MM")); // serie to cancel
_sb.Append(string.Format("{0,20}", "45444")); // folio to cancel
_sb.Append(string.Format("{0,30}", "AC1122")); // account number (optional)

これは、55 文字の固定長の文字列を生成するため、うまく機能します。

たとえば、オプションの値が次のような空の文字列である場合に問題が発生します。

StringBuilder _sb = new StringBuilder();

_sb.Append(string.Format("{0,5}", "MM")); // serie to cancel
_sb.Append(string.Format("{0,20}", "45444")); // folio to cancel
_sb.Append(string.Format("{0,30}", "")); // account number (optional)

string.format 内に空の文字列があると、固定長が得られず、30 文字の長さが必要です。

手がかりは大歓迎です!!

ありがとう

4

5 に答える 5

10

メソッドを使用できますPadLeft

StringBuilder _sb = new StringBuilder();

_sb.Append("MM".PadLeft(5)); // serie to cancel
_sb.Append("45444".PadLeft(20)); // folio to cancel
_sb.Append("".PadLeft(30)); // account number (optional)
于 2013-10-09T23:04:15.320 に答える
2

本気ですか?部分文字列がどこで終わるかを確認するためだけに、セパレーターを追加してみてください

StringBuilder _sb = new StringBuilder();
_sb.Append(string.Format("{0,5}|", "MM")); // serie to cancel
_sb.Append(string.Format("{0,20}|", "45444")); // folio to cancel
_sb.Append(string.Format("{0,30}|", "")); // account number (optional
Console.WriteLine(">" + _sb.ToString() + "<");

>   MM|               45444|                              |<
于 2013-10-09T23:07:22.370 に答える
1

希望の長さが一致するまで、デフォルトで空の文字が追加されます。

例: "Hello".ToFixedString(10)を生成し"Hello "ます。

public static class StringExtensions
{
    /// <summary>
    /// Extends the <code>String</code> class with this <code>ToFixedString</code> method.
    /// </summary>
    /// <param name="value"></param>
    /// <param name="length">The prefered fixed string size</param>
    /// <param name="appendChar">The <code>char</code> to append</param>
    /// <returns></returns>
    public static String ToFixedString(this String value, int length, char appendChar = ' ')
    {
        int currlen = value.Length;
        int needed = length == currlen ? 0 : (length - currlen);

        return needed == 0 ? value :
            (needed > 0 ? value + new string(' ', needed) :
                new string(new string(value.ToCharArray().Reverse().ToArray()).
                    Substring(needed * -1, value.Length - (needed * -1)).ToCharArray().Reverse().ToArray()));
    }
}
于 2018-10-03T00:13:10.547 に答える
0

何が最善の方法かはわかりませんが、次のように動作するはずです:

string appended = string.Format("{0,5}", "MM");
appended += string.Format("{0,20}", "45444");
appended += string.Format("{0,30}", "");
于 2013-10-09T23:14:11.040 に答える