Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - Capire come dividere una stringa
Forum - C# / VB.NET - Capire come dividere una stringa

Avatar
fosforo (Normal User)
Expert


Messaggi: 391
Iscritto: 06/04/2009

Segnala al moderatore
Postato alle 12:30
Lunedì, 05/09/2016
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.

PM Quote
Avatar
GN (Member)
Guru


Messaggi: 772
Iscritto: 30/04/2011

Segnala al moderatore
Postato alle 13:59
Lunedì, 05/09/2016
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
Codice sorgente - presumibilmente Plain Text

  1. 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.

PM Quote
Avatar
fosforo (Normal User)
Expert


Messaggi: 391
Iscritto: 06/04/2009

Segnala al moderatore
Postato alle 14:53
Lunedì, 05/09/2016
Grazie GN

Ci provo.

PM Quote