METTRE LA PREMIERE LETTRE D'UNE STRING EN MAJUSCULE.
cs_Delphiprog
Messages postés4297Date d'inscriptionsamedi 19 janvier 2002StatutMembreDernière intervention 9 janvier 2013
-
17 mars 2004 à 21:46
cs_Nono40
Messages postés962Date d'inscriptionmercredi 3 avril 2002StatutMembreDernière intervention12 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.
cs_Nono40
Messages postés962Date d'inscriptionmercredi 3 avril 2002StatutMembreDernière intervention12 septembre 20062 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és19Date d'inscriptiondimanche 14 mars 2004StatutMembreDernière intervention27 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és4297Date d'inscriptionsamedi 19 janvier 2002StatutMembreDernière intervention 9 janvier 201332 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és455Date d'inscriptionmardi 24 juillet 2001StatutMembreDernière intervention10 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és1727Date d'inscriptionvendredi 27 décembre 2002StatutModérateurDernière intervention 6 novembre 20218 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és1727Date d'inscriptionvendredi 27 décembre 2002StatutModérateurDernière intervention 6 novembre 20218 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és962Date d'inscriptionmercredi 3 avril 2002StatutMembreDernière intervention12 septembre 20062 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és4297Date d'inscriptionsamedi 19 janvier 2002StatutMembreDernière intervention 9 janvier 201332 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és204Date d'inscriptionsamedi 10 mai 2003StatutMembreDernière intervention 2 juin 20051 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és4297Date d'inscriptionsamedi 19 janvier 2002StatutMembreDernière intervention 9 janvier 201332 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és1727Date d'inscriptionvendredi 27 décembre 2002StatutModérateurDernière intervention 6 novembre 20218 18 mars 2004 à 23:12
Ah la vache... ça va devenir dur pour faire plus court, DelphiCool ;)
DelphiCool
Messages postés455Date d'inscriptionmardi 24 juillet 2001StatutMembreDernière intervention10 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és1727Date d'inscriptionvendredi 27 décembre 2002StatutModérateurDernière intervention 6 novembre 20218 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és455Date d'inscriptionmardi 24 juillet 2001StatutMembreDernière intervention10 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;
sonnikk
Messages postés19Date d'inscriptiondimanche 14 mars 2004StatutMembreDernière intervention27 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és4297Date d'inscriptionsamedi 19 janvier 2002StatutMembreDernière intervention 9 janvier 201332 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és19Date d'inscriptiondimanche 14 mars 2004StatutMembreDernière intervention27 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és204Date d'inscriptionsamedi 10 mai 2003StatutMembreDernière intervention 2 juin 20051 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és19Date d'inscriptiondimanche 14 mars 2004StatutMembreDernière intervention27 mars 2004 18 mars 2004 à 14:18
la variable 'back' etait une erreur de frappe, que j'ai corrigée depuis.
japee
Messages postés1727Date d'inscriptionvendredi 27 décembre 2002StatutModérateurDernière intervention 6 novembre 20218 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és19Date d'inscriptiondimanche 14 mars 2004StatutMembreDernière intervention27 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és204Date d'inscriptionsamedi 10 mai 2003StatutMembreDernière intervention 2 juin 20051 18 mars 2004 à 13:46
N'empeche que ca ne marche pas en tant que tel...
sonnikk
Messages postés19Date d'inscriptiondimanche 14 mars 2004StatutMembreDernière intervention27 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és204Date d'inscriptionsamedi 10 mai 2003StatutMembreDernière intervention 2 juin 20051 18 mars 2004 à 09:50
ha oui... on a été influencé par l'existant...
DelphiCool
Messages postés455Date d'inscriptionmardi 24 juillet 2001StatutMembreDernière intervention10 mars 2009 18 mars 2004 à 08:23
yoghisan
Messages postés204Date d'inscriptionsamedi 10 mai 2003StatutMembreDernière intervention 2 juin 20051 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és1727Date d'inscriptionvendredi 27 décembre 2002StatutModérateurDernière intervention 6 novembre 20218 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és1727Date d'inscriptionvendredi 27 décembre 2002StatutModérateurDernière intervention 6 novembre 20218 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és4297Date d'inscriptionsamedi 19 janvier 2002StatutMembreDernière intervention 9 janvier 201332 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 ? :-(
19 mars 2004 à 15:38
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...
19 mars 2004 à 14:05
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 !!!
19 mars 2004 à 08:13
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+
19 mars 2004 à 08:04
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.
19 mars 2004 à 01:23
Content d'avoir de tes nouvelles ;)
Bon, j'y vais, moi, demain je vais avoir du mal...
19 mars 2004 à 01:04
Va falloir y revenir... demain lol !
Salut à tous, y compris et surtout à Yoghisan ;)
19 mars 2004 à 00:49
Result:=UpperCase(Copy(Donnee,1,1))+LowerCase(Copy(Donnee,2,Length(Donnee)-1));
@+
19 mars 2004 à 00:34
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;
19 mars 2004 à 00:04
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 ?
18 mars 2004 à 23:44
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.
18 mars 2004 à 23:12
18 mars 2004 à 23:04
function casseMaj(donnee : string):string;
begin
Result := LowerCase(Donnee);
if Trim(Result) <> '' then Result[1] := UpperCase(Result[1])[1];
end;
18 mars 2004 à 22:25
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 !
18 mars 2004 à 21:42
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;
18 mars 2004 à 20:58
bon bah je vais tester ta fonction ! merci de m'avoir corrigé !
18 mars 2004 à 20:54
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;
18 mars 2004 à 19:15
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 !!!
18 mars 2004 à 18:52
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)
18 mars 2004 à 14:18
18 mars 2004 à 14:03
Sinon, envoie le reste de ton code, et change le titre de ton source.
Bonne prog' ;)
18 mars 2004 à 13:52
peut etre que ma fonction etait pas la meilleure, qu'on peut la "dégraisser", la faire bien mieux, mais au moins elle marchait....
18 mars 2004 à 13:46
18 mars 2004 à 10:27
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 !
18 mars 2004 à 09:50
18 mars 2004 à 08:23
j'allucine, pourquoi tt ça?
if Donnee = '' then exit;
Donnee := LowerCase(Donnee);
Donnee[1] := UpperCase(Donnee[1]);
result := Donnee;
18 mars 2004 à 00:47
function MyCasseMaj(Donnee: String): String;
begin
Result := '';
if Donnee = '' then Exit;
Result := UpperCase(Donnee[1]);
Delete(Donnee,1,1);
Result := Result + Donnee;
end;
17 mars 2004 à 22:34
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' :)
17 mars 2004 à 22:31
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;
17 mars 2004 à 21:46