CSVファイルのパースをTextFieldParserを仕様して行った際、以下のコードでエラーが発生します。
C#
1string csvpath = @"C:\Users\user\Documents\data.csv"; 2System.Text.Encoding.RegisterProvider(System.Text.CodePagesEncodingProvider.Instance); 3var readToEnd = File.ReadAllLines(csvpath, Encoding.GetEncoding("Shift_JIS")); 4int lines = readToEnd.Length; 5int j = 1; // CSVの列数用 6for (int i = 0; i< lines; i++) // CSVの総行数分ループ 7 { 8 using (Stream stream = new MemoryStream(Encoding.Default.GetBytes(readToEnd[i]))) 9 { 10 using (TextFieldParser parser = new TextFieldParser(stream, Encoding.GetEncoding("Shift_JIS"))) 11 { 12 parser.TextFieldType = FieldType.Delimited; 13 parser.Delimiters = new[] { "," }; 14 parser.HasFieldsEnclosedInQuotes = true; 15 parser.TrimWhiteSpace = false; 16 string[] fields = parser.ReadFields(); // ← ここでエラーが発生します。 17 // エラー内容: Microsoft.VisualBasic.FileIO.MalformedLineException: 'Line 1 cannot be parsed using the current Delimiters.' 18 19 foreach(string field in fields) 20 { 21 Console.Write(field + " "); 22 j++; 23 } 24 25 Console.WriteLine(""); 26 j = 1; 27 28 } 29 } 30 } 31 32
CSVデータはカンマ区切り、1列目に""で列名が格納されています。
1列目を削除してデータのみのCSVに変更しても、同様のエラーが発生します。
コードはこちらを参考にしました。
File.ReadAllLines + forでループ - 【C#】TextFieldParserで100万行のCSVファイルに挑む。
試したこと
C#
1parser.TextFieldType = FieldType.Delimited;
こちらのコードを
C#
1parser.TextFieldType = Microsoft.VisualBasic.FileIO.FieldType.Delimited;
に変更しました。同様のエラーが発生します。
回答1件
あなたの回答
tips
プレビュー