|
View:
New views
4 Messages
—
Rating Filter:
Alert me
|
|
|
Regexp pour CSV malforméSalut à tous !
j'ai un petit soucis avec un csv malformé et je commence à m'arracher les cheveux, donc je viens vous demander votre avis. J'ai des lignes de ce type là : blablabla, plop, "une jolie, description", 12, , , 5 Forcément quand je mets ça dans fastercsv ou équivalent, ça explose. J'ai donc cherché du côté des regexp, mais j'ai rien trouvé qui m'aide vraiment. J'ai fait tout un tas d'essais mais n'étant pas un gourou à ce niveau là, je n'arrive pas à grand chose :/ Si quelqu'un a une solution pour soit splitter la ligne correctement ou simplement la "normaliser" pour que ça passe dans un parser CSV, ça serait vraiment cool ! merci :) -- ,= ,-_-. =. Loïc Guitaut ((_/)o o(\_)) http://www.belfalas.org `-'(. .)`-' Jabber ID : Flink@... \_/ GnuPG KeyID : 0xA78CD85D |
|
|
Re: Regexp pour CSV malformé2009/10/13 Loïc Guitaut <flink@...>: > Salut à tous ! > > j'ai un petit soucis avec un csv malformé et je commence à m'arracher les > cheveux, donc je viens vous demander votre avis. > > J'ai des lignes de ce type là : > > blablabla, plop, "une jolie, description", 12, , , 5 > > Forcément quand je mets ça dans fastercsv ou équivalent, ça explose. J'ai donc > cherché du côté des regexp, mais j'ai rien trouvé qui m'aide vraiment. J'ai > fait tout un tas d'essais mais n'étant pas un gourou à ce niveau là, je > n'arrive pas à grand chose :/ > > Si quelqu'un a une solution pour soit splitter la ligne correctement ou > simplement la "normaliser" pour que ça passe dans un parser CSV, ça serait > vraiment cool ! > Il s'agit pourtant là d'une chaine correctement formée : une champ d'une entrée CSV (une cellule donc) peut contenir des virgules (le séparateur) voir même des sauts de ligne. Il convient alors d'isoler la cellule entre guillemets. -- http://fabien.jakimowicz.com Sent from Paris, France --~--~---------~--~----~------------~-------~--~----~ Vous avez reçu ce message, car vous êtes abonné au groupe "Railsfrance" de Google Groups. Pour transmettre des messages à ce groupe, envoyez un e-mail à l'adresse railsfrance@... Pour résilier votre abonnement envoyez un e-mail à l'adresse railsfrance-unsubscribe@... -~----------~----~----~----~------~----~------~--~--- |
|
|
Re: Regexp pour CSV malforméLe mardi 13 octobre 2009 16:04:20, Fabien Jakimowicz a écrit :
> 2009/10/13 Loïc Guitaut <flink@...>: > > Salut à tous ! > > > > j'ai un petit soucis avec un csv malformé et je commence à m'arracher les > > cheveux, donc je viens vous demander votre avis. > > > > J'ai des lignes de ce type là : > > > > blablabla, plop, "une jolie, description", 12, , , 5 > > > > Forcément quand je mets ça dans fastercsv ou équivalent, ça explose. J'ai > > donc cherché du côté des regexp, mais j'ai rien trouvé qui m'aide > > vraiment. J'ai fait tout un tas d'essais mais n'étant pas un gourou à ce > > niveau là, je n'arrive pas à grand chose :/ > > > > Si quelqu'un a une solution pour soit splitter la ligne correctement ou > > simplement la "normaliser" pour que ça passe dans un parser CSV, ça > > serait vraiment cool ! > > Il s'agit pourtant là d'une chaine correctement formée : une champ > d'une entrée CSV (une cellule donc) peut contenir des virgules (le > séparateur) voir même des sauts de ligne. Il convient alors d'isoler > la cellule entre guillemets. > guillemets. En tout cas les parsers CSV que j'ai tester fonctionnent tous comme ça. Mais bon c'est pas très grave, juste après avoir posé la question, j'ai trouvé la regexp magique grâce à mon ami google :) (pourtant c'est pas faut d'avoir cherché) Pour info, avec ça, ça marche : /,(?=(?:[^\"]*\"[^\"]*\")*(?![^\"]*\"))/ Et voilà ! -- ,= ,-_-. =. Loïc Guitaut ((_/)o o(\_)) http://www.belfalas.org `-'(. .)`-' Jabber ID : Flink@... \_/ GnuPG KeyID : 0xA78CD85D |
|
|
Re: Regexp pour CSV malforméBonjour Joïc, J'ai eu le même problème avec un CSV où il manquait même des colonnes ! Loïc Guitaut wrote: > Le mardi 13 octobre 2009 16:04:20, Fabien Jakimowicz a écrit : >> > Forcément quand je mets ça dans fastercsv ou équivalent, ça >> explose. J'ai >> séparateur) voir même des sauts de ligne. Il convient alors d'isoler >> la cellule entre guillemets. C'est une solutions. > > Pour info, avec ça, ça marche : > /,(?=(?:[^\"]*\"[^\"]*\")*(?![^\"]*\"))/ > > Et voilà ! Je suis resté classique. La partie qui m'interesse est un tableau de nombre. La réponse est tardive, mais je n'ai fais ça que récemment. ======================================================= requier 'csv' NAME = "fichier_a_traiter.txt" # Ouverture du fichier CVS avec ';' pour séparateur. reader = CSV.open(NAME,'r',';') # Il faut sauter les 12 premières lignes qui sont du commentaire. header = reader 12.times do header=reader.shift end puts "\nDerniere ligne du Header pour controle :\n" p header # Création des tableau à partir du fichier et conversion du # séparateur décimal : ',' -> '.'. puts "\n\nTraitement du fichier de donnees : '#{NAME}'.\n" tab_a = [] tab_b = [] tab_c = [] ascon = [] # Lecture du fichier et traitement de chaque ligne. reader.each do |row| tab_a << row[3].tr(',','.').to_f tab_b << row[5].tr(',','.').to_f tab_c << 1000.0*row[4].tr(',','.').to_f end reader.close ======================================================= Randy. -- Posted via http://www.ruby-forum.com/. --~--~---------~--~----~------------~-------~--~----~ Vous avez reçu ce message, car vous êtes abonné au groupe "Railsfrance" de Google Groups. Pour transmettre des messages à ce groupe, envoyez un e-mail à l'adresse railsfrance@... Pour résilier votre abonnement envoyez un e-mail à l'adresse railsfrance-unsubscribe@... -~----------~----~----~----~------~----~------~--~--- |
| Free embeddable forum powered by Nabble | Forum Help |