Rechercher : dans
Par :

Conversion txt en csv

Dernière réponse le 8 jun 2009 à 23:01:01 pinkwyzard, le 14 fév 2008 à 10:55:10 
 Signaler ce message aux modérateurs

Bonjour,

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

Meilleures réponses pour « Conversion txt en csv » dans :
Excel - Convertir fichier(s) CSV / XLS VoirComme dit dans le titre, cette application convertit des fichiers CSV en fichiers XLS N’est pas nécessaire pour Excel 2007, ce dernier faisant la conversion automatiquement La conversion n’ayant pas de mise en forme, en cas de modification...
Convertir des fichiers de sous-titres (srt, sub, ssa, txt) VoirIl existe quatre principaux format de sous-titres : srt, sub, ssa et txt. Il peut arriver que pour une raison ou pour une autre, vous ayez à passer d'un de ces formats à un autre. Le problème, c'est que vous trouverez une multitude de logiciels...
Sed - Conversion retours chariots DOS (CRLF) / UNIX (LF) VoirConversion format de fichier DOS UNIX / UNIX DOS Préambule Ce qu'il faut savoir Conversion DOS vers UNIX Conversion UNIX vers DOS Préambule Il existe déjà des utilitaires (dos2unix et unix2dos) qui s'acquittent très bien ce...

1

ppmax, le 14 fév 2008 à 11:32:32
  • +1

Euh, il te faut toujours un séparateur, à moins que tu choisisse les espaces entre les mots?
Plop !

Répondre à ppmax

2

pinkwyzard, le 14 fév 2008 à 11:47:20

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 )

Répondre à pinkwyzard

3

ppmax, le 14 fév 2008 à 12:09:42

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
Plop !

Répondre à ppmax

4

lami20j, le 14 fév 2008 à 12:16:56

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
lami20j

Répondre à lami20j

5

pinkwyzard, le 14 fév 2008 à 12:17:09

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 :(

Répondre à pinkwyzard

6

pinkwyzard, le 14 fév 2008 à 14:11:41

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 :(

Répondre à pinkwyzard

7

tamim, le 22 fév 2009 à 20:51:01
  • +1

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

Répondre à tamim

8

codeur, le 4 jun 2009 à 10:07:14

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

Répondre à codeur

9

lami20j, le 4 jun 2009 à 11:07:01

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?!
106485010510997108

Répondre à lami20j

10

codeur, le 4 jun 2009 à 14:21:03

Salut,

oui j'ai une regle. je te donne un exemple sans separateur, et le resultat dont j'ai besoin:

exemple de base:

240420090000580601001014183001MAD000000000050.00010018365620­27MAD000000000050.0001001870290007MAD000000000000.0001001836­562847MAD000000000000.00XX 00123042009DOMCILIATION24042009


resultat voulu:

24042009;0000;5806;01001014183001MAD;000000000;050.00;010018­36562027MAD;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

Répondre à codeur

11

codeur, le 4 jun 2009 à 14:25:27

Ne fait pas attention au tiret "-" ils n'existe pas. tous les caractere (chiffe et lettre sont collé)

Merci beaucoup

Répondre à codeur

12

lami20j, le 4 jun 2009 à 14:37:43

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. 106485010510997108

Répondre à lami20j

13

codeur, le 4 jun 2009 à 14:45:25

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

Répondre à codeur

14

lami20j, le 4 jun 2009 à 15:27:16

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.
106485010510997108

Répondre à lami20j

15

codeur, le 4 jun 2009 à 15:45:25

Ok sans souci....

merci pour ton aide et puis à ce soir

Répondre à codeur

16

lami20j, le 4 jun 2009 à 20:47:55

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 http://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 http://cjoint.com/?geuTynS2wr 106485010510997108

Répondre à lami20j

17

codeur, le 4 jun 2009 à 21:11:20

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: http://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

Répondre à codeur

18

lami20j, le 4 jun 2009 à 21:17:52

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

106485010510997108

Répondre à lami20j

19

codeur, le 4 jun 2009 à 23:27:54

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 : http://cjoint.com/?gexvKWi5t4
voici l'exemple xls: http://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é :)

Répondre à codeur

20

lami20j, le 5 jun 2009 à 07:37:18

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.
106485010510997108

Répondre à lami20j

21

codeur, le 5 jun 2009 à 08:13:53

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

Répondre à codeur

22

tiptop_ch, le 5 jun 2009 à 08:16:02

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à.

Répondre à tiptop_ch

23

NicoDisso, le 5 jun 2009 à 08:21:04

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
Le succès, c'est la hauteur à laquelle vous rebondissez quan­d vous avez touché le fond.

Répondre à NicoDisso

31

codeur, le 5 jun 2009 à 09:04:18

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.00010018365620­27MAD000000000050.0001001870290007MAD000000000000.0001001836­562847MAD000000000000.00XX 00123042009DOMCILIATION24042009


et ça c'est le resultat que je veux en csv:

24042009;0000;5806;01001014183001MAD;000000000;050.00;010018­36562027MAD;0000000000;50.00;01001870290007MAD;000000000;000­.00;01001836562847MAD;0000000000;00.00;XX;001;23042009;DOMCI­LIATION24042009

donc si tu a bien compris, les ";" c'est ce qui fait les colonnes.

voila ce que jattend

Répondre à codeur

32

lami20j, le 5 jun 2009 à 09:06:20

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 106485010510997108

Répondre à lami20j

24

lami20j, le 5 jun 2009 à 08:39:31

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.
106485010510997108

Répondre à lami20j

25

codeur, le 5 jun 2009 à 08:50:17

Ben si c'est possible de le faire directement sur vba dans excel, jsui partant pour qu'on m'explique les différentes étapes a suivre, et je verrai laquelle je garderai.

Merci

Répondre à codeur

26

NicoDisso, le 5 jun 2009 à 08:50:39

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...

Le succès, c'est la hauteur à laquelle vous rebondissez quan­d vous avez touché le fond.

Répondre à NicoDisso