ile çıkışsız çift tırnak içeren alanlar ile başa çıkmak TextFieldParser kullanarak bir CSV dosyasını almaya çalışıyorum. Belirli bir CSV dosyası, standart olmayan biçimlendirmesi nedeniyle sorunlara neden oluyor. Söz konusu CSV'nin alanları çift tırnak içine alınmış. Sorun, belirli bir alan içinde ek bir çift çıkışsız çift tırnak olduğunda görünür.TextFieldParser
Sorunu vurgulayan aşırı basitleştirilmiş bir test vakası. Çalıştığım gerçek CSV dosyaları, hepsi aynı şekilde biçimlendirilmiş değil ve düzinelerce alandan oluşuyor, bunlardan herhangi biri muhtemelen bu zor biçimlendirme sorunlarını içeriyor olabilir.
TextReader reader = new StringReader("\"Row\",\"Test String\"\n" +
"\"1\",\"This is a test string. It is parsed correctly.\"\n" +
"\"2\",\"This is a test string with a comma, which is parsed correctly\"\n" +
"\"3\",\"This is a test string with double \"\"double quotes\"\". It is parsed correctly\"\n" +
"\"4\",\"This is a test string with 'single quotes'. It is parsed correctly\"\n" +
"5,This is a test string with fields that aren't enclosed in double quotes. It is parsed correctly.\n" +
"\"6\",\"This is a test string with single \"double quotes\". It can't be parsed.\"");
using (TextFieldParser parser = new TextFieldParser(reader))
{
parser.Delimiters = new[] { "," };
while (!parser.EndOfData)
{
string[] fields= parser.ReadFields();
Console.WriteLine("This line was parsed as:\n{0},{1}",
fields[0], fields[1]);
}
}
düzgün TextFieldParser kullanarak biçimlendirme bu tip bir CSV ayrıştırmak için yine de var mı?
Düzeltmeye çalışmamanız çok önemlidir. Bu uzun bir süre için kötü verilerden sizi sorumlu kılacaktır. Yanlış biçimlendirilmiş olduğu için dosyayı reddedin. Bu konuda sizi rahatsız ediyorsa, RFC-4180 uyumlu olmadığını belirtin. Bunu kolayca düzeltebilecek başka bir programcı var. –
@HansPassant Bu, ideal ve "uygun" eylem rotası olsa da, çoğu zaman bir seçeneğimiz yok, örneğin kontrolümüz olmayan bir API'den dosya alırken veya önemli ve ihtiyaç duyduğumuz bir müşteride sadece "çalışmasını" sağlamak. – richard