Conversion txt en csv
coucoussa -
Je souhaiterai savoir comment faire pour convertir un fichier.txt sans separateur en un csv.
Quel language devrai-je utiliser par exemple.
Merci .
Configuration: Windows XP Firefox 2.0.0.12
36 réponses
- 1
- 2
Le problème porte sur la conversion d’un fichier texte sans séparateur en CSV et sur le choix du langage de programmation à employer sous Windows XP. Plusieurs propositions évoquent l’usage d’Excel pour importer le fichier et créer les séparateurs par des formules ou des ajustements en colonne, ou encore l’automatisation via VBA. D’autres approches consistent à insérer des séparateurs par positions de début de chaîne et à traiter automatiquement les données sans recourir à Excel, ce qui convient pour de grandes quantités. En cas d’évolution, les échanges évoquent aussi des solutions combinant VBA et paramètres de mise en page, reflétant la variété des méthodes disponibles pour convertir un fichier texte en CSV.
-
Re,
Une autre solution sera alors la suivante :
Ouvir tout simplement le fichier avec excel, pas besoin d'importation ou je ne sais pas quoi encore
En ce cas la 1ère colonne contiendra le fichier.
Il suffit d'insèrer à partir de la colonne 2 des formules
Je me suis arrêté à la 3ème colonneA1 B1 C1 D1 1ère ligne de fichier =GAUCHE(A1;8) =STXT(A1;9;4) =STXT(A1;17;17)
-
euh, il te faut toujours un séparateur, à moins que tu choisisse les espaces entre les mots?
-
He bien justement le problème est que je reçois un fichier texte du distributeur sans séparateur.
Mon but est de faire qqchose pour intégré des séparateur dans mon fichier texte, si possible pas à la main car le fichier fait plus de 1000 ligne^^ .
Il faudrait que je puisse faire cela en utilisant les positions de chaque début de chaine. Sans passez par excel car cela doit etre fait automatiquement.
Merci ^^
(PS je ne demande pas qu'on le face a ma place, juste une idée de comment faire ) -
et bien en gros, tu list ton fichier ligne par ligne
tu compte les caractères quand tu lis la ligne et arrivé au bon emplacement tu ajoutes un caractère et tu continus jusqu'à la fin de la ligne -
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
Salut,
en fonction de la structure de ton texte il faut trouver une règle d'insertion d'un séparateur
ensuite c'est facile avec un script -
sais-tu avec quel language je pourrai faire ca simplement?
J ai essayé en visual c++ pour que l'utilisateur ai une interface pour indiquer le positionnement mais par la suite j'ai aucune fonction pour positionné le curseur puis inserer du texte suivant une meme classe (utiliser pour lire le fichier)
Par exemple j'utilise la classe fileStream pour ouvrir mon fichier et positionné mon curseur mais je n'ai aucune fonction pour inserer du texte . Et dans la classe StreamWriter je n'ai aucune methode pour positionné mon curseur.
:( help :( -
A lami20j :
tu veux dire quoi par regle d'insertion du separateur ?
Et avec quel genre de script je peu faire ca sachant que je travail sous windows :(-
bonjour
voila j'ai eu affaire avec un fichier texte de 65000 ligne.
dans ce fichier deux choses m'interressé une adresse et un nom.
apres la confection d'un petit convertisseur en language java mon probleme est résolu.
je donne le fichier source puis je donne le fichier destination et je lance.
et j'ai le résultat dans le fichier csv ( c'est comme excel) voilà.
je cherche l'adresse et le nom puis entre les deux j'insert un separateur ";" puis j'ecris dans le fichier csv.
tu peux faire ça je pense avec tous les languages, moi j'ai choisie le JAVA .
cordialement- salut,
Voila, j'ai exactement le meme souci que toi. J'ai un fichier plat sans séparateur, et on me demande de le mettre dans excel.
chaque ligne a donc un nombre de caractere prédéfini. Ce que jecherche, c'est comment ajouter le separateur ";" a l'emplacement ou je veux (je dois l'inserer plusieurs fois dans la meme ligne) et aussi je dois le faire sur autant de ligne qu'il y a dans le fichier.
Mais par la suite, j'aimerais savoir comment le convertir en csv ou voir en excel si possible directement a partir de l'application. et on me demande aussi que dans la feuile d'excel, la premiere ligne, il faut rajouter le nom de"s champs.
Voila en résumé, j'ai le même truc a faire que toi, mais je ne m'y connais pas du tout en java, donc si tu pouvais te mettre en contact avec moi, pour m'aider a le faire soit en java, soit en langage c (ou je suis débutant) ce serait tres gentil de ta part
-
-
Salut,
chaque ligne a donc un nombre de caractere prédéfini. Ce que jecherche, c'est comment ajouter le separateur ";" a l'emplacement ou je veux (je dois l'inserer plusieurs fois dans la meme ligne)
Pour insérer le séparateur il faut connaître l'emplacement.
As-tu une règle pour spécfier l'emplacement?!
-
salut,
oui j'ai une regle. je te donne un exemple sans separateur, et le resultat dont j'ai besoin:
exemple de base:
240420090000580601001014183001MAD000000000050.0001001836562027MAD000000000050.0001001870290007MAD000000000000.0001001836562847MAD000000000000.00XX 00123042009DOMCILIATION24042009
resultat voulu:
24042009;0000;5806;01001014183001MAD;000000000;050.00;01001836562027MAD;0000000000;50.00;01001870290007MAD;000000000;000.00;01001836562847MAD;0000000000;00.00;XX; 001;23042009;DOMCILIATION24042009
je precise donc que tout ça se trouve sur une seule ligne dans mon fichier .txt, et j'ai une centaine d eligne comme ça. Ce dont j'ai besoin, c'est peut etre une application (si possible en langage c) qui pourrait me mettre les point virgules.
Merci d'avance, et j'espere que tu pourras m'aider a trouver la solution
-
-
Ne fait pas attention au tiret "-" ils n'existe pas. tous les caractere (chiffe et lettre sont collé)
Merci beaucoup -
Re,
Les champs auront toujours le même nombre de caractères?!
Par exemple
24042009;0000;5806;
1er champ = 8 caractères
2ème champ = 4 caractères
3ème champs = 4 caractères
etc.-
oui oui, les champs ont toujours les memes caractères. En fait il faut une application qui me met les ";" pour que je trouve un moyen encore de convertir mon fichier .txt en .csv etqu'il souvre en excel. est ce qu'il y a moyen aussi dans le code, d'inserer une nouvelle au debut du fichier, pour pouvoir mettre les champs. Par exemple pour:
24042009: c'est une date
ça c'est une premiere chose. Par la suite, si tu as remarqué, il y a 2 partie (entre les ;) ou il n'y a que des zero. La premiere partie ou il y a des zero, je veux que ce soit une colonne vide (dans excel) et la seconde partie ou il y a les zero, je veux pas de colonn du tout.
Désolé, je suis debutant en programmation, et j'ai pas saisi du tout, tout ce qui est manipulation de fichier.
Tu me sera d'une grande aide. et si tu veux, on peut s'echanger nos @ msn, pour etre en direct (enfin si ça te derange pas)
Merci d'avance
-
-
Re,
Tu me sera d'une grande aide. et si tu veux, on peut s'echanger nos @ msn, pour etre en direct (enfin si ça te derange pas)
Je vais regarder ce soir et je vais te répondre ici sur le forum.
Ce n'est pas dans l'ésprit de forum, de répondre en utilisant une messagérie instantanée. Le but étant de faire profiter toute la communauté d'une eventuelle solution.
-
Re,
A vrai dire tu peux le faire directement dans excel s'il fait moins de 65536.
Je ne sais pas combien de lignes il y a dans excel2007.
En ce qui concerne les colonnes avec zéro de toute façon excel va formater
Par exemple si tu as 0000 excel va écrire 0, si tu as 001 excel va écrire 1
En ce qui concerne la suppression ou le fait d'avoir une colonne vide tu peux le faire après l'ouverture de fichier .csv
Mets ton fichier dans C: et appelle le fichier.txt
Ensuite tu n'as qu'à compiler (je l'ai fait avec codeblocks)
Tu obtiendras un fichier fic.csv dans C:#include<stdio.h> #include<stdlib.h> int main() { FILE *f1,*f2; if(NULL==(f1=fopen("c:\\fichier.txt","r"))) return EXIT_FAILURE; if(NULL==(f2=fopen("c:\\fic.csv","w"))) return EXIT_FAILURE; char s[256]; char s1[9],s2[5],s3[5],s4[18],s5[10],s6[7],s7[18],s8[11],s9[6],s10[18]; char s11[10],s12[7],s13[18],s14[11],s15[6],s16[3],s17[4],s18[9],s19[23]; while (fscanf(f1,"%s",s)!=EOF){ sscanf(s,"%8s%4s%4s%17s%9s%6s%17s%10s%5s%17s%9s%6s%17s%10s%5s%2s%3s%8s%22s", s1,s2,s3,s4,s5,s6,s7,s8,s9,s10,s11,s12,s13,s14,s15,s16,s17,s18,s19); fprintf(f2,"%s;%s;%s;%s;%s;%s;%s;%s;%s;%s;%s;%s;%s;%s;%s;%s;%s;%s;%s\n", s1,s2,s3,s4,s5,s6,s7,s8,s9,s10,s11,s12,s13,s14,s15,s16,s17,s18,s19); } fclose(f1); fclose(f2); return EXIT_SUCCESS; }
Au cas où voici aussi le fichier exe https://www.cjoint.com/?geuPNXDqza
CodeBlocks tu peux le télécharger ici codeblocks-8.02mingw-setup.exe
Pour écrire toutes les variables, je ne l'ai pas fait à la main ;-)
J'ai utilisé ton exemple et hop avec un script perl j'ai écrit le code de programme.
Il y a sûrement d'autres moyens de le faire, mais comme tu as dis que tu es débutant, j'ai écrit le code de façon assez compréhensible. Enfin, c'est ça que je crois ;-))
Tu as dit que tous les caractères sont collés. Toutefois j'ai remarqué un espace que j'ai supprimé dans le teste que j'ai fait.
Voici le fichier que j'ai utilisé pour test https://www.cjoint.com/?geuTynS2wr-
salut,
c'est exact, il met bien les point virgule, mais le probleme quand j'ouvre moi meme le fichier fic.csv, il y a un pti probleme.
voici le resultat: https://www.cjoint.com/?gevdJc3eXJ
peux tu me dire a quoi est-ce dû?
par contre, il y a un pti probleme.... quand la personne execute l'application, y a-t-il un moyen de laisser le choix a l'utilisateur de parcourir les fichiers? parce que l'utilisateur doit faire ca chaque jour, etant donné que c un fichier d'une banque, et qu'il recupere le fichier le lendemain matin pour faire la meme procédure.
si c possible, indique moi comment on fit, et j'aimerais bien que tu me donne de bon lien ou je peux apprendre perl, et utiliser code::blocks
jte remercie beaucoup pour ton aide, ca m'avance déja assez dans mon travail
-
-
Re,
Ben, je ne sais pas. Le mieux sera que je puisse tester sur ton fichier.
Ben en ce qui concerne le chois je ne vois pas. Il n'a qu'à le faire après la récupération de fichier, non?!
Perl, tu n'as pas besoin. Je ne l'ai utilisé que pour m'aider à écrire le code vu que je suis un peu paresseux.
code::blocks je ne connais pas non plus, mais de toute façon c'est le C que tu dois apprendre. Tu peux commencer sur le siteduzero
-
ok daccord
alors juste par curiosité, a quoi sert perl et code::block?
est ce que code::block remplace microsoft visual C++?
Bon je vais faire plus simple, je vais te donner le fichier que ma responsable de stage ma refiler (en format texte) et le resultat en excel, comme ca tu vois exactement.
petite precision: pour l'exemple, ell ma donné que quelque ligne (5 ou 6 je crois)
autre chose:
dans le fichier xls, dans la colonne D, tu va voir des ok (c'est une fonction si) et en fait, c pour sa que je voulais une colonne vide. enfin tu comparera, et tu verra, mais le ruc que tu m'as donné est juste (vu ke j'ai compris a peu près le code, mais jpense kil doit peut etre y avoir une erreur de saut de ligne dans le code (suis pas tres sur)
voici le fichier texte : https://www.cjoint.com/?gexvKWi5t4
voici l'exemple xls: https://www.cjoint.com/?gexwcSX1Nm
par contre, une petite remarque:
tu verra dans l'excel, la premiere ligne c'est le nom des champ (genre: date, etc.) c'est pas possible dans le code en c, de lui faire inserer une ligne au debut du fichier et de le faire?
autre remarque:
le fichier executable que tu m'as donné, c'est celui que tu as fait avec code::block, c'est ca?
si je retape le code sous visual C++, l'utilisateur aura seulement besoin de l'excutable? ou je dois lui donné tout le repertoire du workspace?
merci beaucoup et encore désolé pour toute ces questions, c'est juste que je veux comprendre aussi, meme si c'est pas moi qui ait codé :) -
Re,
Oublie perl. C'est juste un outil comment beaucoup d'autres.
Voici ce qui est Code::blocks
tu verra dans l'excel, la premiere ligne c'est le nom des champ (genre: date, etc.) c'est pas possible dans le code en c, de lui faire inserer une ligne au debut du fichier et de le faire?
Oui, c'est faisable.
le fichier executable que tu m'as donné, c'est celui que tu as fait avec code::block, c'est ca?
Oui, je l'ai compilé avec.
si je retape le code sous visual C++, l'utilisateur aura seulement besoin de l'excutable? ou je dois lui donné tout le repertoire du workspace?
C'est juste le code (celui que j'ai mis plus haut). Ensuite il suffit de le compiler.
Je vais regarder ce soir.
-
ok dacc, donc jatten ce soir, mais entretemps je verrai un peu le code et vor si jpeux changer (voir si jepux rajouter des truc)
Merci bcp kan meme -
Le plus simple et le pus efficace c'est de regarder du côté des expressions régulières, perso je ne les connais pas en C, mais en Perl c'est vraiment génial. Tu devrais te pencher de se coté là.
-
Je ne comprends pas pourquoi vous ne le faites pas par VBA.
Les utilisateurs n'ont cas indiquer le chemin du fichier dans une cellule ( si vous voulez pas vous embeter avec des composants annexes ) et avec une boucle vous traitez toute les lignes du fichier.
Surtout que les champs sont toujours de la meme longueur, c'est facile...
Maintenant que vous avez fait tout ca je post un peu tard, mais moi j'aurai fait comme ca...
pour info Regardez ce post que j'ai fait la semaine dernière, tout y est pour ecrire un csv...
http://www.commentcamarche.net/forum/affich 12635021 definition de commande macro?page=2
-
pour nicodisco:
je ne sias pas si tu as compris mon but. En fait, je recoi un fichier plat (.txt) et on me demande de le mettre sous excel. mais je peuxpas le mettre en csv, psk il faut mettre des separateur pour les colonnes. j'ai donc besoin de savoir est ce que si on le fait par vba (dans excel) on peut gérer ceci:
mon fichier a plusieurs ligne (dopnc il m'en faut autant sur excel), et dans chaque ligne il y a N caractere (tous collé les uns au autres, donc pas de séparateur). est-il possible, donc, de choisir un certain nombre de caractere pour chaque colonne? exemple:
ça, c'est l'exemple de base d'une seule ligne dans mon fichier texte:
240420090000580601001014183001MAD000000000050.0001001836562027MAD000000000050.0001001870290007MAD000000000000.0001001836562847MAD000000000000.00XX 00123042009DOMCILIATION24042009
et ça c'est le resultat que je veux en csv:
24042009;0000;5806;01001014183001MAD;000000000;050.00;01001836562027MAD;0000000000;50.00;01001870290007MAD;000000000;000.00;01001836562847MAD;0000000000;00.00;XX;001;23042009;DOMCILIATION24042009
donc si tu a bien compris, les ";" c'est ce qui fait les colonnes.
voila ce que jattend- Re,
Ne te complique pas la vie.
Je l'ai fait en C puisque c'est ça que tu as demandé.
Regarde ici, tu as une solution avec des formules excel. Pas besoin de programmation, même pas de ;
http://www.commentcamarche.net/forum/affich 5024174 conversion txt en csv?page=2#29
-
-
Salut,
Je ne comprends pas pourquoi vous ne le faites pas par VBA.
Dans mon message 16 il me semble que j'ai dit "A vrai dire tu peux le faire directement dans excel "
Bref, pourquoi le faire en VBA quand on peut le faire avec des formules "Surtout que les champs sont toujours de la meme longueur, c'est facile... "?!!! c'est encore plus facile...
Ben, je te dirai pourquoi.
Puisque le demandeur à écrit "pour m'aider a le faire soit en java, soit en langage c"
Sinon, je l'aurais faire encore plus facile avec une regex.
-
Peut etre, mais en plus je n'avais meme pas vu qu'il voulait importer et que ca tourne dans Excel, je trouve que vous vous etes vraiment gavé pour rien.
Entre les assistants d'importation, et le VBA y'avait de quoi faire...
En tout cas si ca marche tant mieux, mais bon...
- 1
- 2