public static string ToCsv(this DataTable dataTable, CsvSetting csvSetting) { if (dataTable.Rows.Count <= 0) { return(""); } var stRes = ""; if (csvSetting.ShowHeader) { for (var i = 0; i < dataTable.Columns.Count; i++) { stRes += string.Format("{0}{1}", dataTable.Columns[i].ColumnName, (i + 1 == dataTable.Columns.Count ? "" : csvSetting.Delimiter)); } } stRes += stRes.IsNullOrEmpty() ? "" : Environment.NewLine; for (var i = 0; i < dataTable.Rows.Count; i++) { for (var j = 0; j < dataTable.Columns.Count; j++) { stRes += dataTable.Rows[i][j] + (1 + j == dataTable.Columns.Count ? Environment.NewLine : csvSetting.Delimiter); } } return(stRes); }
public void ExAndImportCsv() { // arrange var key = Constants.Csv.Key; var name = $"test-csv.{Constants.Csv.Extension}"; var setting = new CsvSetting { Location = _path, Name = name, HasHeader = true }; setting.CustomHeader = "#my custom line 1 \r\n#my custom line 2"; setting.DataPosition = 3; var table = new DataTable("test-table"); table.Columns.AddRange(new DataColumn[] { new DataColumn("col_1"), new DataColumn("col_2"), new DataColumn("col_3") }); var rand = new Random(); for (int i = 0; i < 10; i++) { table.Rows.Add(new object[] { rand.Next(0, 10), rand.Next(10, 100), rand.NextDouble() }); } // act export var result = _io.Exporter(key) .Setup(setting) .Build(table) .Export(); // assert export Assert.IsNotNull(result, $"{key} export failed"); setting.CustomHeader = ""; // act import DataTable importedTable = _io.Importer(key) .Setup(setting) .Import().AsItIs() as DataTable; // assert import for (int i = 0; i < importedTable.Rows.Count; i++) { for (int j = 0; j < importedTable.Columns.Count; j++) { Assert.AreEqual( importedTable.Rows[i].ItemArray[j], table.Rows[i].ItemArray[j], $"row index {i} at item {j} failed"); } } }
// -- constructor public CsvImporter() { _setting = new CsvSetting { Separator = ';', HasHeader = true }; }
// -- methods public IImportable Setup(SettingsBase setting) { if (setting is CsvSetting) { _setting = setting as CsvSetting; } else { Log.Error("The csv import setting has the wrong type and was not accepted."); } return(this); }