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 :

creer un fichier .txt avec offset a respecter


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2005
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 55
    Par défaut creer un fichier .txt avec offset a respecter
    Bonjour, etant newbies merci de m'apporter votre aide

    je souhaiterais creer un petit programme qui me permettrait de faire un fichier .txt

    je m'explique dans une console je rentre le nom, prenom, numero de secu et date de naissance ce qui creera un fichier.txt

    nomprenom@datedenaissancenom@@@@@numero_de_secu@prenom


    les @ etant des espaces a respecter.

    voici mon code mais ca marche pas tres bien

    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
     
    #include <iostream>
    #include <stdio.h>
    #include <string.h>
    #include <time.h>
     
    /* Déclarations : */
      FILE *p_fichier_sortant; /* pointeur sur FILE */
      FILE *p_fichier_sortant_2; /* pointeur sur FILE */
      char NOM_FICHIER_sortant[30];
      char NOM_FICHIER_sortant_2[30];
      char porteur [16];
      char prenom [6];
      char montant [6]; 
      char date [6];
      char heure [6];
      char secu[0];
     
     
    main()
    { 
    /* Création du fichier en lecture */
     
         cout<<("creation du fichier : ");
         cin>>NOM_FICHIER_sortant;
         cout<<("Nom :");
         cin>>porteur;
         cout<<("prenom :");
         cin>>prenom;
         cout<<("Montant sur 5 caracteres :");
         cin>>montant;
         cout<<("date format aammjj :");
         cin>>date;
         cout<<("heure format hhmmss :");
         cin>>heure;
         //cout<<("creation du fichier : ");
         //cin>>NOM_FICHIER_sortant_2;
         cout<<("secu : ");
         cin>>secu;
     
         p_fichier_sortant = fopen(NOM_FICHIER_sortant, "wr"); 
         fprintf(p_fichier_sortant,"<>08lololo70  0");
         fprintf(p_fichier_sortant,porteur);
         fprintf(p_fichier_sortant,"EUR00000");
         fprintf(p_fichier_sortant,montant);
         fprintf(p_fichier_sortant,date);
         fprintf(p_fichier_sortant,"00000000000000000     90000000000000000000 00");
         fprintf(p_fichier_sortant,date);
         fprintf(p_fichier_sortant,"00000001000070000000000000000000000000000");
         fprintf(p_fichier_sortant,montant);
         fprintf(p_fichier_sortant,"000000000000000097800                 ");
         fprintf(p_fichier_sortant,date);
         fprintf(p_fichier_sortant,heure);
         fprintf(p_fichier_sortant,porteur);
         fprintf(p_fichier_sortant,"000@@@@  ");
         fprintf(p_fichier_sortant,prenom);
         fprintf(p_fichier_sortant,"                                       0000");
         fprintf(p_fichier_sortant,secu);
         fprintf(p_fichier_sortant,"         000000                                                                                                                                                                          00                                                                                                                                                                                                                                       A\n");
         fclose(p_fichier_sortant);
     
         //p_fichier_sortant_2 = fopen(NOM_FICHIER_sortant_2, "wr");
         //fprintf(p_fichier_sortant_2,"040  ");
         //fprintf(p_fichier_sortant_2,dinul);
         //fprintf(p_fichier_sortant_2,"0000v");
         //fprintf(p_fichier_sortant_2,"                          00");
         //fclose(p_fichier_sortant_2);
     return 0;
    }

  2. #2
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Par défaut
    [Rangez vos fusils, cette discussion était initialement dans le forum C...]

    En C, ça donne plus ou moins ça:

    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
     
    void fclean(char *buffer, FILE *fp)
    {
        if (buffer != NULL && fp != NULL)
        {
            char *pc = strchr(buffer, '\n');
     
            if (pc != NULL)
            {
                *pc = 0;
            }
            else
            {
                int c;
     
                while ((c = fgetc(fp)) != '\n' && c != EOF)
                {
                }
            }
        }
    }
     
     
    /* -tc- main() renvoie toujours un entier de type int. */
    int main(void)
    {
        /* Déclarations : */
        FILE *p_fichier_sortant = NULL;
        char nom_fichier_sortant[30] = "";
        char porteur[16] = "";
        char prenom[16];
        char date[] = "AAMMJJ";
        char heure[] = "HHMMSS";
        char secu[16] = "";
        int ret = EXIT_SUCCESS;
     
        printf("Nom du fichier a creer : ");
        fflush(stdout);
        fgets(nom_fichier_sortant, sizeof nom_fichier_sortant, stdin);
        fclean(nom_fichier_sortant, stdin);
     
        printf("Nom du porteur : ");
        fflush(stdout);
        fgets(porteur, sizeof porteur, stdin);
        fclean(porteur, stdin);
     
        printf("Prenom du porteur : ");
        fflush(stdout);
        fgets(prenom, sizeof prenom, stdin);
        fclean(prenom, stdin);
     
        printf("Date (AAMMJJ) : ");
        fflush(stdout);
        fgets(date, sizeof date, stdin);
        fclean(date, stdin);
     
        printf("Heure (HHMMSS) : ");
        fflush(stdout);
        fgets(heure, sizeof heure, stdin);
        fclean(heure, stdin);
     
        printf("Secu : ");
        fflush(stdout);
        fgets(secu, sizeof secu, stdin);
        fclean(secu, stdin);
     
        p_fichier_sortant = fopen(nom_fichier_sortant, "w");
        if (p_fichier_sortant != NULL)
        {
            fprintf(p_fichier_sortant,
                    "%s%s %s%s     %s %s\n",
                    porteur, prenom, date, porteur, secu, prenom);
            fclose(p_fichier_sortant), p_fichier_sortant = NULL;
        }
        else
        {
            /* -tc- Impossible d'ouvrir le fichier */
            ret = EXIT_FAILURE;
        }
     
        return ret;
    }
    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2005
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 55
    Par défaut
    Bonjour,

    Merci pour votre réponse Thierry Chappuis,

    cela fonctionne impeccable, j'aimerais allez plus loin
    1/ Créer une variable date_2 qui ne récupère que les quatres premiers caracteres de char date

    ma variable ci-dessous ne fonctionne pas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    char date[] = "AAMMJJ";
    char date_2= char date[4];
    2/ Comment faire un logo pour mon programme au lieu qu'il apparaisse avec une petite fenêtre DOS

    Thx

  4. #4
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Salut,

    On ne le répétera jamais assez, une fois que tu décide de coder en C++, il est des plus fortement conseillé d'utiliser les possibilités offertes par le C++ de préférence à toutes les techniques issues du C.

    Ainsi, si tu ne veux pas gérer la date comme une date (que tu ne dois pas faire de calcul dessus, par exemple) mais comme une chaine de caractères tout ce qu'il y a de plus classique, l'idéal reste quand même d'utiliser la classe string, disponible dans l'espace de noms std en incluant le fichier d'en-tête <string>.

    De la même manière, il est fortement conseillé d'utiliser les flux (*stream, *fstream,*stringstream) de préférence aux file descriptor et autre fonction *printf, *scanf issues du C.

    L'idéal, dans ton cas, serait donc d'utiliser un ofstream (disponible dans l'espace de noms std par inclusion du fichier <fstream>), et de te baser sur l'entrée de la FAQ qui concerne le formatage des flux pour tout ce qui a trait à l'écriture dans le fichier.

    Tu trouveras en outre la réponse à la plupart des questions que tu peux te poser sur les flux de fichiers directement sur la page de la FAQ qui est consacrée à cette problématique.
    Parallèlement, le fait d'utiliser la classe string, comme proposé plus haut, te permettrait d'utiliser un code proche de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    //str est la chaine ayant la date au format YYMMDD
    /* pourrait être précédé ou entouré d'un test de validité ;) */
    string moisannee=str.substr(0,4);
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2005
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 55
    Par défaut
    Bonjour,

    J'ai commencé a transformer le code C en C++

    mais je buche encore sur quelques points

    1) je n'arrive pas a recuperer les JJMM de la variable date dans une nouvelle variable
    j'ai essayer avec un string mais ca ne marche pas

    2) j'aimerais faire la même chose avec la variable porteur ( les 5 premiers caracteres) seulement

    3) Comment faire en sorte que le nom soit sur 16 caracteres
    je m'explique par exemple le nom Dupont fait 6 caracteres,
    j'aimerais qu'il soit suivi de 10 espaces

    voici mon code

    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <iostream>
    #include <fstream>
    using namespace std;
     
    int main(void)
    {
        /* Déclarations : */
        FILE *p_fichier_sortant_test = NULL;
        char nom_fichier_sortant_test[30] = "test.txt";
        char dinul[5] = "";
        char porteur[17] = "";
        char date[7] = "JJMMAA";
        char date_3 = date[4];
        char dpt[3] = "";
        string s1="PPPPPP";
        string date_2= date.substr(0,2);
        char heure[] = "HHMMSS";
        char montant[6] = "";
        char numauto[7] = ""; 
     
        cout<<("Numero du sois (4 char): ");
        cin>>dinul, sizeof dinul;
     
        cout<<("Departement (2 char): ");
        cin>>dpt, sizeof dpt;
     
        cout<<("Nom : ");
        cin>>porteur, sizeof porteur;
     
        cout<<("Date (JJMMAA) : ");
        cin>>date, sizeof date;
     
        cout<<("Heure (HHMMSS) : ");
        cin>>heure, sizeof heure;
     
        cout<<("Montant (5 char): ");
        cin>>montant, sizeof montant;
     
        cout<<("Autorisation : ");
        cin>>numauto, sizeof numauto;
     
        ofstream outf_3(nom_fichier_sortant_test);
        outf_3 << s1 << date_2 << date_3 << porteur <<"fin de fichier";
        outf_3.close();
     
        return 0;
     
    }
    Merci par avance

  6. #6
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Déjà, si j'étais toi, je remplacerais ces "infâmes" chaines "C style" par des objets de type string.

    Tu verras, ce conseil, bien qu'il puisse t'obliger à t'intéresser un tout petit peu à la classe string, te facilitera énormément la tâche par la suite:

    Tu va peut être avoir besoin de deux bonnes heures pour t'habituer à leur manipulation et à ses différentes méthodes (et encore, tout dépend de la facilité de compréhension dont tu fais preuve), mais tu verra que cet investissement sera très rapidement amorti, tant il est vrai que cette classe particulière fournit énormément de facilités par rapport aux chaines de caractères "C style" (tableaux de caractères terminés par un '\0')

    Elles permettent même en cas de besoin de récupérer directement la chaine sous la forme C style par la méthode c_str()

    Tu trouveras la réponse à de nombreuses questions que tu pourrais te poser lors de cette étude directement sur la page de la FAQ qui leur est consacrée.

    Ensuite, je t'inciterais tout aussi fortement à investir un peu de temps dans l'étude de ce qu'on appelle couramment les "flux".

    Il existe trois grandes catégories de flux:
    • Les flux standards (que tu as déjà approché avec cin et cout, même s'il en existe d'autres )
    • Les flux de fichiers (que tu as déjà approché avec ofsteam)
    • Les flux de conversion, qui t'aideront à convertir facilement un objet en chaine et une chaine en objet: stringstream et ses dérivés istringstream et ostringstream.

    Ici encore, les quelques heures passées à t'habituer à leur fonctionnement s'avèreront être un investissement des plus rentables, tant pour ta première application que pour toute ta vie de programmeur C++...

    Ici encore, les entrées correspondantes de la FAQ devraient répondre à une bonne partie des questions qui pourraient venir te "hanter"

    De manière générale, pense aussi à effectuer éventuellement une recherche sur le forum... Il représente une base de connaissance des plus impressionnantes

    Je te conseillerais d'ailleurs de passer ces quelques heures "d'études" à "faire joujou" avec ces différentes classes, en "oubliant" ton projet pendant ce temps et en expérimentant tes différentes lecture (amuse toi simplement à essayer les idées du genre de "tiens, et que se passerait-il si je faisait..." qui peuvent te traverser l'esprit ). L'auto-complétion de ton EDI t'y aidera énormément, et cela t'incitera à te poser quelques questions .

    Evidemment, si tu as une question à laquelle tu ne trouve définitivement pas de réponse, il ne faut pas hésiter à venir la poser

    Une fois que tu te sentira près à reprendre le travail "sur de bonnes bases", je voudrais que tu en vienne à te poser la question de l'utilité réelle que tu trouve à vouloir écrire dans un fichier avec des nombres de caractères bien précis...

    Si le but est d'obtenir un fichier texte qui présente les informations de manière "tabulaire" (donc facile à lire par quelqu'un), tu auras toutes les connaissances te permettant, en utilisant avec setfill et setw, pour y arriver sans difficulté.

    Par contre, tu te rendra compte, si le but est simplement de permettre la récupération des informations par l'application, qu'il n'est absolument pas nécessaire de le faire...

    Quoi qu'il en soit, tu verra que ton travail sera énormément facilité .

    Si tu as l'impression que je n'ai vraiment pas parlé du problème qui t'intéresse, c'est tout à fait normal...

    Je considère qu'il est bien plus important à ton niveau de partir sur de bonnes bases, et donc de t'inciter à obtenir ces bases en te disant quoi chercher, plutôt que de te laisser t'empêtrer dans un problème dont la résolution est finalement très simple, mais qui n'est dû qu'au fait... que tu ne pars pas avec les bons outils.

    Bon courage et amuse toi bien
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

Discussions similaires

  1. creer fichier txt avec j2me
    Par zaki18mi dans le forum Java ME
    Réponses: 0
    Dernier message: 13/01/2011, 23h14
  2. Modifier un fichier txt avec FSO?
    Par flo456 dans le forum ASP
    Réponses: 6
    Dernier message: 25/10/2005, 22h16
  3. probleme d'import de fichier txt avec des tab
    Par lecureuil dans le forum Access
    Réponses: 4
    Dernier message: 23/08/2005, 19h22
  4. Creer un fichier txt avec la date du jour
    Par quarkz dans le forum Débuter
    Réponses: 8
    Dernier message: 28/07/2005, 17h29
  5. Pb import fichier txt avec lignes de longueurs diverses
    Par zebulon90 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 09/12/2004, 08h32

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