/// <summary> /// Reads a CSV file into a table of strings. /// </summary> /// <param name="filename">Name of CSV file to read.</param> /// <param name="encodingType">Encoding type CSV file was created in.</param> /// <returns>Contents of CSV file as a 2D list of strings.</returns> public static List <List <string> > ReadCSVFile(string filename, EncodingType encodingType) { // Read the source file and combine multiline rows: var sourceLines = new List <string>(); using (var file = new StreamReader(filename, EncodingTypeTools.GetEncoding(encodingType))) { string line; while ((line = file.ReadLine()) != null) { sourceLines.Add(line.TrimEnd()); } } CombineMultilineSourceLines(sourceLines); if (sourceLines.Count < 1) { return(null); } var content = new List <List <string> >(); while (sourceLines.Count > 0) { var values = GetValues(sourceLines[0]); sourceLines.RemoveAt(0); if (values == null || values.Length == 0) { continue; } var row = new List <string>(); content.Add(row); for (int i = 0; i < values.Length; i++) { row.Add(values[i]); } } return(content); }
/// <summary> /// Writes a table of strings to a CSV file. /// </summary> /// <param name="content">2D list of strings.</param> /// <param name="filename">Filename to write as.</param> /// <param name="encodingType">Encoding type to use.</param> public static void WriteCSVFile(List <List <string> > content, string filename, EncodingType encodingType) { using (var file = new StreamWriter(filename, false, EncodingTypeTools.GetEncoding(encodingType))) { for (int i = 0; i < content.Count; i++) { var row = content[i]; StringBuilder sb = new StringBuilder(); var first = true; for (int j = 0; j < row.Count; j++) { if (!first) { sb.Append(","); } first = false; var cell = row[j]; sb.Append(CleanField(cell)); } file.WriteLine(sb); } } }