FROM ME TO YOU

oh my bizarre life !!

TextFieldParserのサンプルを作ってみた

仕事でCSVやらTXTやらのテキストファイルを扱うことが多いのでTextFieldParserメソッドのサンプルを作ってみた。

固定長の場合、FieldWidthsプロパティの文字幅はバイト単位ではなく文字数単位らしい。 使えない…

[参照の追加] で Microsoft.VisualBasic.dll の追加を忘れずに。

データ

"11111","AAAA""AA"
"22222","BBBBBB "
#"22222","BBBBBB "

ソース

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;
using Microsoft.VisualBasic.FileIO;

namespace TextFieldParserTest
{
    class Program
    {
        static void Main(string[] args)
        {
            
            List<Data> CsvData = new List<Data>();
            string csvFileName = @"C:\tmp\test.csv";    // ファイル名

            Encoding Encode = Encoding.GetEncoding("Shift_JIS");    // Encode指定
            using (TextFieldParser Parser = new TextFieldParser(csvFileName, Encode))
            {
                Parser.TextFieldType = FieldType.Delimited;    // フィールド区切りタイプ
                Parser.Delimiters = new string[] { "," };      // 区切り文字
                Parser.HasFieldsEnclosedInQuotes = true;       // ダブルコーテーション区切り
                Parser.CommentTokens = new[] {"#"};            // レコード先頭のコメント文字
                Parser.TrimWhiteSpace = true;                  // フィールドの前後スペースを削除

                // データ読み込み
                while (!Parser.EndOfData)
                {
                    string[] fields = Parser.ReadFields();
                    Data data = new Data();
                    data.F1 = fields[0];
                    data.F2 = fields[1];
                    CsvData.Add(data);
                }

                // Console出力
                foreach (var n in CsvData)
                {
                    Console.WriteLine(n.F1+" "+n.F2);
                }
                Console.ReadKey();
            }

        }

        public class Data
        {
            public string F1 { get; set; }
            public string F2 { get; set; }
        }

    }
}