Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. 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: 267
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.


Scusate per la figuraccia.
PM Quote
Avatar
GN (Member)
Guru


Messaggi: 770
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: 267
Iscritto: 06/04/2009

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

Ci provo.


Scusate per la figuraccia.
PM Quote