固定長のファイルを読み込むクラスを前に作成していましたが、今回は固定長の文字列を生成するクラスを作ってみました。
-------------------------------------------------------
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--)
bret
= 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の文字列を付加してあげるのが簡単かと思います。
あおい情報システム株式会社 小野修司(どっとねっとふぁん)