METTRE LA PREMIERE LETTRE D'UNE STRING EN MAJUSCULE.

cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 - 17 mars 2004 à 21:46
cs_Nono40 Messages postés 962 Date d'inscription mercredi 3 avril 2002 Statut Membre Dernière intervention 12 septembre 2006 - 19 mars 2004 à 15:38
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/21283-mettre-la-premiere-lettre-d-une-string-en-majuscule

cs_Nono40 Messages postés 962 Date d'inscription mercredi 3 avril 2002 Statut Membre Dernière intervention 12 septembre 2006 2
19 mars 2004 à 15:38
Non, ce n'est pas un retour ici. C'est juste que j'ai trouvé le challenge de passer de 2 ligne à une ligne amusant.

En assembleur ? Non, travailler sur des String en asm c'est la croix et la banière et ça fait appel à des fonctions cachées de gestion de la mémoire...
sonnikk Messages postés 19 Date d'inscription dimanche 14 mars 2004 Statut Membre Dernière intervention 27 mars 2004
19 mars 2004 à 14:05
alors comme il vous faut une réponse pour vous départager, le but était uniquement de mettre la premiere lettre en majuscule, sans pour autant toucher au reste. Cependant (eh oui je vais vous faire chier ;-)!) le fait de tout mettre en minuscule n'altere en rien le traitement qui est fais derriere et donc peut tres bien etre inclus !!!
Allez je tranche ds le vif et je vous declare tous ex-aequo !!!
ben moi je pensais pas qu'une p'tite fonction de rien du tt allait autant declencher les passions ! merci de votre aide qd mm ! j'espere que vous serez la qd j'aurais d'autres pb ou d'autres sources a deux balles a vous soumettre !!!
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
19 mars 2004 à 08:13
Delphicool : les sous-entendus sont souvent à l'origine de malentendus !... [:o].
Comme tu l'as écrit, attendons la réponse de Sonnikk à ce sujet.
Donc, pas de vainqueur tant que ce point n'est pas clarifié.

Alors Nono40, le retour ? ;o) Tu ne nous ferais pas une petite version en assembleur, juste pour le fun ?
A+
DelphiCool Messages postés 455 Date d'inscription mardi 24 juillet 2001 Statut Membre Dernière intervention 10 mars 2009
19 mars 2004 à 08:04
Est le vainquer est ..... Nono ;D

Delphiprog, pour moi ça semble logique, si tu souhaites la première lettre en Maj, c'est que tu veux la suite en Min.
J'ai pensé la même chose de ton code des que je l'ai vu.

Il n'y as que l'auteur qui pourras le dire.
japee Messages postés 1727 Date d'inscription vendredi 27 décembre 2002 Statut Modérateur Dernière intervention 6 novembre 2021 8
19 mars 2004 à 01:23
Par ailleurs, Nono40, ton code peut paraître au premier abord plus compliqué, mais en fait il est si simple... (c'est l'histoire de l'oeuf de Colomb).
Content d'avoir de tes nouvelles ;)
Bon, j'y vais, moi, demain je vais avoir du mal...
japee Messages postés 1727 Date d'inscription vendredi 27 décembre 2002 Statut Modérateur Dernière intervention 6 novembre 2021 8
19 mars 2004 à 01:04
Et en plus, on en apprend, des choses ici...
Va falloir y revenir... demain lol !
Salut à tous, y compris et surtout à Yoghisan ;)
cs_Nono40 Messages postés 962 Date d'inscription mercredi 3 avril 2002 Statut Membre Dernière intervention 12 septembre 2006 2
19 mars 2004 à 00:49
En une ligne mais plus compliqué :
Result:=UpperCase(Copy(Donnee,1,1))+LowerCase(Copy(Donnee,2,Length(Donnee)-1));

@+
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
19 mars 2004 à 00:34
Aucun de ceux présents ici n'est exclus.

Yoghisan, pour remplacer n'importe quel caractère dans une chaine, tu peux utiliser cette fonction (défiie dans SysUtils) :
function StringReplace(const S, OldPattern, NewPattern: string; Flags: TReplaceFlags): string;
yoghisan Messages postés 204 Date d'inscription samedi 10 mai 2003 Statut Membre Dernière intervention 2 juin 2005 1
19 mars 2004 à 00:04
Suis je inclu ?

Sinon trim je ne connaissais pas, c'est tres tres pratique ca. Il n'y a pas la meme chose pour enlever (voir remplacer) tous les espaces dans toute une string ?
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
18 mars 2004 à 23:44
Delphicool : je ne voudrais pas passer pour un rabat joie, d'autant qu'on s'amuse beaucoup ici (merco Sonnikk ;o)), mais ton code ne respecte pas le contrat, à savoir "mettre la premiere lettre en majuscule", ce qui ne signifie nullement qu'il faille mettre les autres lettres en minuscules !

Hé Japee, pour faire plus court, il doit y avoir moyen d'y parvenir en utilisant l'assembleur (lol).

Bonne soirée à tous et ne t'en fais pas Sonnikk, il y a parfois de l'ambiance ici.
Et là, en plus, tu as de la chance car il n'y a que des gens bien qui ne veulent que t'aider.
japee Messages postés 1727 Date d'inscription vendredi 27 décembre 2002 Statut Modérateur Dernière intervention 6 novembre 2021 8
18 mars 2004 à 23:12
Ah la vache... ça va devenir dur pour faire plus court, DelphiCool ;)
DelphiCool Messages postés 455 Date d'inscription mardi 24 juillet 2001 Statut Membre Dernière intervention 10 mars 2009
18 mars 2004 à 23:04
Et Hop, une de moins ;-D

function casseMaj(donnee : string):string;
begin
Result := LowerCase(Donnee);
if Trim(Result) <> '' then Result[1] := UpperCase(Result[1])[1];
end;
japee Messages postés 1727 Date d'inscription vendredi 27 décembre 2002 Statut Modérateur Dernière intervention 6 novembre 2021 8
18 mars 2004 à 22:25
Que tu es taquin, Delphiprog ;)

DelphiCool, pourquoi pas :
function CasseMaj(Donnee: String): String;
begin
if Donnee = '' then Exit;
Result := LowerCase(Donnee);
Result[1] := UpperCase(Result[1])[1];
end;
(une ligne de code en moins ;)

sonnik, je te promet qu'on s'amuse bien, grâce à toi, et non pas à tes dépens. Merci à toi :)

Continuez comme ça, les gars, bonne ambiance !
DelphiCool Messages postés 455 Date d'inscription mardi 24 juillet 2001 Statut Membre Dernière intervention 10 mars 2009
18 mars 2004 à 21:42
Désolé d'avoir aboyé.
Je ne voulais crier sur personne.

Mais ça ma surppris de voir tant de ligne de code.

revoici le code corrigé

function casseMaj(donnee : string):string;
begin
if Donnee = '' then exit;

Donnee := LowerCase(Donnee);
Donnee[1] := UpperCase(Donnee[1])[1];

result := Donnee;
end;
sonnikk Messages postés 19 Date d'inscription dimanche 14 mars 2004 Statut Membre Dernière intervention 27 mars 2004
18 mars 2004 à 20:58
ben dis donc t'es pour la paix du monde toi !!! lol !
bon bah je vais tester ta fonction ! merci de m'avoir corrigé !
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
18 mars 2004 à 20:54
Bon, allez, histoire de remettre de l'huile sur le feu, je vous en propose une autre formulation :

function FirstMaj(const AString: string):string;
begin
Result := AString;
if Result <> EmptyStr then
if Result[1] in ['a'..'z'] then
Result[1] := Chr(Ord(Result[1]) - 32);
end;
sonnikk Messages postés 19 Date d'inscription dimanche 14 mars 2004 Statut Membre Dernière intervention 27 mars 2004
18 mars 2004 à 19:15
je m'enerve pas, mais c'est vrai que je traine sur le site depuis quelque jours et j'ai pu remarqué que certaines personnes etaient tres froides et pas forcement tres conviviales (cf le commentaire de Delphicool). c'est pas forcement tres agréable de se faire aboyer dessus des qu'on ecorche un peu une fonction... tu comprends ?
moi je debute en delphi, et j'ai pas tres envie de me faire engueuler si c'est pas comme il faut ! par contre, de l'aide, une critique un peu plus "souriante", pas de probleme !!!
yoghisan Messages postés 204 Date d'inscription samedi 10 mai 2003 Statut Membre Dernière intervention 2 juin 2005 1
18 mars 2004 à 18:52
T'enerves pas... on est là pour discuter, critiquer et evoluer...

Ta premier fonction marchait tres bien mais on est rentré dans le jeu de l'optilisation...

DelphiCool a optimisé le code mais ca ne marche pas... il faut la modifier, c'est tout ce que je dis... une critique constructive est toujours la bienvenue (selon moi)
sonnikk Messages postés 19 Date d'inscription dimanche 14 mars 2004 Statut Membre Dernière intervention 27 mars 2004
18 mars 2004 à 14:18
la variable 'back' etait une erreur de frappe, que j'ai corrigée depuis.
japee Messages postés 1727 Date d'inscription vendredi 27 décembre 2002 Statut Modérateur Dernière intervention 6 novembre 2021 8
18 mars 2004 à 14:03
Non, sonnikk... personne ne doute que ta fonction "fonctionne" dans ton programme. Mais telle que tu nous la présentes (avec une variable back non déclarée...), ça ne marche pas.
Sinon, envoie le reste de ton code, et change le titre de ton source.
Bonne prog' ;)
sonnikk Messages postés 19 Date d'inscription dimanche 14 mars 2004 Statut Membre Dernière intervention 27 mars 2004
18 mars 2004 à 13:52
Ma fonction marche pas ??? ben ecoute elle etait tel quel ds mon programme et ca faisait tres bien ce que je lui demandais, alors que maintenant, j'ai des "incompatibles types" qui apparaissent....
peut etre que ma fonction etait pas la meilleure, qu'on peut la "dégraisser", la faire bien mieux, mais au moins elle marchait....
yoghisan Messages postés 204 Date d'inscription samedi 10 mai 2003 Statut Membre Dernière intervention 2 juin 2005 1
18 mars 2004 à 13:46
N'empeche que ca ne marche pas en tant que tel...
sonnikk Messages postés 19 Date d'inscription dimanche 14 mars 2004 Statut Membre Dernière intervention 27 mars 2004
18 mars 2004 à 10:27
EH OH doucement les gars !!!!
moi a la base je concoit des chartes graphiques pour des sites web. J'ai mis cette source juste parce que pour moi elle etait vachement utile. je vais l'arranger avec vos commentaires.
Pour delphiprog, dans la specification de ma fonction, la chaine ne peut pas etre nulle. merci qd mm !
les autres je vous réponds pas, vous avez été méchant ! lol !
yoghisan Messages postés 204 Date d'inscription samedi 10 mai 2003 Statut Membre Dernière intervention 2 juin 2005 1
18 mars 2004 à 09:50
ha oui... on a été influencé par l'existant...
DelphiCool Messages postés 455 Date d'inscription mardi 24 juillet 2001 Statut Membre Dernière intervention 10 mars 2009
18 mars 2004 à 08:23
???
j'allucine, pourquoi tt ça?


if Donnee = '' then exit;

Donnee := LowerCase(Donnee);
Donnee[1] := UpperCase(Donnee[1]);

result := Donnee;
yoghisan Messages postés 204 Date d'inscription samedi 10 mai 2003 Statut Membre Dernière intervention 2 juin 2005 1
18 mars 2004 à 00:47
pourquoi utiliser une boucle...

function MyCasseMaj(Donnee: String): String;
begin
Result := '';
if Donnee = '' then Exit;
Result := UpperCase(Donnee[1]);
Delete(Donnee,1,1);
Result := Result + Donnee;
end;
japee Messages postés 1727 Date d'inscription vendredi 27 décembre 2002 Statut Modérateur Dernière intervention 6 novembre 2021 8
17 mars 2004 à 22:34
Qu'on peut même enlever begin et end et ça donne :

function MyCasseMaj(Donnee: String): String;
var
i: Integer;
begin
Result := '';
if Donnee = '' then Exit;
Result := UpperCase(Donnee[1]);
for i := 2 to Length(Donnee) do
Result := Result + Donnee[i];
end;

Bonne prog' :)
japee Messages postés 1727 Date d'inscription vendredi 27 décembre 2002 Statut Modérateur Dernière intervention 6 novembre 2021 8
17 mars 2004 à 22:31
La fonction est fausse, il eut fallu écrire :
retour := retour + donnee[i];

(length(donnee)+1) est inutile et faux, il faut dire :
length(donnee)

et puis effectivement, problème si chaîne vide !

Voila ma version, vite fait :

function MyCasseMaj(Donnee: String): String;
var
i: Integer;
begin
Result := '';
if Donnee = '' then Exit;
Result := UpperCase(Donnee[1]);
for i := 2 to Length(Donnee) do
begin
Result := Result + Donnee[i];
end
end;
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
17 mars 2004 à 21:46
Que se passe-t-il si la chaine reçue en argument est vide ou ne contient qu'un caractère ? :-(
Rejoignez-nous