Retour chariot et ReadAlllines

Résolu
Guttcanard Messages postés 24 Date d'inscription vendredi 7 décembre 2018 Statut Membre Dernière intervention 27 janvier 2022 - Modifié le 15 mai 2021 à 16:04
Whismeril Messages postés 18416 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 1 juin 2023 - 16 mai 2021 à 11:00
Bonjour,
Mon logiciel fonctionne avec des fichiers csv.
J'arrive a les gérer avec des retour chariots dans les champs (en utilisant les ")
mais quand j'ouvre mon csv avec readalllines, il ne veut rien savoir et considère ce retour chariot (ou line feed, peu importe) comme la fin de l'enregistrement.

Quelqu'un a une solution ?

D'avance merci.
A voir également:

4 réponses

Whismeril Messages postés 18416 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 1 juin 2023 624
Modifié le 16 mai 2021 à 11:00
Alors pour commencer , vbcrlf c'est pas du VB.Net, c'est un "reste" de VB6.
En VB.Net, c'est Environement.NewLine.

Je viens de tester ceci
File.WriteAllText("test.csv", "Test;Test2;""Test" & Environment.NewLine & "multiligne"";test4" + Environment.NewLine & "Ligne2;ligne22;ligne23;ligne24")


Excel me reconnait bien une cellule avec 2 lignes, mais si j'ouvre le fichier avec Notepad++, "il se fait avoir"


Il y a bien 3 lignes affichées et elles sont toutes séparées par CR LF.

Si on fait l'inverse, c'est à dire créer le fichier csv avec Excel et Alt+Entrée pour la cellule multitigne


Notepad++ affiche toujours 3 lignes, mais

Il y'a juste LF à la fin dans la cellule multiligne.

Il suffit donc de lire tout le texte et de le découper par CR LF
Dim lignes As String() = File.ReadAllText("Classeur1.csv").Split({Environment.NewLine}, StringSplitOptions.RemoveEmptyEntries)


Ta solution consiste donc à ne mettre qu'un LF dans tes champs multilignes
    Dim c As Char = Convert.ToChar(10)
    File.WriteAllText("test.csv", "Test;Test2;""Test" & c.ToString() & "multiligne"";test4" & Environment.NewLine & "Ligne2;ligne22;ligne23;ligne24")
    Dim lignes As String() = File.ReadAllText("test.csv").Split({Environment.NewLine}, StringSplitOptions.RemoveEmptyEntries)


Quand j'étais petit, la mer Morte n'était que malade.
George Burns
1
Whismeril Messages postés 18416 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 1 juin 2023 624
15 mai 2021 à 20:11
Bonjour

peux tu poster un exemple représentatif et sans données confidentielles de ton csv, en utilisant les balises de code pour forcer en xml (ça sera mieux que rien)
Ainsi que le code qui te permet d'écrire ce csv, cette fois en forçant basic
0
Guttcanard Messages postés 24 Date d'inscription vendredi 7 décembre 2018 Statut Membre Dernière intervention 27 janvier 2022 1
15 mai 2021 à 20:28
Mon fichier csv est du genre :
champ1;"champ2 & vbcrlf & ligne2";champ3...

pour écrire le csv, j'écris mes données stockées dans un tableau avec la méthode
fichier.WriteLine(chaine)
0
Whismeril Messages postés 18416 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 1 juin 2023 624
15 mai 2021 à 22:01
Ha j’ai oublié le lien pour les balises de codes…
https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
0