2次元の配列に格納されているデータをCSV形式に変換するサンプルです。
-------------------------------------------------------
using System;
using System.IO;
using System.Text;
public class ArrayUtil
{
public static void ToCSV(Array dArray)
{
if(dArray.Rank!=2)
throw new ArgumentException("配列が2次元ではありません");
for(int i=0; i<dArray.GetLength(0);i++){
for(int j=0;j<dArray.GetLength(1);j++)
{
Console.Write(dArray.GetValue(new int[] {i, j}));
if(j==dArray.GetLength(1)-1)
Console.WriteLine("");
else
Console.Write(",");
}
}
}
public static void ToCSV(Array dArray, string fileName)
{
using(StreamWriter sw = new StreamWriter(fileName, false, Encoding.GetEncoding("Shift-JIS")))
{
Console.SetOut(sw);
ToCSV(dArray);
StreamWriter standardOutput = new StreamWriter(Console.OpenStandardOutput(), Encoding.GetEncoding("Shift-JIS"));
standardOutput.AutoFlush = true;
Console.SetOut(standardOutput);
}
}
}
-------------------------------------------------------
このサンプルを利用するには、たとえば次のように2次元の配列を引数として渡すだけでOKです。
-------------------------------------------------------
using System;
class ArrayToCSVSample
{
public static void Main()
{
int [,] intArray = new int[4, 3];
intArray[0, 0] = 1;
intArray[0, 1] = 2;
intArray[1, 0] = 3;
ArrayUtil.ToCSV(intArray);
}
}
-------------------------------------------------------
CSV形式のデータをファイルに保存するのは、配列とファイル名を引数として渡すだけです。
-------------------------------------------------------
using System;
class ArrayToCSVSample
{
public static void Main()
{
double [,] doubleArray = new double[10, 20];
doubleArray[0, 0] = 1;
doubleArray[0, 1] = 2.5;
doubleArray[1, 0] = 3.324;
ArrayUtil.ToCSV(doubleArray, "test.csv");
}
}
-------------------------------------------------------
int型の配列でも、double型の配列でも2次元の配列であれば対応しています。
もちろん、string型の配列も扱えます。
また、データの数の制限もありません。
データを集計して表を作成する、といった用途では使えるところがあるかと思います。
あおい情報システム株式会社 小野修司(どっとねっとふぁん)