どっとねっとふぁん

C# Tips And Samples
in 検索

25.固定長文字列生成クラス

最新の投稿は、投稿日時: 06-22-2005, 4:24 午後 投稿者: ono です。スレッドには 0 件の返答があります。
投稿のソート: 前へ 次へ
  •  06-22-2005, 4:24 午後 34

    25.固定長文字列生成クラス

    固定長のファイルを読み込むクラスを前に作成していましたが、今回は固定長の文字列を生成するクラスを作ってみました。

    -------------------------------------------------------
    using System;
    using System.Text;
    
    public class  FixedLenRecMaker
    {
        StringBuilder sb = new StringBuilder();
        Encoding sjis = Encoding.GetEncoding("Shift-JIS");
    
        public string Record    {  get  {  return sb.ToString();  } }
    
        // 左詰:len<0 右詰:len>0
        public void AddData(string data, int len)
        {
            string str = String.Format("{0, " + len + "}", data);
            str = cutBinaryLength(str, len);
            sb.Append(str);
        }
    
        public void AddCrLf()
        {
            sb.Append("\r\n");
        }
    
        string cutBinaryLength(string data, int len)
        {
            byte [] bdata = sjis.GetBytes(data);
            int diff = bdata.Length - len;
            if(len < 0)
            {
                len = -len;
                diff = 0;
            }
            byte [] bret = new byte[len];
            for(int i = len-1; 0 <= i ; i--)
                bretIdea [I] = bdata[i + diff];
            return sjis.GetString(bret);
    
        }
    }
    
    -------------------------------------------------------

    このクラスを利用するには、以下のようにします。

    -------------------------------------------------------
    class ConsoleSample
    {
        public static void Main()
        {
            FixedLenRecMaker rm = new FixedLenRecMaker();
            // 左詰
            rm.AddData("データ1", -20);
            rm.AddData("データ2", -20);
            rm.AddData("データ3", -20);
            rm.AddCrLf();
            // 右詰
            rm.AddData("データ1", 20);
            rm.AddData("データ2", 20);
            rm.AddData("データ3", 20);
            rm.AddCrLf();
            System.Console.WriteLine(rm.Record);
        }
    }
    
    -------------------------------------------------------

    文字列の右詰、左詰に対応しています。
    指定した長さまでの間は半角スペースで埋められます。

    数字等で前0で埋めたい、という場合
    -------------------------------------------------------
            rm.AddData("00000"+"123", 5);
    
    -------------------------------------------------------
    のように指定する長さと同じ長さの0の文字列を付加してあげるのが簡単かと思います。


    あおい情報システム株式会社
     小野修司(どっとねっとふぁん)
RSS ニュースフィードで参照
SkinName:iroha_CS2
Powered by Community Server, by Telligent Systems