.NET Coreに"TextFieldParser"ないじゃん!作ろう!(当然Unityにも無いです。
、、、とはいっても.NET Core3.0で移植されるみたいなのでそれまでのつなぎって感じですかね、、、?
つまり、C#でCSVの読み取りを検索するとよく出てくる「TextFieldParser」(名前空間:Microsoft.VisualBasic.FileIO)は今のところ、.NET Fraemework環境でのみ使用可能で.NET Core環境には存在しません。
というわけでMonoをベースにC#に移植してみました。
開発・確認環境
ReferenceSource にコードの記載がない(.NET 4.8は宣言しか記載なし)だったのでmonoを参考にしました。
(参照にしていますがこのコードも程よく思った通りに動かない気がしないでもないです、、、
成果物
以下のGitに配置しました。そのままプロジェクトにコピペして使用ください。
使い方
まずこんなCSVを用意します。
// Sample.csv 1,2,3,4,5 "a,a",2,3,4,"5" "a,a", 2, 3,"4", 5
そして以下の要領で読み込みを行います(使い方は完全に既存の解説と同じです)
using System; using System.Text; using Microsoft.VisualBasic.FileIO; internal static void Main(string[] args) { Console.WriteLine("Hello World!"); using (var parser = new TextFieldParser(new StreamReader(@"D:\Sample.csv"))) { // カンマ区切りの指定 parser.SetDelimiters(","); // フィールドが引用符で囲まれているか parser.HasFieldsEnclosedInQuotes = true; // フィールドの空白トリム設定 parser.TrimWhiteSpace = true; while (!parser.EndOfData) // ここで内部的に次の行を読みます。 { string[] items = parser.ReadFields(); Array.ForEach(items, p => Console.Write($"[{p}] ")); Console.WriteLine(); } } } // 出力結果 // [1] [2] [3] [4] [5] // [a,a] [2] [3] [4] [5] // [a,a] [2] [3] ["4"] [5]
簡単ですが以上です。