Oppure

Loading
05/09/16 10:30
fosforo
Ciao a tutti.

Ho un file CSV formattato MAC.
Ogni colonna del file è suddivisa da ; e non ho problemi.
Alla fine di ogni riga c'è un CR.
Purtroppo dentro una colonna ho una serie di celle che contengono un accapo che viene identificato con CR LF.
Questo accapo mi incasina la lettura del file perché la mia riga che identifica il Carriage Return pensa che la riga sia finita.
Ho tentato un po' di tutto con "split(/\r\n|\n|\r/)" ma non riesco a mantenere la formattazione giusta.

Grazie anticipatamente.
aaa
05/09/16 11:59
GN
Allora, se ho ben capito parsi il csv scorrendo carattere per carattere e facendo avanzare l'indice di colonna quando trova una virgola e l'indice di riga quando trova un CR (riportando quello di colonna a zero). Però vuoi che CR LF non venga riconosciuto come fine riga.

Una prima soluzione che mi viene in mente sarebbe di sostituire tutti i CR LF con degli LF in modo che il parser non li prenda come fine della riga, e poi eventualmente sostituirli di nuovo con CR LF se necessario. Ad es. se la stringa si chiama csv
csv = csv.Replace("\r\n", "\n")

Semplice ma dal punto di vista delle prestazioni penso che non sia certo il modo migliore (immagino che l'implementazione di string.replace scorra tutta la stringa carattere per carattere). In alternativa potresti modificare il codice che fa il parsing in modo che quando arriva ad un CR prima di incrementare il contatore delle righe legge il carattere successivo (dopo aver verificato che non sia l'ultimo carattere della stringa) e fa l'incremento solo se questo non è un LF.
aaa
05/09/16 12:53
fosforo
Grazie GN

Ci provo.
aaa