traitement de chaine

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : traitement de chaine

par Cyrano » 25 mars 2008, 17:02

Un peu de méthode messieurs, ce serait un bon point de départ.

L'idée générale :

La première chose à faire, c'est de détecter un tiret dans le mot à traiter (puisqu'on sait au départ qu'un mot composé comporte un tiret, rien d'autre). Si on en trouve un, on va créer un tableau indexé contenant les deux mots séparés en utilisant la fonction split(). Tu pourras alors mettre la première lettre de chacun des deux en majuscule et après ça, tu recomposes le mot avec join() sur ton tableau et retourner ton mot-composé.

Je te donne le chemin, à toi de traduire ça en code ;)

par Invité » 25 mars 2008, 15:57

bon ben merci pour tes conseils mais g me retrouve au point de départ...personne ne pourrait m'aider à mettre en majuscules la lettre suivant un caractère donné?

par agité » 25 mars 2008, 14:55

Bien sur tu peux l'améliorer je pense mais bon c'est ce que j'aurais fait plutôt que galerer a adapter une fonction que j'aurais du mal a comprendre, autant faire un truc a ta sauce qui tourne et que tu comprends bien, quitte a l'améliorer par la suite.

En tout cas oui j'avais pas fait le test pour IE :roll:

Bon courage.

par Invité » 25 mars 2008, 14:53

voici ta fonction modifiée légèrement que j'utilise
function AjouterMajuscule(string) 
{ 
    if(string.search('-') != -1) 
    { 
    CouperChaine = string.split("-"); 
    var txt = CouperChaine[0].substr(0,1).toUpperCase()+CouperChaine[0].substr(1)+"-"+CouperChaine[1].substr(0,1).toUpperCase()+CouperChaine[1].substr(1);
	}
	else
	{
	var txt = string.substr(0,1).toUpperCase()+string.substr(1); 
	}
	return txt; 
	
} 

par Invité » 25 mars 2008, 14:48

non...en fait ton code marche sous firefox, pas ie.
Voici mon code avec ma fonction first2ppercase + ta fonction ajoutermajuscules
nom.value    = AjouterMajuscule(First2UpperCase(nom.value.trim()));
prenom.value = AjouterMajuscule(First2UpperCase(prenom.value.trim()));
sous ie, je reçois l'erreur
Error:'undefined' a la valeur Null ou n'est pas un objet

par Invité » 25 mars 2008, 14:41

bon je vais abandonner ça. j'ai testé ta fonction qui marche très bien, merci pour ton aide.

par agité » 25 mars 2008, 14:31

la ligne suivante fonctionne
if (texte.substr(j,1) == "-") alert(texte.substr(j+1,1).toUpperCase());
Pour "tire-bouchon", le code affiche "B".
ça veut dire que mon caractère est bien identifié et passé en majuscules. Poutant le texte qui m'est retourné après join() n'est pas transformé comme souhaité.
C'est normal comme marqué dans mon post précédent tout les caracteres sont mis sous forme de tableau et le tableau est réunifié a la fin pourtant tu ne lui dis pas que ce caractere de la chaine fais partis du tableau il faut le définir avec

t[j] =

Comme pour les précédent

par Invité » 25 mars 2008, 14:23

ceci ne marche pas non plus
if (texte.substr(j,1) == "-") texte[j+1].toUpperCase();
ça veut dire qu'on en peut pas traiter une chaine de caractères comme un tableau?
je pensais que oui...

par Invité » 25 mars 2008, 14:16

la ligne suivante fonctionne
if (texte.substr(j,1) == "-") alert(texte.substr(j+1,1).toUpperCase());
Pour "tire-bouchon", le code affiche "B".
ça veut dire que mon caractère est bien identifié et passé en majuscules. Poutant le texte qui m'est retourné après join() n'est pas transformé comme souhaité.

par agité » 25 mars 2008, 14:14

parcequ'il utilise un tableau avec les t[j]

par Invité » 25 mars 2008, 14:11

dans la boucle, j'arrive à afficher le caractère après "-" en faisant
if (texte.substr(j,1) == "-") alert(texte.substr(j+1,1));
Donc si texte ="tire-bouchon", la ligne ci dessus m'affiche "b".
Sur cette base, je ne comprends pas pourquoi ceci ne marche pas
function First2UpperCase(texte) { 
var t = new Array(); 
    for(j=0 ; j < texte.length ;j++) { 
        if(j == 0) t[j] = texte.substr(j,1).toUpperCase(); 
        else t[j] = texte.substr(j,1).toLowerCase(); 
        if (texte.substr(j,1) == "-") texte.substr(j+1,1).toUpperCase(); // ligne ajoutée pour passer la lettre suivante en majuscules 
    } 
    return t.join(''); 
}

par Invité » 25 mars 2008, 14:05

Maintenant tu as un problème qui se pose pour avoir une chaine possedant un tiret, la fonction que tu utilise se fait élément par élément et join l'ensemble du tableau ensuite.
Justement, si la fonction effectue un traitement élément par élément, il ne devrait-il pas être possible dans la boucle, de modifier j+1 dans le cas ou j == "-" ?

par agité » 25 mars 2008, 13:57

houlà, ça a pas l'air très optimisé ton truc...je suis pas sûr d'avoir tout compris, je vais regarder. Merci.
Je précisque quand même que je ne cherche seulement quelquechose qui marche, j'essaye aussi d'apprendre à coder propre ;p
Agité, je ne cherche pas à critiquer ton code hein? merci pour ton aide. je voulais juste dire que ça serait pas très optimisé de faire 2 boucles, une avec ma fonction et une autre avec la tienne.
Je cherche juste un moyen de faire une seule boule en modifiant un peu first2uppercase.
Pas de soucis, ce que tu as recuperer est un code qui traine sur le net et qui permet de parcourir sous forme de tableau une chaine de caractere pour mettre en upperCase le premier élément.

Maintenant tu as un problème qui se pose pour avoir une chaine possedant un tiret, la fonction que tu utilise se fait élément par élément et join l'ensemble du tableau ensuite.

La fonction que je te propose est peut être pas très propre mais fonctionne pour tout ce qui pourrait posséder un tiret ou non, bien sur cela peut être optimiser.

En tout cas si tu trouve pour le first2uppercase (litteralement la premiere lettre en majuscule) avec d'autres lettres je serais intéresse.

par Invité » 25 mars 2008, 13:36

houlà, ça a pas l'air très optimisé ton truc...je suis pas sûr d'avoir tout compris, je vais regarder. Merci.
Je précisque quand même que je ne cherche seulement quelquechose qui marche, j'essaye aussi d'apprendre à coder propre ;p
Agité, je ne cherche pas à critiquer ton code hein? merci pour ton aide. je voulais juste dire que ça serait pas très optimisé de faire 2 boucles, une avec ma fonction et une autre avec la tienne.
Je cherche juste un moyen de faire une seule boule en modifiant un peu first2uppercase.

par Invité » 25 mars 2008, 13:32

je suis sûr que ça peut se faire en 1 ligne comme je l'ai tenté dans les 2 posts précédents...je manque d'expérience en javascript mais y aurait pas un moyen d'intégrer ce traitement dans la première fonction first2uppercase?