/// <summary> /// csvファイルの読み込み /// </summary> /// <returns>読み込み結果</returns> private static Csv ReadCsv(string filePath, CsvDef def) { // 初期化 var csv = new Csv(); var dataList = new List <List <string> >(); csv.DataList = dataList; // 存在チェック if (!File.Exists(filePath)) { throw new Exception("ファイルが見つかりません。" + filePath); } // ファイル名を設定 csv.FileName = Path.GetFileName(filePath); // csv読み込み var enc = Encoding.GetEncoding(def.Encoding); using (var reader = new StreamReader(filePath, enc)) { var rowNumber = 0; while (!reader.EndOfStream) { // 1行読み込み var line = reader.ReadLine(); rowNumber++; // skip確認 if (def.SkipRowNumbers.Contains(rowNumber)) { continue; } // lineを分割 var items = line.Split(def.Separator, StringSplitOptions.None).ToList(); // 先頭行はHeader if (def.HasHeader && csv.Header == null) { csv.Header = items; continue; } // 最終行はFooter if (def.HasFooter && reader.EndOfStream) { csv.Footer = items; continue; } // 中間行はData dataList.Add(items); } } return(csv); }
/// <summary> /// csvをすべて読み込む /// </summary> /// <param name="dirPath">csvの配置ディレクトリバス</param> /// <param name="def">csv定義</param> /// <returns>読み込み結果</returns> public static IReadOnlyCollection <Csv> ReadAllCsv(string dirPath, CsvDef def) { var csvList = new List <Csv>(); foreach (var filePath in Directory.GetFiles(dirPath, "*.csv")) { csvList.Add(Csv.ReadCsv(filePath, def)); } return(csvList); }
/// <summary> /// 読み込み結果のチェック /// </summary> /// <param name="def">読み込み結果</param> /// <remarks>エラー時は例外を投げる</remarks> private static void Check(CsvDef def) { try { var enc = System.Text.Encoding.GetEncoding(def.Encoding); } catch (ArgumentException e) { throw new Exception("Encodingの設定が不正です。", e); } }