Skip to content

Instantly share code, notes, and snippets.

@pierre3
Created March 8, 2014 08:51
Show Gist options
  • Save pierre3/9427513 to your computer and use it in GitHub Desktop.
Save pierre3/9427513 to your computer and use it in GitHub Desktop.
class Program
{
static void Main(string[] args)
{
var data =
"No., Name, Price, Comment" + Environment.NewLine
+ "001, りんご, 98円, 青森産" + Environment.NewLine
+ "002, バナナ, 120円, \" とっても!\r\nお,い,し,い,よ!\"" + Environment.NewLine
+ "" + Environment.NewLine
+ "004, \"うまい棒\"\"めんたい\"\"\", 10円," + Environment.NewLine
+ "005, バナメイ海老, 800円, \"300g\r\n\r\nエビチリに\"";
Console.WriteLine("<< XsvReader.Parse() >>");
foreach (var row in Parse(data))
{
Console.WriteLine(row.ConcatWith(";") + "<n>");
}
Console.WriteLine("");
Console.WriteLine("<< TextFieldParser (TrimWhiteSpace=true) >>");
foreach (var row in ReadFields(data,trimWS:true))
{
Console.WriteLine(row.ConcatWith(";") + "<n>");
}
Console.WriteLine("");
Console.WriteLine("<< TextFieldParser (TrimWhiteSpace=false) >>");
foreach (var row in ReadFields(data,trimWS:false))
{
Console.WriteLine(row.ConcatWith(";") + "<n>");
}
}
static IEnumerable<string[]> Parse(string data)
{
using (var sr = new StringReader(data))
{
var line = sr.ReadLine();
while (line != null)
{
yield return XsvReader.Parse(line, new[] { "," }, () => sr.ReadLine()).ToArray();
line = sr.ReadLine();
}
}
}
static IEnumerable<string[]> ReadFields(string data,bool trimWS)
{
using (var tfp = new Microsoft.VisualBasic.FileIO.TextFieldParser(new StringReader(data)))
{
tfp.Delimiters = new[] { "," };
tfp.TrimWhiteSpace = trimWS;
while (!tfp.EndOfData)
{
yield return tfp.ReadFields();
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment