Csvhelper: ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€ ๊ตฌ๋ฌธ ๋ถ„์„

์— ๋งŒ๋“  2014๋…„ 07์›” 03์ผ  ยท  3์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: JoshClose/CsvHelper

์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๋ฅผ ๋ช…ํ™•ํžˆ ํ•˜๋Š” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐ ํ•ด์•ผ ํ•˜๋Š” pull ์š”์ฒญ์„ ๋ณด์•˜์ง€๋งŒ ์—ฌ์ „ํžˆ ์ถฉ๋ถ„ํ•œ ์œ ์—ฐ์„ฑ์„ ์ œ๊ณตํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

ํ˜„์žฌ ์‚ฌ์šฉ์ž์—๊ฒŒ ์˜ค๋ฅ˜์— ๋Œ€ํ•œ ๋” ๋‚˜์€ ์ˆ˜์ค€์˜ ์„ธ๋ถ€ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ž‘์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

``` C#
var e = ์ƒˆ ๋ชฉ๋ก();
csvReader.Configuration.ReadingExceptionCallback = (์˜ˆ, ํ–‰) =>
{
foreach(ex.Data.Values์˜ var ์˜ค๋ฅ˜)
{
var ์ •๋ณด = error.ToString().Split(new[] { "\n", "\r\n" }, StringSplitOptions.RemoveEmptyEntries);
var ๊ฐ’ = ์ •๋ณด[4].Split(':')[1].Trim();
var ํ•„๋“œ = ์ •๋ณด[3].Split(':')[1].Trim();
e.Add(string.Format("ํ–‰ {1}, ํ•„๋“œ {2}์—์„œ ๊ฐ’ {0}์„(๋ฅผ) ์ฝ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.",
๊ฐ’, ํ–‰.ํ–‰, ํ•„๋“œ));
}
};
// e๋ฅผ ์›นํŽ˜์ด์ง€๋กœ ๋ฐ˜ํ™˜(์˜ˆ: JSON)

This is relatively ok. It gives information where exactly parsing error has occured. However, as you can see, digging this information is ugly since I have to parse string to get the value and the field name. It would be nice if this information could be exposed via properties so that I could write something like this:

``` c#
csvReader.Configuration.ReadingExceptionCallback = (ex, row) =>
{
    foreach (var error in row.Errors)
    {
        e.Add(string.Format("Could not read value {0} in row {1}, field {2}.",
            error.Value, error.Row, error.FieldName));
    }
};

๊ทธ๋Ÿฌ๋‚˜ ์œ„๋Š” ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค ... ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๋” ์ค‘์š”ํ•œ ๊ฒƒ์€ ๋‹ค์Œ ์š”์ฒญ์ž…๋‹ˆ๋‹ค.
๋˜ํ•œ ํŒŒ์‹ฑ์ด ์‹คํŒจํ•œ ์ด์œ ์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์œผ๋ฉด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.
ํ•„๋“œ๊ฐ€ "๋นจ๊ฐ„์ƒ‰" ๋˜๋Š” "ํŒŒ๋ž€์ƒ‰" ๊ฐ’๋งŒ ํ—ˆ์šฉํ•˜์ง€๋งŒ ์‚ฌ์šฉ์ž๊ฐ€ "๋…ธ๋ž€์ƒ‰"์„ ์ž…๋ ฅํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

c# // in the MyClassMap : CsvClassMap<MyClass> class Map(x => x.Color).ErrorMessage("Accepted values are 'Red' and 'Blue'"); ... // in the ReadingExceptionCallback e.Add(string.Format("Could not read value {0} in row {1}, field {2}. {3}", error.Value, error.Row, error.FieldName, error.Message));

์ด ๊ตฌ๋ฌธ์€ ๊ฐœ๋ฐœ์ž์—๊ฒŒ ๋งŽ์€ ์œ ์—ฐ์„ฑ์„ ์ œ๊ณตํ•˜๊ณ  ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ช…ํ™•ํ•œ ํ”ผ๋“œ๋ฐฑ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

๋„ค ์ƒ๊ฐ์„ ๋งํ•ด๋ด.

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

์ด๊ฒƒ์€ ํฅ๋ฏธ๋กœ์šด ์•„์ด๋””์–ด์ž…๋‹ˆ๋‹ค. ์ง€๊ธˆ์€ ์ด๊ฒƒ์„ ๊ธฐ๋Šฅ์œผ๋กœ ํ‘œ์‹œํ•˜๊ณ  ๋‚˜์ค‘์— ์ž์„ธํžˆ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

๋ชจ๋“  3 ๋Œ“๊ธ€

์ด๊ฒƒ์€ ํฅ๋ฏธ๋กœ์šด ์•„์ด๋””์–ด์ž…๋‹ˆ๋‹ค. ์ง€๊ธˆ์€ ์ด๊ฒƒ์„ ๊ธฐ๋Šฅ์œผ๋กœ ํ‘œ์‹œํ•˜๊ณ  ๋‚˜์ค‘์— ์ž์„ธํžˆ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

์ด ๊ธฐ๋Šฅ ์š”์ฒญ์„ ๋‘ ๋ฒˆ์งธ๋กœ ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

์—ฌ๊ธฐ๊นŒ์ง€ ์™”์œผ๋‹ˆ ๊ฐ„๋‹จํžˆ ๊ฐ์‚ฌ์˜ ์ธ์‚ฌ๋ฅผ ์ „ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. CsvHelper๋Š” ์—ฌ๋Ÿฌ ์ˆ˜์ค€์—์„œ ํ›Œ๋ฅญํ•ฉ๋‹ˆ๋‹ค.

3.0์—์„œ๋Š” ๊ธฐ๋ณธ CsvHelperException ๊ฐœ์ฒด์— ๋ชจ๋“  ๊ฐ’์— ๋Œ€ํ•œ ์†์„ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ฝœ๋ฐฑ์€ ๋‹ค์‹œ ์ค„ ๊ฒƒ์ด๋‹ค CsvHelperException ๋Œ€์‹  Exception . 3.0 ๋ฒ ํƒ€๋Š” NuGet์— ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰