実現したいこと
C# .netframework 4.6.1
TextFieldParserクラスを使用して、CSVファイルを読み込みたい
区切り文字の文字列の設定を設定ファイル(XML)から指定する。
カンマ区切りについては再現できたが、タブやスペースなどの設定ができないので
できるようにしたい。
発生している問題・エラーメッセージ
現在、以下XMLファイルから2つの項目を取得する処理ができております。
両方ともConfigModelクラスのstring型のフィールドに格納してます。
それを引数として、以下のソースコードReadCsvFileメソッドを実行します。
20行目で区切り文字の設定を行なっております。
XMLファイルの設定値は、¥tを設定しており、これをパラメータとしてReadCsvFileメソッド実行すると、
23行目で区切られた形式で取得することができませんでした。
20行目を以下のようにハードコーディングすると問題なく動きます。
parser.SetDelimiters("¥t");
XMLファイルから取得した値を使用して区切り文字に対して可変となるようにしたいです。
該当のソースコード
C#
1using System; 2using Microsoft.VisualBasic.FileIO; 3using System.Data; 4using System.Linq; 5using System.Text; 6 7namespace csv 8{ 9 10 public class Csvreader 11 { 12 13 public DataTable ReadCsvFile(string filePath, string delimiter) 14 { 15 var dt = new DataTable(); 16 Encoding encoding = Encoding.GetEncoding("utf-8"); 17 using (var parser = new TextFieldParser(filePath, encoding)) 18 { 19 parser.TextFieldType = FieldType.Delimited; 20 parser.SetDelimiters(delimiter); 21 22 //ヘッダー取得処理 23 string[] headerFields = parser.ReadFields(); 24 for (int i = 0; i < 10; i++) 25 { 26 dt.Columns.Add(headerFields[i]); 27 } 28 29 30 //データ行の取得コード 31 .....省略 32 33 return dt; 34 } 35 } 36}
XML
1<?xml version="1.0" encoding="utf-8"?> 2<ConfigModel> 3<Csv> 4<filePath></filePath> 5<Delimiter>¥t</Delimiter> 6</Csv> 7</ConfigModel>
補足情報(FW/ツールのバージョンなど)
.net framework 4.6.1
回答3件
あなたの回答
tips
プレビュー