みろりHP


緑色さんの多目的ブログ
みろりえいちぴー
ごゆるりとおくつろぎあさーせ。
<< アコギ 弦の張替え | main | Python CSVファイル、CSVリソースを配列化する関数 >>
| カテゴリ:プログラミング |
C# CSVファイル、CSVリソースを配列化する関数



先日作った「GCCS-CS1.0」ではデータをCSVファイルで管理していた。そんとき作った関数をまとめとく。「CSVが外部ファイルであるとき」と「CSVをリソース化してexeに含めてるとき」の二通りに対応する。
こんな順番で書くぜ。
  • 1. 改行を含むCSVファイルを用意しとく
  • 2. CSVをリソースに追加しとく
  • 3. 今回作ったCSV二次元配列化関数
  • 4. ついでに、作った二次元配列を確認する関数を準備
  • 5. 実行
  • 6. 結果



1. 改行を含むCSVファイルを用意しとく
0,緑色,Midori-iro,"みどりいろ"
1,うぇる,Weruda,"ウェル
ダ"

2. CSVをリソースに追加しとく
  • 上述のCSVをテキストファイルとしてプロジェクトのリソースに追加しとく。

3. 今回作ったCSV二次元配列化関数
// CSVファイルのパスとリソースを渡す
private string[][] foo(string csv_path, string resource)
{
    // Microsoft.VisualBasicのアセンブリ参照を追加しておくこと。
    Microsoft.VisualBasic.FileIO.TextFieldParser parser;

    // CSVファイルを確認できたらそれを使い、なければリソースを使う
    if (System.IO.File.Exists(csv_path))
    {
        parser = new Microsoft.VisualBasic.FileIO.TextFieldParser(
            csv_path, Encoding.GetEncoding("UTF-8"));
    }
    else
    {
        // TextFieldParserに直接文字列を渡すときはstringじゃなく
        // StringReaderを通さないとダメ
        var reader = new System.IO.StringReader(resource);
        parser = new Microsoft.VisualBasic.FileIO.TextFieldParser(
            reader);
    }

    // 二次元配列化
    var lis = new List();
    using (parser)
    {
        // 区切り文字を指定
        parser.TextFieldType =
            Microsoft.VisualBasic.FileIO.FieldType.Delimited;
        parser.SetDelimiters(",");
        while (!parser.EndOfData)
        {
            string[] row = parser.ReadFields();
            var lis_row = new List();
            foreach (string r in row)
            {
                lis_row.Add(r);
            }
            lis.Add(lis_row.ToArray());
        }
    }
    return lis.ToArray();
}

4. ついでに、作った二次元配列を確認する関数を準備
private void print_2D_array(string[][] array)
{
    for (int i = 0; i < array.Length; i++)
    {
        string format = string.Format("[{0}] => [¥r¥n", i);
        for (int j = 0; j < array[i].Length; j++)
        {
            format += string.Format("    [{0}] => {1},¥r¥n", j, array[i][j]);
        }
        format += "],";
        Console.WriteLine(format);
    }
}

5. 実行
string[][] a = foo(@"C:¥Users¥Midoriiro¥Desktop¥しーえすぶい.csv",
    Properties.Resources.しーえすぶい);
print_2D_array(a);

6. 結果
[0] => [
    [0] => 0,
    [1] => 緑色,
    [2] => Midori-iro,
    [3] => みどりいろ,
],
[1] => [
    [0] => 1,
    [1] => うぇる,
    [2] => Weruda,
    [3] => ウェル
ダ,
],
改行もちゃんと含まれてるぜ!



最初は静的型付けメチャメチャ面倒くせーな! と思ってたのだけど、書いてるうちに楽しくなってきたよ。特に、引数と返り値の型が普遍的だってのは不便な反面安心感があるよね。


| 緑色 | プログラミング | comments(0) |
| カテゴリ:- |
スポンサーサイト
| スポンサードリンク | - | - |









      1
2345678
9101112131415
16171819202122
23242526272829
30      
<< April 2017 >>
+ みろりHP内検索
+ 閲覧記事
+ カテゴリ
+ 年月選択
  • 2017年 04月 (8)
  • 2017年 03月 (7)
  • 2017年 02月 (10)
  • 2017年 01月 (6)
  • 2016年 12月 (8)
  • 2016年 11月 (8)
  • 2016年 10月 (5)
  • 2016年 09月 (5)
  • 2016年 08月 (7)
  • 2016年 07月 (9)
  • 2016年 06月 (6)
  • 2016年 05月 (8)
  • 2016年 04月 (10)
  • 2016年 03月 (10)
  • 2016年 02月 (8)
  • 2016年 01月 (9)
  • 2015年 12月 (9)
  • 2015年 11月 (6)
  • 2015年 10月 (5)
  • 2015年 09月 (4)
  • 2015年 08月 (8)
  • 2015年 07月 (5)
  • 2015年 06月 (3)
  • 2015年 05月 (7)
  • 2015年 04月 (8)
  • 2015年 03月 (12)
  • 2015年 02月 (8)
  • 2015年 01月 (4)
  • 2014年 12月 (5)
  • 2014年 11月 (5)
  • 2014年 10月 (7)
  • 2014年 09月 (4)
  • 2014年 08月 (7)
  • 2014年 07月 (6)
  • 2014年 06月 (4)
  • 2014年 05月 (12)
  • 2014年 04月 (9)
  • 2014年 03月 (6)
  • 2014年 02月 (6)
  • 2014年 01月 (8)
  • 2013年 12月 (7)
  • 2013年 11月 (10)
  • 2013年 10月 (10)
  • 2013年 09月 (9)
  • 2013年 08月 (11)
  • 2013年 07月 (10)
  • 2013年 06月 (9)
  • 2013年 05月 (15)
  • 2013年 04月 (11)
  • 2013年 03月 (5)
  • 2013年 02月 (7)
  • 2013年 01月 (6)
  • 2012年 12月 (9)
  • 2012年 11月 (10)
  • 2012年 10月 (10)
  • 2012年 09月 (4)
  • 2012年 08月 (2)
  • 2012年 07月 (7)
  • 2012年 06月 (13)
  • 2012年 05月 (13)
  • 2012年 04月 (15)
  • 2012年 03月 (4)
  • 2012年 02月 (12)
  • 2012年 01月 (9)
  • 2011年 12月 (5)
  • 2011年 11月 (13)
  • 2011年 10月 (2)
  • 2011年 09月 (2)
  • 2011年 08月 (1)
  • 2011年 06月 (1)
  • 2011年 05月 (4)
  • 2011年 04月 (10)
  • 2011年 03月 (8)
  • 2011年 02月 (11)
  • 2011年 01月 (14)
  • 2010年 12月 (14)
  • 2010年 11月 (17)
  • 2010年 10月 (17)
  • 2010年 09月 (19)
  • 2010年 08月 (22)
  • 2010年 07月 (18)
  • 2010年 06月 (16)
  • 2010年 05月 (19)
  • 2010年 04月 (15)
  • 2010年 03月 (22)
  • 2010年 02月 (18)
  • 2010年 01月 (18)
  • 2009年 06月 (2)
  • 2009年 04月 (1)
  • 2007年 12月 (10)
  • 2007年 11月 (7)
  • 2007年 10月 (9)
  • 2007年 09月 (4)
  • 2007年 07月 (5)
  • 2007年 06月 (11)
  • 2007年 05月 (6)
  • 2007年 04月 (4)
  • + ブックマーク
    + 最近のコメント
    + アクセスカウンター
    全体(since 2010.02.03.)
    今日… 昨日…