public void ReadXsvTest_autoBinding() { var data = "品番,船種,品名,税込価格,本体価格,メーカー" + Environment.NewLine + "103,戦艦,山城 やましろ,1785,\"1,700\",A" + Environment.NewLine + "215,航空母艦,信濃 しなの,2940,\"2,800\",T" + Environment.NewLine + "442,駆逐艦,陽炎 かげろう,1050,\"1,000\",A" + Environment.NewLine; var expected = new[]{ new { 品番 = 103, 船種 = "戦艦", 品名 = "山城 やましろ", 税込価格 = 1785, 本体価格 = 1700, メーカー = Maker.A }, new { 品番 = 215, 船種 = "航空母艦", 品名 = "信濃 しなの", 税込価格 = 2940, 本体価格 = 2800, メーカー = Maker.T }, new { 品番 = 442, 船種 = "駆逐艦", 品名 = "陽炎 かげろう", 税込価格 = 1050, 本体価格 = 1000, メーカー = Maker.A } }; var target = new TypedXsvData<ShipModel>(new[] { "," }, isAutoBinding: true); using (var reader = new System.IO.StringReader(data)) { target.Read(reader); } foreach (var x in target.Rows.Zip(expected, (a, b) => new { row = a, exp = b })) { Assert.AreEqual(x.exp.品番, x.row.Fields.品番); Assert.AreEqual(x.exp.船種, x.row.Fields.船種); Assert.AreEqual(x.exp.品名, x.row.Fields.品名); Assert.AreEqual(x.exp.税込価格, x.row.Fields.税込価格); Assert.AreEqual(x.exp.本体価格, x.row.Fields.本体価格); Assert.AreEqual(x.exp.メーカー, x.row.Fields.メーカー); } }
public void ReadCsvTest_defaultHeader() { var data = "111,戦艦,榛名 はるな,2625,\"2,500\",H" + Environment.NewLine + "207,航空母艦,大鷹 たいよう,1575,\"1,500\",A" + Environment.NewLine + "321,軽巡洋艦,鬼怒 きぬ,1365,\"1,300\",T"; var expected = new[]{ new { 品番 = 111, 船種 = "戦艦", 品名 = "榛名", ふりがな = "はるな", 税込価格 = 2625, 本体価格 = 2500, メーカー = Maker.H }, new { 品番 = 207, 船種 = "航空母艦", 品名 = "大鷹", ふりがな = "たいよう", 税込価格 = 1575, 本体価格 = 1500, メーカー = Maker.A }, new { 品番 = 321, 船種 = "軽巡洋艦", 品名 = "鬼怒", ふりがな = "きぬ", 税込価格 = 1365, 本体価格 = 1300, メーカー = Maker.T } }; var target = new TypedXsvData<ShipModelB>( new XsvDataSettings() { HeaderExists = false, Delimiters = new[] { ",", " " }, DefaultColumnName = "defaultColumn_" }, isAutoBinding: true); using (var reader = new StringReader(data)) { target.Read(reader); } foreach (var x in target.Rows.Zip(expected, (a, b) => new { row = a, exp = b })) { Assert.AreEqual(x.exp.品番, x.row["defaultColumn_0"].AsInt32()); Assert.AreEqual(x.exp.船種, x.row["defaultColumn_1"].AsString()); Assert.AreEqual(x.exp.品名, x.row["defaultColumn_2"].AsString()); Assert.AreEqual(x.exp.ふりがな, x.row["defaultColumn_3"].AsString()); Assert.AreEqual(x.exp.税込価格, x.row["defaultColumn_4"].AsInt32()); Assert.AreEqual(x.exp.本体価格, x.row["defaultColumn_5"].AsInt32(NumberStyles.Currency)); Assert.AreEqual(x.exp.メーカー, x.row["defaultColumn_6"].AsEnum<Maker>()); } target.Settings.HeaderExists = false; target.Settings.HeaderStrings = new[] { "品番", "船種", "品名", "ふりがな", "税込価格", "本体価格", "メーカー" }; using (var reader = new StringReader(data)) { target.Read(reader); } foreach (var x in target.Rows.Zip(expected, (a, b) => new { row = a, exp = b })) { Assert.AreEqual(x.exp.品番, x.row.Fields.品番); Assert.AreEqual(x.exp.船種, x.row.Fields.船種); Assert.AreEqual(x.exp.品名, x.row.Fields.品名); Assert.AreEqual(x.exp.ふりがな, x.row.Fields.ふりがな); Assert.AreEqual(x.exp.税込価格, x.row.Fields.税込価格); Assert.AreEqual(x.exp.本体価格, x.row.Fields.本体価格); Assert.AreEqual(x.exp.メーカー, x.row.Fields.メーカー); } }
public void ReadXsvTest_eventHandler() { var data = "品番,船種,品名,税込価格_千円,本体価格,メーカー" + Environment.NewLine + "103,戦艦,山城 やましろ,1.785千円,\"1,700¥\",A" + Environment.NewLine + "215,航空母艦,信濃 しなの,2.940千円,\"2,800¥\",T" + Environment.NewLine + "442,駆逐艦,陽炎 かげろう,1.050千円,\"1,000¥\",A" + Environment.NewLine; var expected = new[]{ new { 品番 = 103, 船種 = "戦艦", 品名 = "山城 やましろ", 税込価格_千円 = 1.785, 本体価格 = 1700, メーカー = Maker.A }, new { 品番 = 215, 船種 = "航空母艦", 品名 = "信濃 しなの", 税込価格_千円 = 2.940, 本体価格 = 2800, メーカー = Maker.T }, new { 品番 = 442, 船種 = "駆逐艦", 品名 = "陽炎 かげろう", 税込価格_千円 = 1.050, 本体価格 = 1000, メーカー = Maker.A } }; var csv = new TypedXsvData<ShipModelC>(new[] { "," }, isAutoBinding: true); csv.Attached += (o, e) => { var numFormat = (NumberFormatInfo)CultureInfo.CurrentCulture.NumberFormat.Clone(); numFormat.CurrencySymbol = "¥"; e.Fields.本体価格 = e.Row["本体価格"].AsInt32(NumberStyles.Currency, numFormat); numFormat.CurrencySymbol = "千円"; e.Fields.税込価格_千円 = e.Row["税込価格_千円"].AsDouble(NumberStyles.Currency, numFormat); }; csv.Updated += (o, e) => { e.Row["税込価格_千円"] = new XsvField(e.Fields.税込価格_千円, "0.000千円"); e.Row["本体価格"] = new XsvField(e.Fields.本体価格, "0,000¥"); e.Row["メーカー"] = new XsvField(e.Fields.メーカー); }; using (var reader = new System.IO.StringReader(data)) { csv.Read(reader); } foreach (var x in csv.Rows.Zip(expected, (a, b) => new { row = a, exp = b })) { Assert.AreEqual(x.exp.品番, x.row.Fields.品番); Assert.AreEqual(x.exp.船種, x.row.Fields.船種); Assert.AreEqual(x.exp.品名, x.row.Fields.品名); Assert.AreEqual(x.exp.税込価格_千円, x.row.Fields.税込価格_千円); Assert.AreEqual(x.exp.本体価格, x.row.Fields.本体価格); Assert.AreEqual(x.exp.メーカー, x.row.Fields.メーカー); } var sb = new StringBuilder(); using (var writer = new StringWriter(sb)) { csv.Write(writer, ","); Assert.AreEqual(data, sb.ToString()); } }