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++Builder Discussion :

Sortie formaté continue


Sujet :

C++Builder

  1. #1
    Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Novembre 2007
    Messages
    128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2007
    Messages : 128
    Points : 63
    Points
    63
    Par défaut Sortie formaté continue
    Salut,

    Je voudrait une sortie avec toujours exactement le méme nombre de caractére. J'ai se bout de code pour commancer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    String ligne;
    ...
    ligne="8010000"+IntToStr(nannee)+IntToStr(nmois);
    Maleureusement nmois contient le mois qui est donc sur 1 ou 2 chiffre, je voudrait donc que ligne contiéne par exemple :
    en février "80100002008 2" et en octobre "8010000200810".

  2. #2
    Membre chevronné
    Avatar de Crayon
    Inscrit en
    Avril 2005
    Messages
    1 811
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 811
    Points : 2 189
    Points
    2 189
    • Plus un ordinateur possède de RAM, plus vite il peut générer un message d'erreur. - Dave Barry
    • Je n'ai pas peur des ordinateurs. J'ai peur qu'ils viennent à nous manquer. - Isaac Asimov
    • Le code source est comme une belle femme, plus on le regarde, plus on trouve des défauts. - Crayon

  3. #3
    Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Novembre 2007
    Messages
    128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2007
    Messages : 128
    Points : 63
    Points
    63
    Par défaut
    Merci pour ta réponse, mais sa ne marche pas.
    Ces fonctions son faite pour les float, je ne trouve pas leur similaire en int...

  4. #4
    Responsable Magazine

    Avatar de pottiez
    Homme Profil pro
    Développeur C++
    Inscrit en
    Novembre 2005
    Messages
    7 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    Points : 22 087
    Points
    22 087
    Par défaut
    Si ça passe pour les float, ça passe aussi pour le int, vu que le float est plus grand que le int
    Quand une réponse vous a été utile, pensez à utiliser le nouveau système de notation

    Lisez le magazine de developpez.com.
    Mes tutos : http://pottiez.developpez.com

    La FAQ BCB -> 642 Questions/Réponses, si vous voulez participer, contactez moi. Aide de BCB6 en français

    N'oubliez pas que l'aide existe et est affichée sous simple pression de la touche F1 , une touche c'est plus rapide que tout un message .

  5. #5
    Membre chevronné
    Avatar de Crayon
    Inscrit en
    Avril 2005
    Messages
    1 811
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 811
    Points : 2 189
    Points
    2 189
    Par défaut
    Sinon tu peux aller voir le site: http://www.functionx.com/bcb/math/sprintf.htm
    • Plus un ordinateur possède de RAM, plus vite il peut générer un message d'erreur. - Dave Barry
    • Je n'ai pas peur des ordinateurs. J'ai peur qu'ils viennent à nous manquer. - Isaac Asimov
    • Le code source est comme une belle femme, plus on le regarde, plus on trouve des défauts. - Crayon

  6. #6
    Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Novembre 2007
    Messages
    128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2007
    Messages : 128
    Points : 63
    Points
    63
    Par défaut
    Je vien de retester, la fonction marche (méme si set bizar d'utilliser FloatToStrF pour convertire un int...)
    J'ai tester comme sa :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ligne="8010000"+IntToStr(nannee)+FloatToStrF(nmois, ffFixed , 2, 0);
    Mais sa ne fait pas se que je veux.
    Je veux juste que à la place d'afficher "2" il affiche " 2" (ESPACE2), mais qu'il puis afficher aussi "10"

  7. #7
    Membre actif Avatar de Baxter67
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 270
    Points : 216
    Points
    216
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    AnsiString asTmp;
     
    if(  (nmois > 0) &&  (nmois < 10) )
    {
         asTmp = " " + IntToStr(nmois);
    }
    else
        asTmp = IntToStr(nmois);
     
    ligne="8010000"+IntToStr(nannee)+asTmp;
    cordialement Baxter
    Tous Probleme a sa solution. Sinon il a le bouton magique : . Et surtous :
    Et ne pas oublier :

  8. #8
    Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Novembre 2007
    Messages
    128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2007
    Messages : 128
    Points : 63
    Points
    63
    Par défaut
    Merci Baxter67, j'avais penser à cette solution; mais elle ne convien pas à la suite de mon programme (ou allor de facon forte lourde): apres le mois, je vais devoire métre des température, je vais avoire donc de 1 à 3 chifffre, avec par fois des valleur négative.
    Je doit enfaite avoire, par exemple, sa au final :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "80201032002 11    -8    -5    10    12   125"

  9. #9
    Membre actif Avatar de Baxter67
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 270
    Points : 216
    Points
    216
    Par défaut
    C'est pour un affichage dans quoi comme tyde de composant ?

    Memo ? Label ? RichEdit?

    Cordialement Baxter
    Tous Probleme a sa solution. Sinon il a le bouton magique : . Et surtous :
    Et ne pas oublier :

  10. #10
    Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Novembre 2007
    Messages
    128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2007
    Messages : 128
    Points : 63
    Points
    63
    Par défaut
    En voila un peut plus sur le contexte :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    TStringList *Fichier = new TStringList();
    String ligne,file;
    int nannee, nmois;
     
    ...
     
    Fichier->LoadFromFile(file);
     ligne="8010000"+IntToStr(nannee)+IntToStr(nmois);   //doit encore rajouter les vaiable avec les température quand le mois marchera
     ShowMessage(ligne);  //pour tester doit disparaitre
     Fichier->Add(ligne);
     Fichier->SaveToFile(file);
    Le but est donc de métre celle ligne dans un fichier text.

    Je suis obliger de respecte de facon stricle la structure du fichier, car ce fichier sera lut par un programme qui existe déjat (et don je n'ai pas les source)

  11. #11
    Membre chevronné

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 374
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 374
    Points : 1 759
    Points
    1 759
    Par défaut
    Salut !

    Il faudrait sans doute demander à un spécialiste du stdio !
    Je pense qu'avec printf, strcat ... (ça a du être formaté avec) donc on serait plus dans le langage C (bien que...)

    Par contre, avec BCB, le formatage reste possible à l'aide d'AnsiString !
    Il faudrait savoir si on procède par concaténations systématiques (donc on formaterait l'ensemble) et si on se donne de quoi modifier juste un champ...

    Ca peut effectivement paraître lourd, mais en fait, ici on se place plus du coté concepteur que du coté utilisateur donc on a le droit de faire ce que l'on veut et comme on le veut ! On risque même de développer une classe qui sera très sympa à utiliser !

    Si tu peux en dire plus sur la nature des champs...

    A plus !

  12. #12
    Membre chevronné

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 374
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 374
    Points : 1 759
    Points
    1 759
    Par défaut
    Salut !

    Sinon, on peut remplir par la gauche :

    Pour le mois :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Ansistring N = IntToStr(Mois);
    if(N.Length() == 1) N = "0" + N;
    Ligne = Ligne + N;
    Pour d'autres valeurs, on suppose par exemple de -999 à 999.
    On a donc un champ de 5 caractères : 1 séparateur + 4 caractères max

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Ansistring N = IntToStr(Valeur);
    while(N.Length() < 5) N = " " + N;
    Ligne = Ligne + N;
    A plus !

  13. #13
    Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Novembre 2007
    Messages
    128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2007
    Messages : 128
    Points : 63
    Points
    63
    Par défaut
    Merci henderson, j'ai trouver se qu'il me faliat dans ton 2éme post.

    j'ai crée une petite fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    String __fastcall TForm1::IntToStrF(int v, int l)
    {
     String N = IntToStr(v);
     while(N.Length() < l) N = " " + N;
     return N;
    }
    Se qui fait que je n'ai plus qu'à l'appeler dans ma ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ligne="8010000"+IntToStr(nannee)+IntToStrF(nmois,2);
    Sa marche super.

    Encore merci.

  14. #14
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Mai 2007
    Messages : 159
    Points : 119
    Points
    119
    Par défaut
    Bonjour,

    Je me permets d'ajouter mon commentaire :
    Ton problème est simplement de formater ton entier sur une largeur fixe, cadré à droite avec un espace éventuellement à gauche, si j'ai bien compris.

    Voici ce que j'ai essayé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    	String c = " " + IntToStr(nmois);
    	String d = c.SubString(c.Length()-2,2);
    Si nmois vaut 3 alors d vaut " 3",
    Si nmois vaut 10 alors d vaut "10".
    Et tu pourras donc ajouter d à ta ligne sans problème de cadrage de la suite de l'enregistrement.

    Cordialement,
    Marc

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Salaire sortie formation DI AFPA (BAC+2) ?
    Par TSalm dans le forum Etudes
    Réponses: 23
    Dernier message: 01/07/2009, 19h13
  2. Formation continue pour non développeurs
    Par SophieD dans le forum Access
    Réponses: 2
    Dernier message: 14/06/2007, 20h44
  3. Réponses: 1
    Dernier message: 30/05/2007, 11h55
  4. Réponses: 2
    Dernier message: 29/01/2007, 12h38
  5. Cherche Formation continue diplomante
    Par McTavish dans le forum Etudes
    Réponses: 4
    Dernier message: 24/10/2006, 21h52

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