Этот простой оператор LINQ анализирует ваш входной файл в последовательность записей и записывает каждую запись в формате CSV в выходной файл (при условии, что количество и порядок полей в каждой записи одинаков):
File.WriteAllLines("output.csv", File
.ReadLines("input.txt")
.GroupDelimited(line => line == "#")
.Select(g => string.Join(",", g
.Select(line => string.Join(line
.Substring(line.IndexOf(": ") + 1)
.Trim()
.Replace("\"", "\"\""), "\"", "\"")))));
Вывод:
"TIFFE","Thermal Systems Integration for Fuel Economy","233826","CP – FP"
"STREAMLINE","Strategic Research For Innovative Marine Propulsion Concepts","233896","CP – FP"
Вспомогательный метод:
static IEnumerable<IEnumerable<T>> GroupDelimited<T>(
this IEnumerable<T> source, Func<T, bool> delimiter)
{
var g = new List<T>();
foreach (var x in source)
{
if (delimiter(x))
{
yield return g;
g = new List<T>();
}
else
{
g.Add(x);
}
}
yield return g;
}