IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

Enregistrer des matrices au format txt


Sujet :

C

  1. #1
    Candidat au Club
    Inscrit en
    Mars 2009
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 4
    Points : 2
    Points
    2
    Par défaut Enregistrer des matrices au format txt
    Bonjour à tous,

    Voilà, j'ai écrit un programme en langage C qui m'affiche des résultats en forme de matrice (132x342). Je voudrais juste que vous m'aidiez à enregistrer ces résultats en format .txt... J'ai complètement oublié la manipulation des fichiers
    Si l'un d'entre vous sait comment les enregistrer en format .xls pour pouvoir directement les lire avec Excel, je lui serai très reconnaissant.

    Merci pour vos réponses

  2. #2
    Invité(e)
    Invité(e)
    Par défaut
    Bonjour,

    L'enregistrement de texte n'est pas trop compliqué en C... définir un format pour stocker ce qu'on veut l'est beaucoup plus.

    1- Ecrire dans un fichier :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    /* ouverture en mode texte/écriture */
    FILE *f = fopen("out.txt", "w"); 
    if(NULL == f) {
        /* erreur à l'ouverture */
        perror("out.txt");
    } else {
       /* on écrit */
       fprintf(f, "Hello");
       /* on ferme */
       fclose(f);
    }
    2- sauvegarde pour excel
    Après, plutôt qu'écrire nu fichier .xls assez compliqué, on peut commencer par un fichier .csv (comma separated values) qui est lu très facilement par excel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    const size_t W = 10, H = 15;
    double matrice[W][H];
    /* remplissage de la matrice */
     
    /* ouverture du fichier, genre "out.csv" */
     
    {
        /* à ce stade, le fichier est ouvert en écriture*/
        size_t i, j;
        for(j = 0; j < H; ++j) {
            for(i = 0; i < W; ++i) {
                fprintf(f, "%lf;" matrice[i][j]);
            }    
            fprintf(f, "\n");
        }
    }
    /* fermeture du fichier */

  3. #3
    Membre habitué Avatar de skip78
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    247
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 247
    Points : 133
    Points
    133
    Par défaut
    Ouaip, ou alors, si c'est vraiment des entrées régulières (colonne1, colonne2, etc.)
    J'avais fait pour un stage y'a quelque temps, une écriture directe dans un fichier xls.

    Il suffisait alors d'inserer un \t pour changer de colonne, et un \n pour changer de ligne.

    =>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    FILE *fp = NULL;
    fp = fopen("results.xls", "w+"); //"w+" est utilisé pour écrire en overwrite, enleve le + pour ajouter à la suite de ce qui existe deja.
    if(fp){
        for(i=0 ; i<H ; i++){
            for(j=0 ; j<W ; j++){
                fprintf(fp, "%d\t", matrix[i][j]);
            }
            fprintf(fp, "\n");
        }
        fclose(fp);
    }
    else printf("Erreur rencontree lors de l'ouverture du fichier\n");
    fonctionne parfaitement

    En éspérant t'avoir aidé !

  4. #4
    Nouveau membre du Club
    Inscrit en
    Juillet 2007
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 28
    Points : 25
    Points
    25
    Par défaut
    monsieur tu peux ouvrir n'import quel fichier texte par excel
    fichier->ouvrir->selectionner tous les types->suivre le processus

  5. #5
    Membre habitué Avatar de skip78
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    247
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 247
    Points : 133
    Points
    133
    Par défaut
    Des que ca deviens un peu plus serieux, c'est quand même plus clean d'avoir en sortie un fichier .xls ...

    Moi c'était pour une démo client, je pouvais pas me permettre de leur dire : bon bah en fait vous prenez le fichier txt, vous allez dans excell, vous faites suivre le processus, puis .............

    => si ca pose pas de probleme, pourquoi ne pas écrire directement en .xls ?

    bonne journée !

  6. #6
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 578
    Points
    41 578
    Par défaut
    Parce que le format .xls est propriétaire et non-documenté.
    Le seul format approchant, c'est le format CSV (Comma Separated Values). Note que si un Excel assez récent est installé, les fichiers .csv reçoivent une icône Excel.

    L'inconvénient du format CSV, c'est qu'apparemment le séparateeur "par défaut" d'Excel change selon les pays. En France, il ouvrira du premier coup un fichier .csv séparé par des points-virgules, alors que dans d'autres pays, il faudra séparer les valeurs par des virgules à la place.

    Sinon, si le client possède une version assez récente d'Excel (2007 ou 2003 avec patch), tu peux écrire en .xlsx, qui est documenté. Malheureusement, il s'agit comme OpenOffice d'un format complexe: un ZIP comprenant plusieurs fichiers .xml avec une structure de répertoires.
    Image: contenu d'un .xlsx

  7. #7
    Membre habitué Avatar de skip78
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    247
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 247
    Points : 133
    Points
    133
    Par défaut
    Ouaip, j'avais justement eu ce probleme de ';' vs ',' (saloperies d'anglophones )
    et c'est pour ca que je préconise ici l'utilisation de '\t' plutôt que de ';'

    Cela étant dit, merci pour les précisions concernant le format, je pensais pas qu'un xlsx était si complexe

  8. #8
    Candidat au Club
    Inscrit en
    Mars 2009
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Merci beaucoup pour vos réponses.
    Mais sachant que j'ai complètement oublié l'utilisation des fichiers (déclarations incluses), je vous demanderai de bien vouloir me donner un lien vers un tuto où ils expliquent clairement (étape par étape) l'utilisation des fichiers.

    Merci encore pour votre aide

  9. #9
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 397
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 397
    Points : 23 761
    Points
    23 761
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    L'inconvénient du format CSV, c'est qu'apparemment le séparateeur "par défaut" d'Excel change selon les pays. En France, il ouvrira du premier coup un fichier .csv séparé par des points-virgules, alors que dans d'autres pays, il faudra séparer les valeurs par des virgules à la place.
    En même temps, « CSV », ça veut dire « Comma-Separated Values ». J'ai donc tendance à penser que le séparateur officiel (qui, a priori, devrait marcher partout) est la virgule et que les autres sont tolérés par les différentes versions du programme qui les traite ...

  10. #10
    Invité(e)
    Invité(e)
    Par défaut
    Citation Envoyé par Obsidian Voir le message
    En même temps, « CSV », ça veut dire « Comma-Separated Values ». J'ai donc tendance à penser que le séparateur officiel (qui, a priori, devrait marcher partout) est la virgule et que les autres sont tolérés par les différentes versions du programme qui les traite ...
    C'est justement la source des problèmes en version française :

    Fichier CSV en :Fichier CSV fr :Le séparateur de données anglais devient le séparateur décimal français...

    Le problème est aussi présent avec les .xls fait main : la discrimination existe entre point et virgule.

    Pour faire des fichier xls ou csv corrects il faudra savoir quel localisation attend Excel et user de setlocale.

  11. #11
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 578
    Points
    41 578
    Par défaut
    Qu'appelles-tu exactement un ".xls fait main" ?

  12. #12
    Invité(e)
    Invité(e)
    Par défaut
    Pour moi, un xls fait main c'est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    double matrix[W][H];
        for(i=0 ; i<H ; i++){
            for(j=0 ; j<W ; j++){
                fprintf(fp, "%lf\t", matrix[i][j]);
            }
            fprintf(fp, "\n");
        }
    Ça fonctionne, mais ne connaissant pas le format exact des fichiers, on a toujours un doute...

  13. #13
    Membre habitué Avatar de skip78
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    247
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 247
    Points : 133
    Points
    133
    Par défaut
    Citation Envoyé par miloup Voir le message
    Merci beaucoup pour vos réponses.
    Mais sachant que j'ai complètement oublié l'utilisation des fichiers (déclarations incluses), je vous demanderai de bien vouloir me donner un lien vers un tuto où ils expliquent clairement (étape par étape) l'utilisation des fichiers.

    Merci encore pour votre aide
    bah c'est pas trés compliqué en fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    FILE *fp;
     
    fp=fopen("mondoc.txt", "w"); // pour écrire à la suite de ce qui existe dans mondoc.txt
    //fp=fopen("mondoc.txt", "w+"); // pour overwriter ce qui existre dans mondoc.txt
    /* Bien sur, si rien n'existe, crée le fichier mondoc.txt :) */
     
    if(fp)
    {
        printf("acces fichier ok\n");
        fprintf(fp, "YEAY ! %d\n", num);
        fclose(fp);
    }
     
    else printf("erreur acces fichier\n");
     
    fp=fopen("mondoc.txt", "r"); // pour LIRE ce qui est dans mondoc.txt
     
    if(fp)
    {
        fscanf(fp, "%s", str);
        //fgets est souvent plus appropriée
        printf("str = %s\n", str);
        fclose(fp);
    }
     
    else printf("CARAMBA !\n");

  14. #14
    Invité(e)
    Invité(e)
    Par défaut
    Citation Envoyé par skip78 Voir le message
    "w" pour écrire à la suite de ce qui existe dans mondoc.txt
    "w+" pour overwriter ce qui existre dans mondoc.txt
    Non,

    "w" : ouvre en écriture et efface tout
    "w+" : ouvre en écriture, efface tout et permet de lire

    Citation Envoyé par http://man.developpez.com/man3/fopen.3.php
    r
    Ouvre le fichier en lecture. Le pointeur de flux est placé au début du fichier.

    r+
    Ouvre le fichier en lecture et écriture. Le pointeur de flux est placé au début du fichier.

    w
    Ouvre le fichier en écriture. Le fichier est créé s'il n'existait pas. S'il existait déjà, sa longueur est ramenée à 0. Le pointeur de flux est placé au début du fichier.

    w+
    Ouvre le fichier en lecture et écriture. Le fichier est créé s'il n'existait pas. S'il existait deja, sa longueur est ramenée à 0. Le pointeur de flux est placé au début du fichier.

    a
    Ouvre le fichier en ajout (écriture à la fin du fichier). Le fichier est créé s'il n'existait pas. Le pointeur de flux est placé à la fin du fichier.

    a+
    Ouvre le fichier en lecture et ajout (écriture en fin de fichier). Le fichier est créé s'il n'existait pas. Le pointeur de flux est placé à la fin du fichier.

  15. #15
    Membre habitué Avatar de skip78
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    247
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 247
    Points : 133
    Points
    133
    Par défaut
    Ouaip, inversé w et w+, c'était pour verifier que vous suiviez messieurs

  16. #16
    Membre habitué Avatar de sopsag
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    224
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 224
    Points : 190
    Points
    190
    Par défaut
    Si tu veux vraiment devenir incollable en C, je te conseille de garder parmi tes favoris un lien vers http://www.linux-kheops.com/doc/man/...-0.9/index.php.
    Plus simple : google "man fopen" et ouvre la page de linux-kheops.com.
    Tu auras accès à tous les manuels des fonctions de la libc (et en français ! )

  17. #17
    Candidat au Club
    Inscrit en
    Mars 2009
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 4
    Points : 2
    Points
    2
    Par défaut méthode BFGS
    bonjour tout le monde,
    J'ai recontré un autre problème. Pour mon programme, je dois utiliser la méthode "BFGS". C'est une méthode qui nécessite le "Gradient", et sachant que mes bases en physiques ne sont pas terribles , je viens vous demander votre aide... j'espère que l'un d'entre vous saura m'aider à interpréter ce charabia en langage C
    Pour ceux qui ne la connaissent pas, ils peuvent la trouver sur wikipédia.

    Merci à tous

  18. #18
    Invité
    Invité(e)
    Par défaut
    Le gradient, c'est la "dérivée" d'un vecteur... En gros, si tu as une fonction de plusieurs variables f(x1,x2, ... xn), son gradient en un point (x1,... xn) c'est le vecteur de coordonnées

    (df/dx1, df/dx2,...,df/dxn)

    En général, si tu connais ta fonction f, la meilleure solution est de calculer explicitement ce gradient, et d'inclure dans ton programme une fonction qui l'évalue. Tu passeras cette fonction à ton BFGS, ou tu l'incluras directement dans le programme (une fois qu'on a calculé le gradient, c'est assez facile).

    Tu peux aussi essayer d'estimer le gradient, en calculant la fonction en des points voisins, mais c'est en général une mauvaise idée. Quand on n'a pas la dérivée, il vaut généralement mieux utiliser des algorithmes faits pour ca (Powell, ou des trucs comme ca).

    Si tu sais lire le Fortran, il y en 4 implémentations sur netlib.org.

    Sinon, il y en a une mise en oeuvre en C dans la troisième édition de Numerical Recipes (et une description assez précise dans la second édition).

    Francois

Discussions similaires

  1. [AC-2007] enregistrement des fichiers au Format MDE
    Par gerarddurand dans le forum Access
    Réponses: 0
    Dernier message: 21/12/2009, 11h39
  2. enregistrement des matrices dans des fichier text
    Par fleurrouge dans le forum Signal
    Réponses: 1
    Dernier message: 22/05/2009, 20h23
  3. Export des données au format txt
    Par Marie33 dans le forum SAS Base
    Réponses: 7
    Dernier message: 05/12/2008, 14h16
  4. OUTLOOK 2007-enregistrer sous/plusieurs mails format .txt
    Par sharrascript dans le forum Outlook
    Réponses: 6
    Dernier message: 11/10/2007, 13h25
  5. Export des données au format txt
    Par wolflinger dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 05/05/2006, 10h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo