[C] Lire un fichier .txt

Utilisateur anonyme -  
mamiemando Messages postés 33778 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour à tous!

Je dois extraire des valeurs venant d'un fichier texte vers un fichier excel. Ses valeurs sont séparées par des ";" et j'aimerai les remplacer par une tabulation. Il faut que cela soit automatique c'est pourquoi je le fais en language c, je dois donc résoudre 2 problèmes:

- Lire un fichier texte en language c
-Remplacer tout les caractères ";" de ce fichier

Si quelqu'un peut m'aider, je lui en serait reconnaissant!

Merci d'avance
A voir également:

10 réponses

mamiemando Messages postés 33778 Date d'inscription   Statut Modérateur Dernière intervention   7 884
 
Si tu es sous linux le plus rapide c'est de faire un sed. Si tu dois le faire en C, il suffit d'ouvrir ton fichier (fopen), et de lire les caractère un par un (fgetc). Si c'est un ':' tu le remplaces (fputc), QUand tu as fini de lire le fichier tu le ferme (fclose). Exemple :
int main(int argc,char **argv){
    FILE *f_in,*f_out;
    char cur_char;
    if(argc!=3){
        fprintf(stderr,"usage: %s file_in file_out\n",argv[0]);
        return 1;
    }
    f_in = fopen(argv[1],"rt");
    if (!f_in){
        fprintf(stderr,"Error opening file [%s]\n",argv[1]);
        return 2;
    }
    f_out = fopen(argv[2],"w");
    if (!f_out){
        fclose(f_in);
        fprintf(stderr,"Error opening file [%s]\n",argv[2]);
        return 3;
    }

    while (!feof(f_in)){
        cur_char = fgetc(f_in);
        fputc(cur_char == ':' ? '\t' : cur_char,f_out);
    }

    fclose(f_in);
    fclose(f_out);
    return 0;
}

ce qui donne ;
(mando@aldur) (~) $ gcc -W -Wall -o plop.exe plop.c
(mando@aldur) (~) $ cat pouet
ncaiocnsoa:cas:cas:csa:c:a
acsascsa::caasc::acs
(mando@aldur) (~) $ ./plop.exe pouet pouet2
(mando@aldur) (~) $ cat pouet2
ncaiocnsoa      cas     cas     csa     c       a
acsascsa                caasc           acs

Bonne chance
0
Utilisateur anonyme
 
Merci mais l'entreprise pour laquelle je dois réalisé ce projet tourne uniquement sur Windows donc...
0
mamiemando Messages postés 33778 Date d'inscription   Statut Modérateur Dernière intervention   7 884
 
Ca ne change rien au source car ici je n'ai utilisé que des fonctions standards du C. C'est juste au niveau de la compilation et de l'exécution (tu peux utiliser dev cpp par exemple qui est gratuit et basé sur gcc) que ça change quelque chose.

Bonne chance
0
Utilisateur anonyme
 
Merci beaucoup, ça marche!

Le seul problème est qu'il me rajoute un caractère à la fin du fichier, un 'y' avec deux points dessus... Comment puis-je éviter ça ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
mamiemando Messages postés 33778 Date d'inscription   Statut Modérateur Dernière intervention   7 884
 
Je sais pas je n'ai pas eu ce problème. Ca arrive quand un fichier se ferme mal ou est tronqué. Tu as recopié le code tel que je te l'ai donné ou tu as fait des modifications ? Si oui peux-tu me donner ta version ?

Bonne chance
0
Herr Dr von Apfelstrudel Messages postés 198 Date d'inscription   Statut Membre Dernière intervention   182
 
Salut,

pourquoi vouloir modifier ton fichier ? Il suffit de l'importer dans excel en spécifiant ";" comme séparateur de colonne.
0
mamiemando Messages postés 33778 Date d'inscription   Statut Modérateur Dernière intervention   7 884
 
Complètement d'accord. Mais bon on ne discute pas les ordres de l'entreprise :)
0
Utilisateur anonyme
 
Bonjour

à Herr Dr von Apfelstrudel: Parce que je devrai les concaténer avant de les transformer, il faut que cela soit automatique et réalisable sur n'importe quel PC sans que l'opérateur ait a changé quoi que ce soit.

à mamiemando: Je n'ai pas modifier ton source, mais les lignes des fichiers texte dépassent 610 caractères... peut-être est-ce la raison.

0
Jean Bombeur
 
Sed est dispo sous Win32. Tu peux le trouver dans l'archive dispo ici: https://sourceforge.net/projects/unxutils/

Apres si mes souvenirs sont bons ton probleme se resume a

sed.exe -e 's/;/\t/g' file_in > file_out
0
mamiemando Messages postés 33778 Date d'inscription   Statut Modérateur Dernière intervention   7 884
 
Je ne vois pas trop pourquoi puisque il n'y a aucun buffer, en tout cas dans le code que je t'ai donné...
0