Sometimes when working with C# you discover some hidden gems. Some of them very useful, other ones a little bit harder to find a good way to benefit from their functionality. One of those hidden gems that I discovered some days ago is the TextFieldParser class.
This class is well hidden in the Microsoft.VisualBasic namespace – which makes it not very accessible for the C# developer – although there’s nothing VB.NET specific about it. It makes it very easy to process filetypes like CSV and similar formats.
A quick sample:
1: using (var csvFile = new TextFieldParser(myFilePath)
2: {
3: csvFile.TextFieldType = FieldType.Delimited;
4: csvFile.SetDelimiters(",");
5: csvFile.CommentTokens = new[] { "HEADER" };
6:
7: while (!csvFile.EndOfData)
8: {
9: string[] fieldArray;
10: try
11: {
12: fieldArray = csvFile.ReadFields();
13: }
14: catch (Microsoft.VisualBasic.FileIO.MalformedLineException ex)
15: {
16: // TODO: Handle exception
17: continue;
18: }
19: // TODO: process values in fieldArray
20: }
21: }
Some characteristics of this class:
- There are several constructor overloads, so you can point it to a file path or a stream or TextReader.
- TextFieldParser implements IDisposable, so you can use it in a "using" block to automatically close the file or stream when finished.
- The delimiter value can be specified using the SetDelimiters method.
- The CommentTokens property is used to tell TextFieldParser to ignore lines where the text begins with one of the specified strings.