Sto tentando di importare un file CSV utilizzando TextFieldParser. Un particolare file CSV mi sta causando problemi a causa della sua formattazione non standard. Il CSV in questione ha i suoi campi racchiusi tra virgolette. Il problema si presenta quando c'è un ulteriore set di virgolette doppie senza escape in un particolare campo.Gestione dei campi contenenti doppie virgolette senza escape con TextFieldParser
Ecco un caso di test troppo semplificato che evidenzia il problema. I file CSV effettivi con cui ho a che fare non sono tutti formattati allo stesso modo e hanno dozzine di campi, ognuno dei quali può contenere questi problemi di formattazione probabilmente complicati.
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]);
}
}
È comunque necessario analizzare correttamente un CSV con questo tipo di formattazione utilizzando TextFieldParser?
È molto importante non provare a risolverlo. Questo ti renderà responsabile per i cattivi dati per molto tempo. Rifiuta il file per essere formattato in modo errato. Se ti mettono in imbarazzo, fai notare che non è compatibile con RFC-4180. C'è un altro programmatore da qualche parte che può facilmente risolvere questo problema. –
@HansPassant Mentre questa è la linea di condotta ideale e "corretta", molte volte non abbiamo una scelta, ad esempio quando consumiamo file da un'API su cui non abbiamo alcun controllo, o un cliente che è importante e di cui abbiamo bisogno semplicemente "farlo funzionare". – richard