none
半角空白の挿入方法 RRS feed

  • 質問

  • 半角20範囲に2種類の文字列を配置する際、2種類の文字列の文字数が20文字未満の場合、間を空白で埋めたく思っています。

     

    (例)

    2種類の文字数が20文字

    1234567890ABCDEFGHIJ

     

    2種類の文字数が20文字未満

    1234567890△△△ABCDEFG

     

    文字列には全角文字が混合する場合があるので、その場合は『全角1文字=半角文字2文字』として数えたく思っています。

    2007年4月20日 9:27

回答

  • PRT_MOJISU = 20;

    int byteCount1 = System.Text.Encoding.GetEncoding("Shift_JIS").GetByteCount(str_PARAM1);

    int byteCount2 = System.Text.Encoding.GetEncoding("Shift_JIS").GetByteCount(str_PARAM2);

     

    if (PRT_MOJISU > (byteCount1 + byteCount2))

    {

    str_Meisai = str_PARAM1 + str_PARAM2.PadLeft(PRT_MOJISU - byteCount1);

    }

    else

    {

    str_Meisai = str_PARAM1 + str_PARAM2;

    }

    return str_Meisai;

     

    で、無事解決しました

    2007年4月23日 0:51

すべての返信

  • 一つの方法

     

    str1 + str2.PadLeft(20 - str1.Length)

    2007年4月20日 9:38
    モデレータ
  • 上記の例に記載忘れがあったのですが、文字列には全角文字が混合する場合があるので、その場合は『全角1文字=半角文字2文字』として数えたく思っています。

    2007年4月20日 9:52
  •  こちらに書かれているように、

     

    Code Snippet
    System.Text.Encoding.GetEncoding("Shift_JIS").GetByteCount(stTarget);

     

    を使ってバイト数を計算する形になるかと思います。

     

    Code Snippet
    int byteCount = System.Text.Encoding.GetEncoding("Shift_JIS").GetByteCount(str1) +
        System.Text.Encoding.GetEncoding("Shift_JIS").GetByteCount(str2);
     
    string result;
    if (byteCount < 20)
    {
        result = str1 + str2.PadLeft(20 - byteCount);
    }
    else
    {
        result = str1 + str2;
    }

     

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

    オノデラ@わんくま同盟 http://blogs.wankuma.com/yo/

    2007年4月20日 10:44
  • どこで区切って空白を入れるのかルールがわからんけど、ShiftJIS換算でするというのであれば上位バイトか下位バイトかは判定しなくてはいけません。

    また、ShiftJISにない文字は?になったと思うので、厳密な意味では全角とか半角のない世界でやろうとしていること自体に無理があることは理解しておいてください。

    2007年4月20日 14:07
  • PRT_MOJISU = 20;

    int byteCount1 = System.Text.Encoding.GetEncoding("Shift_JIS").GetByteCount(str_PARAM1);

    int byteCount2 = System.Text.Encoding.GetEncoding("Shift_JIS").GetByteCount(str_PARAM2);

     

    if (PRT_MOJISU > (byteCount1 + byteCount2))

    {

    str_Meisai = str_PARAM1 + str_PARAM2.PadLeft(PRT_MOJISU - byteCount1);

    }

    else

    {

    str_Meisai = str_PARAM1 + str_PARAM2;

    }

    return str_Meisai;

     

    で、無事解決しました

    2007年4月23日 0:51