public void ParseTest() { const string quot = "\""; const string quot2 = quot + quot; const string ret = "\r\n"; const string sep = ";"; const string sep2 = ","; string[] data = { "columnA" + sep, "columnB" + sep2, "columnC" + sep, "columnD" + sep2, "columnE" + ret, " リンゴ " + sep2, "" + sep, (quot2 + "み" + quot2 + "かん").Enclose(quot) + sep2, ("バナ" + ret + "ナ").Enclose(quot) + sep, " パイナップル " + sep + ret, "" + sep, "" + sep2, "" + sep2, "" + sep, "" + ret, " ABCD ".Enclose(quot) + sep, ("E" + sep + "FG").Enclose(quot) + sep2, ("HIJ" + ret + "K" + ret + ret + "LMN").Enclose(quot) + sep, "OPQR"+sep2, "" }; var testData = data.ConcatWith(""); Console.WriteLine(testData); Console.WriteLine(""); using (var reader = new System.IO.StringReader(testData)) { var target = new XsvData<XsvDataRow>(new[] { sep, sep2 }); target.Read(reader); foreach (var row in target.Rows) { Console.WriteLine(row.ToString() + " <<"); } Console.WriteLine(""); foreach (var row in target.Rows) { Console.WriteLine(row.OutputFields(new[] { ":" }, ":") + " <<"); } var sb = new StringBuilder(); using (var writer = new StringWriter(sb)) { target.Write(writer); } Console.WriteLine("----------"); Console.WriteLine(sb.ToString()); } }
public void ReadCsvTest_inhelitedXsvDataRow() { var expected = new[] { new { 品番 = 110, 船種 = "戦艦", 品名 = "比叡 ひえい", 税込価格 = 2625, 本体価格 = 2500, メーカー = Maker.H }, new { 品番 = 119, 船種 = "航空戦艦", 品名 = "伊勢 いせ", 税込価格 = 3360, 本体価格 = 3200, メーカー = Maker.H }, new { 品番 = 216, 船種 = "航空母艦", 品名 = "瑞鳳 ずいほう", 税込価格 = 2100, 本体価格 = 2000, メーカー = Maker.H }, new { 品番 = 320, 船種 = "軽巡洋艦", 品名 = "名取 なとり", 税込価格 = 1365, 本体価格 = 1300, メーカー = Maker.T }, new { 品番 = 334, 船種 = "重巡洋艦", 品名 = "那智 なち", 税込価格 = 1890, 本体価格 = 1800, メーカー = Maker.H }, new { 品番 = 0, 船種 = "不明", 品名 = "名無し", 税込価格 = -1, 本体価格 = -1, メーカー = Maker.UNKNOWN } }; var target = new XsvData <ShipModelDataRow>(new[] { "," }); using (var reader = new System.IO.StringReader(data2)) { target.Read(reader); } foreach (var x in target.Rows.Zip(expected, (a, b) => new { row = a, exp = b })) { Assert.AreEqual(x.exp.品番, x.row.品番); Assert.AreEqual(x.exp.船種, x.row.船種); Assert.AreEqual(x.exp.品名, x.row.品名); Assert.AreEqual(x.exp.税込価格, x.row.税込価格); Assert.AreEqual(x.exp.本体価格, x.row.本体価格); Assert.AreEqual(x.exp.メーカー, x.row.メーカー); } }
public void ReadCsvTest_indexer() { var expected = new[] { new { 品番 = 110, 船種 = "戦艦", 品名 = "比叡 ひえい", 税込価格 = 2625, 本体価格 = 2500, メーカー = Maker.H }, new { 品番 = 119, 船種 = "航空戦艦", 品名 = "伊勢 いせ", 税込価格 = 3360, 本体価格 = 3200, メーカー = Maker.H }, new { 品番 = 216, 船種 = "航空母艦", 品名 = "瑞鳳 ずいほう", 税込価格 = 2100, 本体価格 = 2000, メーカー = Maker.H }, new { 品番 = 320, 船種 = "軽巡洋艦", 品名 = "名取 なとり", 税込価格 = 1365, 本体価格 = 1300, メーカー = Maker.T }, new { 品番 = 334, 船種 = "重巡洋艦", 品名 = "那智 なち", 税込価格 = 1890, 本体価格 = 1800, メーカー = Maker.H }, new { 品番 = 429, 船種 = "駆逐艦", 品名 = "桜 さくら", 税込価格 = 630, 本体価格 = 600, メーカー = Maker.T } }; var target = new XsvData(new XsvDataSettings() { Delimiters = new[] { "," }, HeaderExists = true }); using (var reader = new System.IO.StringReader(data1)) { target.Read(reader); } foreach (var x in target.Rows.Zip(expected, (a, b) => new { row = a, exp = b })) { Assert.AreEqual(x.exp.品番, x.row["品番"].AsInt32()); Assert.AreEqual(x.exp.船種, x.row["船種"].AsString()); Assert.AreEqual(x.exp.品名, x.row["品名"].AsString()); Assert.AreEqual(x.exp.税込価格, x.row["税込価格"].AsInt32()); Assert.AreEqual(x.exp.本体価格, x.row["本体価格"].AsInt32(System.Globalization.NumberStyles.Currency)); Assert.AreEqual(x.exp.メーカー, x.row["メーカー"].AsEnum <Maker>()); } }
public void EditColumnHeaderTest() { string expected = "品番,名前,本体価格,メーカー,品名" + Environment.NewLine + "110,戦艦 比叡 ひえい,\"2,500\",H,比叡 ひえい" + Environment.NewLine + "119,航空戦艦 伊勢 いせ,\"3,200\",H,伊勢 いせ" + Environment.NewLine + "216,航空母艦 瑞鳳 ずいほう,\"2,000\",H,瑞鳳 ずいほう" + Environment.NewLine + "320,軽巡洋艦 名取 なとり,\"1,300\",T,名取 なとり" + Environment.NewLine + "334,重巡洋艦 那智 なち,\"1,800\",H,那智 なち" + Environment.NewLine + "xxx,不明 名無し,xxx,xxx," + Environment.NewLine; var target = new XsvData <ShipModelDataRow>(new[] { "," }); using (var reader = new System.IO.StringReader(data2)) { target.Read(reader); } target.AddColumnHeader("名前"); foreach (var row in target.Rows) { row["名前"] = new XsvField(row.船種 + " " + row.品名); } target.RemoveColumnHeader("税込価格"); target.RemoveColumnHeader("船種"); target.SwapColumnHeader("品名", "名前"); var sb = new StringBuilder(); using (var writer = new StringWriter(sb)) { target.Write(writer, ",", new XsvWriteSettings() { OutputsHeader = true, SynchronisesColumn = true, UpdatesField = false }); } Console.Write(sb.ToString()); Assert.AreEqual(expected, sb.ToString()); }
public void AddColumnHeaderTest() { var expected = new[] { new { 品番 = 110, 船種 = "戦艦", 品名 = "比叡 ひえい", 税込価格 = 2625, 本体価格 = 2500, メーカー = Maker.H, 前 = "戦艦 比叡 ひえい", コメント = "" }, new { 品番 = 119, 船種 = "航空戦艦", 品名 = "伊勢 いせ", 税込価格 = 3360, 本体価格 = 3200, メーカー = Maker.H, 前 = "航空戦艦 伊勢 いせ", コメント = "" }, new { 品番 = 216, 船種 = "航空母艦", 品名 = "瑞鳳 ずいほう", 税込価格 = 2100, 本体価格 = 2000, メーカー = Maker.H, 前 = "航空母艦 瑞鳳 ずいほう", コメント = "" }, new { 品番 = 320, 船種 = "軽巡洋艦", 品名 = "名取 なとり", 税込価格 = 1365, 本体価格 = 1300, メーカー = Maker.T, 前 = "軽巡洋艦 名取 なとり", コメント = "" }, new { 品番 = 334, 船種 = "重巡洋艦", 品名 = "那智 なち", 税込価格 = 1890, 本体価格 = 1800, メーカー = Maker.H, 前 = "重巡洋艦 那智 なち", コメント = "" }, new { 品番 = 0, 船種 = "不明", 品名 = "名無し", 税込価格 = -1, 本体価格 = -1, メーカー = Maker.UNKNOWN, 前 = "不明 名無し", コメント = "" } }; var target = new XsvData <ShipModelDataRow>(new[] { "," }); using (var reader = new System.IO.StringReader(data2)) { target.Read(reader); } target.AddColumnHeader("名前"); target.AddColumnHeader("コメント"); foreach (var row in target.Rows) { row["名前"] = new XsvField(row.船種 + " " + row.品名); } target.SynchronizeColumns(); foreach (var x in target.Rows.Zip(expected, (a, b) => new { row = a, exp = b })) { Assert.AreEqual(x.exp.品番, x.row.品番); Assert.AreEqual(x.exp.船種, x.row.船種); Assert.AreEqual(x.exp.品名, x.row.品名); Assert.AreEqual(x.exp.税込価格, x.row.税込価格); Assert.AreEqual(x.exp.本体価格, x.row.本体価格); Assert.AreEqual(x.exp.メーカー, x.row.メーカー); Assert.AreEqual(x.exp.前, x.row["名前"].AsString()); Assert.AreEqual(x.exp.コメント, x.row["コメント"].AsString()); } }
public void EditColumnHeaderTest() { string expected = "品番,名前,本体価格,メーカー,品名" + Environment.NewLine + "110,戦艦 比叡 ひえい,\"2,500\",H,比叡 ひえい" + Environment.NewLine + "119,航空戦艦 伊勢 いせ,\"3,200\",H,伊勢 いせ" + Environment.NewLine + "216,航空母艦 瑞鳳 ずいほう,\"2,000\",H,瑞鳳 ずいほう" + Environment.NewLine + "320,軽巡洋艦 名取 なとり,\"1,300\",T,名取 なとり" + Environment.NewLine + "334,重巡洋艦 那智 なち,\"1,800\",H,那智 なち" + Environment.NewLine + "xxx,不明 名無し,xxx,xxx," + Environment.NewLine; var target = new XsvData<ShipModelDataRow>(new[] { "," }); using (var reader = new System.IO.StringReader(data2)) { target.Read(reader); } target.AddColumnHeader("名前"); foreach (var row in target.Rows) { row["名前"] = new XsvField(row.船種 + " " + row.品名); } target.RemoveColumnHeader("税込価格"); target.RemoveColumnHeader("船種"); target.SwapColumnHeader("品名", "名前"); var sb = new StringBuilder(); using (var writer = new StringWriter(sb)) { target.Write(writer, ",", new XsvWriteSettings() { OutputsHeader = true, SynchronisesColumn = true, UpdatesField = false }); } Console.Write(sb.ToString()); Assert.AreEqual(expected, sb.ToString()); }
public void AddColumnHeaderTest() { var expected = new[]{ new { 品番 = 110, 船種 = "戦艦", 品名 = "比叡 ひえい", 税込価格 = 2625, 本体価格 = 2500, メーカー = Maker.H, 名前= "戦艦 比叡 ひえい", コメント=""}, new { 品番 = 119, 船種 = "航空戦艦", 品名 = "伊勢 いせ", 税込価格 = 3360, 本体価格 = 3200, メーカー = Maker.H, 名前= "航空戦艦 伊勢 いせ",コメント=""}, new { 品番 = 216, 船種 = "航空母艦", 品名 = "瑞鳳 ずいほう", 税込価格 = 2100, 本体価格 = 2000, メーカー = Maker.H,名前= "航空母艦 瑞鳳 ずいほう",コメント=""}, new { 品番 = 320, 船種 = "軽巡洋艦", 品名 = "名取 なとり", 税込価格 = 1365, 本体価格 = 1300, メーカー = Maker.T, 名前= "軽巡洋艦 名取 なとり",コメント=""}, new { 品番 = 334, 船種 = "重巡洋艦", 品名 = "那智 なち", 税込価格 = 1890, 本体価格 = 1800, メーカー = Maker.H, 名前= "重巡洋艦 那智 なち",コメント=""}, new { 品番 = 0, 船種 = "不明", 品名 = "名無し", 税込価格 = -1, 本体価格 = -1, メーカー = Maker.UNKNOWN, 名前= "不明 名無し",コメント=""} }; var target = new XsvData<ShipModelDataRow>(new[] { "," }); using (var reader = new System.IO.StringReader(data2)) { target.Read(reader); } target.AddColumnHeader("名前"); target.AddColumnHeader("コメント"); foreach (var row in target.Rows) { row["名前"] = new XsvField(row.船種 + " " + row.品名); } target.SynchronizeColumns(); foreach (var x in target.Rows.Zip(expected, (a, b) => new { row = a, exp = b })) { Assert.AreEqual(x.exp.品番, x.row.品番); Assert.AreEqual(x.exp.船種, x.row.船種); Assert.AreEqual(x.exp.品名, x.row.品名); Assert.AreEqual(x.exp.税込価格, x.row.税込価格); Assert.AreEqual(x.exp.本体価格, x.row.本体価格); Assert.AreEqual(x.exp.メーカー, x.row.メーカー); Assert.AreEqual(x.exp.名前, x.row["名前"].AsString()); Assert.AreEqual(x.exp.コメント, x.row["コメント"].AsString()); } }
public void ReadCsvTest_inhelitedXsvDataRow() { var expected = new[]{ new { 品番 = 110, 船種 = "戦艦", 品名 = "比叡 ひえい", 税込価格 = 2625, 本体価格 = 2500, メーカー = Maker.H }, new { 品番 = 119, 船種 = "航空戦艦", 品名 = "伊勢 いせ", 税込価格 = 3360, 本体価格 = 3200, メーカー = Maker.H }, new { 品番 = 216, 船種 = "航空母艦", 品名 = "瑞鳳 ずいほう", 税込価格 = 2100, 本体価格 = 2000, メーカー = Maker.H}, new { 品番 = 320, 船種 = "軽巡洋艦", 品名 = "名取 なとり", 税込価格 = 1365, 本体価格 = 1300, メーカー = Maker.T }, new { 品番 = 334, 船種 = "重巡洋艦", 品名 = "那智 なち", 税込価格 = 1890, 本体価格 = 1800, メーカー = Maker.H }, new { 品番 = 0, 船種 = "不明", 品名 = "名無し", 税込価格 = -1, 本体価格 = -1, メーカー = Maker.UNKNOWN } }; var target = new XsvData<ShipModelDataRow>(new[] { "," }); using (var reader = new System.IO.StringReader(data2)) { target.Read(reader); } foreach (var x in target.Rows.Zip(expected, (a, b) => new { row = a, exp = b })) { Assert.AreEqual(x.exp.品番, x.row.品番); Assert.AreEqual(x.exp.船種, x.row.船種); Assert.AreEqual(x.exp.品名, x.row.品名); Assert.AreEqual(x.exp.税込価格, x.row.税込価格); Assert.AreEqual(x.exp.本体価格, x.row.本体価格); Assert.AreEqual(x.exp.メーカー, x.row.メーカー); } }
public void ReadCsvTest_indexer() { var expected = new[]{ new { 品番 = 110, 船種 = "戦艦", 品名 = "比叡 ひえい", 税込価格 = 2625, 本体価格 = 2500, メーカー = Maker.H }, new { 品番 = 119, 船種 = "航空戦艦", 品名 = "伊勢 いせ", 税込価格 = 3360, 本体価格 = 3200, メーカー = Maker.H }, new { 品番 = 216, 船種 = "航空母艦", 品名 = "瑞鳳 ずいほう", 税込価格 = 2100, 本体価格 = 2000, メーカー = Maker.H}, new { 品番 = 320, 船種 = "軽巡洋艦", 品名 = "名取 なとり", 税込価格 = 1365, 本体価格 = 1300, メーカー = Maker.T }, new { 品番 = 334, 船種 = "重巡洋艦", 品名 = "那智 なち", 税込価格 = 1890, 本体価格 = 1800, メーカー = Maker.H }, new { 品番 = 429, 船種 = "駆逐艦", 品名 = "桜 さくら", 税込価格 = 630, 本体価格 = 600, メーカー = Maker.T } }; var target = new XsvData(new XsvDataSettings() { Delimiters = new[] { "," }, HeaderExists = true }); using (var reader = new System.IO.StringReader(data1)) { target.Read(reader); } foreach (var x in target.Rows.Zip(expected, (a, b) => new { row = a, exp = b })) { Assert.AreEqual(x.exp.品番, x.row["品番"].AsInt32()); Assert.AreEqual(x.exp.船種, x.row["船種"].AsString()); Assert.AreEqual(x.exp.品名, x.row["品名"].AsString()); Assert.AreEqual(x.exp.税込価格, x.row["税込価格"].AsInt32()); Assert.AreEqual(x.exp.本体価格, x.row["本体価格"].AsInt32(System.Globalization.NumberStyles.Currency)); Assert.AreEqual(x.exp.メーカー, x.row["メーカー"].AsEnum<Maker>()); } }
public void ParseTest() { const string quot = "\""; const string quot2 = quot + quot; const string ret = "\r\n"; const string sep = ";"; const string sep2 = ","; string[] data = { "columnA" + sep, "columnB" + sep2, "columnC" + sep, "columnD" + sep2, "columnE" + ret, " リンゴ " + sep2, "" + sep, (quot2 + "み" + quot2 + "かん").Enclose(quot) + sep2, ("バナ" + ret + "ナ").Enclose(quot) + sep, " パイナップル " + sep + ret, "" + sep, "" + sep2, "" + sep2, "" + sep, "" + ret, " ABCD ".Enclose(quot) + sep, ("E" + sep + "FG").Enclose(quot) + sep2, ("HIJ" + ret + "K" + ret + ret + "LMN").Enclose(quot) + sep, "OPQR" + sep2, "" }; var testData = data.ConcatWith(""); Console.WriteLine(testData); Console.WriteLine(""); using (var reader = new System.IO.StringReader(testData)) { var target = new XsvData <XsvDataRow>(new[] { sep, sep2 }); target.Read(reader); foreach (var row in target.Rows) { Console.WriteLine(row.ToString() + " <<"); } Console.WriteLine(""); foreach (var row in target.Rows) { Console.WriteLine(row.OutputFields(new[] { ":" }, ":") + " <<"); } var sb = new StringBuilder(); using (var writer = new StringWriter(sb)) { target.Write(writer); } Console.WriteLine("----------"); Console.WriteLine(sb.ToString()); } }