je voudrai importer des données excel exportées en csv (délimiteur de
champs: ;) mais certains champs posent problème, ayant des \r\n (cas de
cellule sur plusieur lignes dans excel) et donc perl croit que c'est un
"End of Record" et ne charge pas toute la ligne d'un coup dans mon while
(<>) { traitement par ligne }
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Paul GABORIT
À (at) Thu, 03 Jun 2004 16:09:29 +0200, zad massy écrivait (wrote):
je voudrai importer des données excel exportées en csv (délimiteur de champs: ;) mais certains champs posent problème, ayant des rn (cas de cellule sur plusieur lignes dans excel) et donc perl croit que c'est un "End of Record" et ne charge pas toute la ligne d'un coup dans mon while (<>) { traitement par ligne }
'perl' ne croit rien du tout. C'est la manière dont vous avez codé l'analyse de vos fichiers CSV qui vous amène vers ce problème.
Le plus simple est d'utiliser un module tout prêt : Text::CSV (si vous voulez un module pure Perl mais plus lent que le suivant) ou Text::CSV_XS. Ils savent très bien lire des fichiers CSV. Ils vous permettent, entre autres, de définir le séparateur de ligne et de champs, d'indiquer le caractère de "quotation" et celui d'échapement pour pouvoir continuer à utiliser ce caractère de quotation, etc. Pour la lecture d'un fichier CSV, il *faut* utiliser la méthode 'getline' qui sait justement comment retrouver un enregistrement complet (que les champs contiennent ou non des passage à la ligne).
je voudrais donc filtrer avant de lire mon fichier pour obtenir:
1;TOTO;GRAND PERE;1970rn 2;TATA;GRAND MERE ADOPTIVE GENTILLE;1945rn 3;TITI;FILS;1984rn
qui lui serait lu sans problème, mais je ne voit pas quel s///g employé pour virer ses rn (un ou plusieurs) entre deux ".
La doc de Text::CSV_XS donne un exemple intéressant :
"I said, ""Hi!""",Yes,"",2.34,,"1.09"rn
Voici les 5 champs :
1-> I sais, "Hi!" 2-> Yes 3-> 4-> 2.34 5-> 1.09
Aviez-vous pensé à ce cas là ?
-- Paul Gaborit - <http://www.enstimac.fr/~gaborit/> Perl en français - <http://www.enstimac.fr/Perl/>
À (at) Thu, 03 Jun 2004 16:09:29 +0200,
zad massy <zadmassy@free.fr> écrivait (wrote):
je voudrai importer des données excel exportées en csv (délimiteur de
champs: ;) mais certains champs posent problème, ayant des rn (cas de
cellule sur plusieur lignes dans excel) et donc perl croit que c'est un "End
of Record" et ne charge pas toute la ligne d'un coup dans mon while (<>) {
traitement par ligne }
'perl' ne croit rien du tout. C'est la manière dont vous avez codé l'analyse
de vos fichiers CSV qui vous amène vers ce problème.
Le plus simple est d'utiliser un module tout prêt : Text::CSV (si vous voulez
un module pure Perl mais plus lent que le suivant) ou Text::CSV_XS. Ils savent
très bien lire des fichiers CSV. Ils vous permettent, entre autres, de définir
le séparateur de ligne et de champs, d'indiquer le caractère de "quotation" et
celui d'échapement pour pouvoir continuer à utiliser ce caractère de
quotation, etc. Pour la lecture d'un fichier CSV, il *faut* utiliser la
méthode 'getline' qui sait justement comment retrouver un enregistrement
complet (que les champs contiennent ou non des passage à la ligne).
À (at) Thu, 03 Jun 2004 16:09:29 +0200, zad massy écrivait (wrote):
je voudrai importer des données excel exportées en csv (délimiteur de champs: ;) mais certains champs posent problème, ayant des rn (cas de cellule sur plusieur lignes dans excel) et donc perl croit que c'est un "End of Record" et ne charge pas toute la ligne d'un coup dans mon while (<>) { traitement par ligne }
'perl' ne croit rien du tout. C'est la manière dont vous avez codé l'analyse de vos fichiers CSV qui vous amène vers ce problème.
Le plus simple est d'utiliser un module tout prêt : Text::CSV (si vous voulez un module pure Perl mais plus lent que le suivant) ou Text::CSV_XS. Ils savent très bien lire des fichiers CSV. Ils vous permettent, entre autres, de définir le séparateur de ligne et de champs, d'indiquer le caractère de "quotation" et celui d'échapement pour pouvoir continuer à utiliser ce caractère de quotation, etc. Pour la lecture d'un fichier CSV, il *faut* utiliser la méthode 'getline' qui sait justement comment retrouver un enregistrement complet (que les champs contiennent ou non des passage à la ligne).
je voudrais donc filtrer avant de lire mon fichier pour obtenir:
1;TOTO;GRAND PERE;1970rn 2;TATA;GRAND MERE ADOPTIVE GENTILLE;1945rn 3;TITI;FILS;1984rn
qui lui serait lu sans problème, mais je ne voit pas quel s///g employé pour virer ses rn (un ou plusieurs) entre deux ".
La doc de Text::CSV_XS donne un exemple intéressant :
"I said, ""Hi!""",Yes,"",2.34,,"1.09"rn
Voici les 5 champs :
1-> I sais, "Hi!" 2-> Yes 3-> 4-> 2.34 5-> 1.09
Aviez-vous pensé à ce cas là ?
-- Paul Gaborit - <http://www.enstimac.fr/~gaborit/> Perl en français - <http://www.enstimac.fr/Perl/>
Paul GABORIT
À (at) Thu, 03 Jun 2004 17:06:42 +0200, Paul GABORIT écrivait (wrote):
La doc de Text::CSV_XS donne un exemple intéressant :
"I said, ""Hi!""",Yes,"",2.34,,"1.09"rn
Voici les 5 champs :
1-> I sais, "Hi!" 2-> Yes 3-> 4-> 2.34 5-> 1.09
Je corrige ma propre prose :
Voici les 6 champs : 1-> I sais, "Hi!" 2-> Yes 3-> 4-> 2.34 5-> 6-> 1.09
Aviez-vous pensé à ce cas là ?
Au passage dans la solution que vous envisagiez de coder, vous perdez les passages à la ligne présent dans les valeurs d'origine ? Est-ce volontaire ou est-ce une solution de repli ?
-- Paul Gaborit - <http://www.enstimac.fr/~gaborit/> Perl en français - <http://www.enstimac.fr/Perl/>
À (at) Thu, 03 Jun 2004 17:06:42 +0200,
Paul GABORIT <Paul.Gaborit@invalid.invalid> écrivait (wrote):
La doc de Text::CSV_XS donne un exemple intéressant :
"I said, ""Hi!""",Yes,"",2.34,,"1.09"rn
Voici les 5 champs :
1-> I sais, "Hi!"
2-> Yes
3->
4-> 2.34
5-> 1.09
Je corrige ma propre prose :
Voici les 6 champs :
1-> I sais, "Hi!"
2-> Yes
3->
4-> 2.34
5->
6-> 1.09
Aviez-vous pensé à ce cas là ?
Au passage dans la solution que vous envisagiez de coder, vous perdez les
passages à la ligne présent dans les valeurs d'origine ? Est-ce volontaire ou
est-ce une solution de repli ?
--
Paul Gaborit - <http://www.enstimac.fr/~gaborit/>
Perl en français - <http://www.enstimac.fr/Perl/>
À (at) Thu, 03 Jun 2004 17:06:42 +0200, Paul GABORIT écrivait (wrote):
La doc de Text::CSV_XS donne un exemple intéressant :
"I said, ""Hi!""",Yes,"",2.34,,"1.09"rn
Voici les 5 champs :
1-> I sais, "Hi!" 2-> Yes 3-> 4-> 2.34 5-> 1.09
Je corrige ma propre prose :
Voici les 6 champs : 1-> I sais, "Hi!" 2-> Yes 3-> 4-> 2.34 5-> 6-> 1.09
Aviez-vous pensé à ce cas là ?
Au passage dans la solution que vous envisagiez de coder, vous perdez les passages à la ligne présent dans les valeurs d'origine ? Est-ce volontaire ou est-ce une solution de repli ?
-- Paul Gaborit - <http://www.enstimac.fr/~gaborit/> Perl en français - <http://www.enstimac.fr/Perl/>
zad massy
Paul GABORIT wrote:
À (at) Thu, 03 Jun 2004 17:06:42 +0200, Paul GABORIT écrivait (wrote):
La doc de Text::CSV_XS donne un exemple intéressant :
"I said, ""Hi!""",Yes,"",2.34,,"1.09"rn
Voici les 5 champs :
1-> I sais, "Hi!" 2-> Yes 3-> 4-> 2.34 5-> 1.09
Je corrige ma propre prose :
Voici les 6 champs : 1-> I sais, "Hi!" 2-> Yes 3-> 4-> 2.34 5-> 6-> 1.09
Aviez-vous pensé à ce cas là ?
Au passage dans la solution que vous envisagiez de coder, vous perdez les passages à la ligne présent dans les valeurs d'origine ? Est-ce volontaire ou est-ce une solution de repli ?
c'est volontaire, il me gêne
je veux supprimer ces rn entre les deux guillemets (double-quote)
je suis en train de regarder le module
merci de votre réponse
Paul GABORIT wrote:
À (at) Thu, 03 Jun 2004 17:06:42 +0200,
Paul GABORIT <Paul.Gaborit@invalid.invalid> écrivait (wrote):
La doc de Text::CSV_XS donne un exemple intéressant :
"I said, ""Hi!""",Yes,"",2.34,,"1.09"rn
Voici les 5 champs :
1-> I sais, "Hi!"
2-> Yes
3->
4-> 2.34
5-> 1.09
Je corrige ma propre prose :
Voici les 6 champs :
1-> I sais, "Hi!"
2-> Yes
3->
4-> 2.34
5->
6-> 1.09
Aviez-vous pensé à ce cas là ?
Au passage dans la solution que vous envisagiez de coder, vous perdez les
passages à la ligne présent dans les valeurs d'origine ? Est-ce volontaire ou
est-ce une solution de repli ?
c'est volontaire, il me gêne
je veux supprimer ces rn entre les deux guillemets (double-quote)
À (at) Thu, 03 Jun 2004 17:06:42 +0200, Paul GABORIT écrivait (wrote):
La doc de Text::CSV_XS donne un exemple intéressant :
"I said, ""Hi!""",Yes,"",2.34,,"1.09"rn
Voici les 5 champs :
1-> I sais, "Hi!" 2-> Yes 3-> 4-> 2.34 5-> 1.09
Je corrige ma propre prose :
Voici les 6 champs : 1-> I sais, "Hi!" 2-> Yes 3-> 4-> 2.34 5-> 6-> 1.09
Aviez-vous pensé à ce cas là ?
Au passage dans la solution que vous envisagiez de coder, vous perdez les passages à la ligne présent dans les valeurs d'origine ? Est-ce volontaire ou est-ce une solution de repli ?
c'est volontaire, il me gêne
je veux supprimer ces rn entre les deux guillemets (double-quote)