in Amazon.KinesisTap.Core/Utility.cs [595:656]
public static IEnumerable<string> ParseCSVLine(string input, StringBuilder stringBuilder)
{
const char columnSeparator = ',';
if (string.IsNullOrEmpty(input))
{
yield break;
}
stringBuilder.Clear();
int index = 0;
int escapeCount = 0;
for (; index < input.Length; index++)
{
if (input[index] == '"')
{
escapeCount++;
stringBuilder.Append('"');
}
else if (input[index] == columnSeparator)
{
if ((escapeCount % 2) == 0)
{
if (escapeCount == 0)
{
yield return stringBuilder
.ToString();
}
else
{
yield return stringBuilder
.Extract('"')
.Replace(@"""""", @"""");
}
stringBuilder.Clear();
escapeCount = 0;
}
else
{
stringBuilder.Append(columnSeparator);
}
}
else
{
stringBuilder.Append(input[index]);
}
}
if (escapeCount == 0)
{
yield return stringBuilder
.ToString();
}
else
{
yield return stringBuilder
.Extract('"')
.Replace(@"""""", @"""");
}
}