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 :

Premier caractère en majuscule


Sujet :

C++Builder

  1. #1
    Membre du Club
    Inscrit en
    Octobre 2004
    Messages
    115
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 115
    Points : 68
    Points
    68
    Par défaut Premier caractère en majuscule
    Bonjour à tous,

    je cherche simplement à mettre le premier caractère d'un AnsiString en majuscule.

    J'affiche la date avec le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String().sprintf("%s, Semaine %d, Jour %d", FormatDateTime("dddd d mmmm yyyy", Now()), WeekOf(Now()), DayOfTheYear(Now()))
    Cela m'affiche bien la date mais j'aurais voulus afficher : Lundi 7 mai... et non lundi 7 mai...

    Merci beaucoup

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 457
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 457
    Points : 24 870
    Points
    24 870
    Par défaut
    une solution permanente : DateStringFirstCharUpCase

    Pour les AnsiString avec variable temporaire pour le UpCase de Delphi (voir si équivalent C) comme ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      AnsiString Chaine = Chaine.sprintf("%s, Semaine %d, Jour %d", FormatDateTime("dddd d mmmm yyyy", Now()), WeekOf(Now()), DayOfTheYear(Now()));
      String Chaine2 = Chaine;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
      ShowMessage(Chaine);
      Chaine[1] = UpCase(Chaine[1]);
      ShowMessage(Chaine);
    et la version Warrior :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
      ShowMessage(Chaine2);
      UpAnsiChar(Chaine2[1]); // ou // UpAnsiChar(Chaine2.c_str()[0]);
      ShowMessage(Chaine2);
    et la version Barbare :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      ShowMessage(UpCaseFirstLetter(String().sprintf("%s, Semaine %d, Jour %d", FormatDateTime("dddd d mmmm yyyy", Now()), WeekOf(Now()), DayOfTheYear(Now()))));

    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
     
    // #pragma inline // Active la compilation ASM !
    void __fastcall UpAnsiChar(char &c)
    {
      asm
      {
               PUSH EBX
               MOV BL, [EAX]
     
               CMP     BL,'a'
               JB      @@exit
               CMP     BL,'z'
               JA      @@exit
               ADD     BL,'A' - 'a'
     
               MOV [EAX], BL
               POP EBX
       @@exit:
      }
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    AnsiString& UpCaseFirstLetter(AnsiString &S)
    {
      UpAnsiChar(S[1]);
      return S;
    }
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Membre du Club
    Inscrit en
    Octobre 2004
    Messages
    115
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 115
    Points : 68
    Points
    68
    Par défaut
    j'aime bien la version barbare ...

    Mais sous builder c'est pas tout à fait la même fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ShowMessage(UpCaseFirst(String().sprintf("%s, Semaine %d, Jour %d", FormatDateTime("dddd d mmmm yyyy", Now()), WeekOf(Now()), DayOfTheYear(Now()))));
    Merci beaucoup je ne connaissais pas ces fonctions.

    Merci encore

  4. #4
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 457
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 457
    Points : 24 870
    Points
    24 870
    Par défaut
    UpCaseFirst ce n'est pas vraiment du C++Builder en réalité mais une fonction Indy
    J'évite de les utiliser directement, ils ont la manie de les changer sans préavis aussi bien en fonctionnalité que l'emplacement !

    UpCaseFirst is a String function that returns a string with the first letter capitalized. All other letters in the string AStr are converted to lower case.
    Attention, as-tu remarqué que S de Semaine et J de Jour sont passé en minuscule car IdGlobalProtocols::UpCaseFirst effectue d'abord un LowerCase de toute la Chaine puis UpCase du 1er caracètre

    Citation Envoyé par LoicH Voir le message
    Merci beaucoup je ne connaissais pas ces fonctions.
    Lesquels ? UpCaseFirstLetter et UpAnsiChar ? Normal, j'en suis l'auteur !

    UpCaseFirstLetter n'est pas une fonction standard, c'est du code que je viens juste d'écrire par curiosité en traduisant mes codes Delphi
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  5. #5
    Membre averti
    Homme Profil pro
    Enseignant
    Inscrit en
    Mars 2012
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2012
    Messages : 164
    Points : 356
    Points
    356
    Par défaut
    ah ShaiLeTroll, tu me plonges dans la nostalgie avec ton code en assembleur.

    Question: "Monsieur, c'est quoi un pointeur?

    Réponse en 1992:

    C'est de l'adressage indirect, tu te rappelles quand on faisait ça en assembleur?
    Bin EAX, c'est un pointeur.

    Réponse en 2012:

    C'est un concept abstrait qu'on préfère laisser tomber dans bien des langages.


  6. #6
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 457
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 457
    Points : 24 870
    Points
    24 870
    Par défaut
    Figure-toi que j'avais écrit ce code à l'école, et je n'ai pas souvenir de UpCase en D4, en tout pas de LowCase c'est sur, ça n'existe pas !
    Du coup, j'ai fait mes propres UpCase et LowCase avec un Char en paramètre in-out (var sous Delphi, & sous C++)
    Un code qui date de 2000 pour mon Editeur de Base de Registre (qui fut mon projet de 1er année de DUT)

    L'assembleur, je l'évite en général, sauf dans les codes de démos pour le forum comme Conversion hexa avec nombre de byte variables, je n'ai pas dépassé la Page de 88 de Assembleur facile par Philippe Mercier

    Mais, il y a des fonctions comme BSWAP, BT qui sont merveilleuses mais sans équivalent en code de haut niveau en Delphi (cela existe peut-être en C++ mais je ne connais pas assez)
    Pour BT,
    en Delphi, un sef of enum et l'on peut arriver à un résultat très similaire
    en C++, un struct avec des int:1 fonctionnera très bien aussi.
    je peste contre des codes (redondant jamais factorisé en plus) utilisant massivement du décalage et des masques, un code très long pas très lisible alors qu'avec une bonne déclaration c'est le compilateur qui nous le faisait à notre place !
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  7. #7
    Membre averti
    Homme Profil pro
    Enseignant
    Inscrit en
    Mars 2012
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2012
    Messages : 164
    Points : 356
    Points
    356
    Par défaut
    Fallait pas dire "hexadécimal", tu me redémarres!

    La dernière fois que j'en faisais avec mes étudiants c'était dans les années 90, avec un microcontrôleur 68HC11. Il fallait qu'ils écrivent un "bootstrap loader", soit un programme qui au "reset" attendait qu'on lui transmettre un fichier "hex" (format intel), mettait les code en mémoire, puis exécutait le programme. Fallait que le "bootstap loader" tienne en 256 bytes, alors pas question de faire ça en C!

    Et puis, on a décidé de laisser tomber l'assembleur dans nos cours, trop de matière à voir qu'on disait.

    Avec du recul, je pense que ce fut une mauvaise décision. Je trouve difficile de passer certains concepts sans pouvoir m'appuyer sur une le fonctionnement interne d'un processeur.

    Quand mes étudiants comprenaient le mécanisme d'appel de sousroutines avec variables locales sur la pile, la récursivité, je te passais ça en deux temps, trois mouvements, j'te dis.

    Bon ça fait la nostalgie Guyt (mon vrai nom), tu commences vraiment à faire vieux pépé (ahh dans mon temps...)

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

Discussions similaires

  1. Premiers caractères en majuscule
    Par SOPSOU dans le forum Débuter
    Réponses: 6
    Dernier message: 22/08/2008, 10h47
  2. Forcer majuscule premier caractère champ formulaire
    Par rgdu86 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 31/05/2008, 11h46
  3. Placer uniquement le premier caractère en majuscule
    Par SOPSOU dans le forum Langage
    Réponses: 2
    Dernier message: 28/08/2007, 17h34
  4. Selection des x premiers caractères dans un champ précis
    Par Schulman dans le forum Langage SQL
    Réponses: 2
    Dernier message: 12/01/2005, 09h23
  5. Réponses: 2
    Dernier message: 04/09/2004, 10h53

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