Я использую Microsoft.VisualBasic.FileIO.TextFieldParser
, чтобы прочитать файл csv, отредактировать его, а затем проанализировать.Как сохранить кавычки при анализе файла csv?
Проблема заключается в том, что кавычки не сохраняются после разбора.
Я пробовал использовать parser.HasFieldsEnclosedInQuotes = true;
, но по некоторым причинам он не сохраняет котировки.
Эта проблема разрывов, когда поле содержит цитату, например: Перед
"some, field"
После
some, field
Как два раздельных полей
Вот мой метод
public static void CleanStaffFile()
{
String path = @"C:\file.csv";
String dpath = String.Format(@"C:\file_{0}.csv",DateTime.Now.ToString("MMddyyHHmmss"));
List<String> lines = new List<String>();
if (File.Exists(path))
{
using (TextFieldParser parser = new TextFieldParser(path))
{
parser.HasFieldsEnclosedInQuotes = true;
parser.Delimiters = new string[] { "," };
while (!parser.EndOfData)
{
string[] parts = parser.ReadFields();
if (parts == null)
{
break;
}
if ((parts[12] != "") && (parts[12] != "*,116"))
{
parts[12] = parts[12].Substring(0, 3);
}
else
{
parts[12] = "0";
}
lines.Add(string.Join(",", parts));
}
}
using (StreamWriter writer = new StreamWriter(dpath, false))
{
foreach (String line in lines)
writer.WriteLine(line);
}
}
MessageBox.Show("CSV file successfully processed :\n");
}
Если поле квалифицированы в кавычках он рассматривает поле как один элемент данных. Если в котировках части данных вам нужно будет использовать другой текстовый определитель. – Romoku
Есть [много] (http://stackoverflow.com/questions/5865747/parsing-csv-file-enclosed-with-quotes-in-c-sharp) из [этих вопросов] (http: // stackoverflow. com/questions/4000415/parsing-csv-file-with-commas-and-quotes-as-deliminators-pin) – Jonesopolis
Итак, вы хотите иметь кавычки после того, как вы изменили его на 'string.Join (", ", parts) '? Тогда это легко, потому что раньше только поля, содержащие разделитель, были обернуты кавычками. Просто добавьте их еще до 'String.Join'. –