Separer les mots d'un string, sans les couper - Delphi/Pascal - Programmation
Marsh Posté le 19-03-2008 à 19:56:33
Salut
une idée:
-tu choppe la taille du string ->slip
-tu calcule la division par deux du length de slip ->moitié
-tu fais une boucle (for i:=1 to length(slip)) qui parcours chaque char de slip
à chaque espaces avant moitié, t'enregistre sa position (i)->lastspace (t'arrète d'enregistrer après biensur )
arrivé au milieu (donc if i >= moitié) bah si c'est un espace youpiii tu coupe, si c'est pas un espace, tu coupe au niveau de lastspace et tu choppe le reste de slip avec un length(slip)-lastpace
après faut voir la taille maxi de chaque champ à l'arrivée
j'èspère que c'est à peu près clair ce que je veut te dire
Marsh Posté le 21-03-2008 à 09:23:52
Tu pourrais expliquer un peu plus? ca marche pas comme j'esperaiu, ou je m'y suis mal pris (c'est sans doute le 2° cas !! )
Marsh Posté le 24-03-2008 à 21:16:49
Salut
oula j'tai di des anneries...
-disons que ta chaine s'appèle slip
-tu calcule la division par deux du length de slip ->moitié
-tu fais une boucle:
for i:=1 to length(slip) do if i<= moitié then if slip[i]=' ' then lastspace:=i;
ça parcours chaque char de slip et , à chaque espaces avant moitié, ça enregistre sa position
arrivé au milieu de la boucle (à toi d'ajouter le code) (donc if i >= moitié) bah si c'est un espace youpiii tu coupe en faisant:
champ1:=copy(slip,1,i);
avec ça par ex, si i=25, tu copie les 25 premiers caractères de slip dans champ1
puis champ2:=copy( slip, (moitié+1), (length(slip)-i) );
là tu récupère toute la fin de slip
si c'est pas un espace, tu coupe au niveau de lastspace et tu choppe le reste de slip avec un length(slip)-lastpace:
champ1:=copy(slip,1,lastspace);
champ2:=copy( slip, (lastspace+1), (length(slip)-lastspace) );
j'ai rien testé, y a surement certaines valeurs à décaler dans les copy mais voila le principe
si tu bloque, dis-moi où, met déja un bout de ton code et je te passerais un coup de main
Marsh Posté le 25-03-2008 à 08:45:52
Bon, j'ai trouvé . Sur un autre forum j'avais repeé une proc GaucheNDroite ou j'arrivais a faire ce que je voulais, mais en 2 proc, et unpeu lourd, et la solution est venue, toute bete apresn et toute simple !
Pour info, et pour servir a d'autres, voici le bout de code.En gros, ca ressemble a ce que tu suggeres, mais j'ignorais la cmd BREAK qui m'a été soufflée !!
if (Length(MontantLettre)div 2) <= 35 then
begin
label5.Visible := False;
label4.Visible := True;
MontantLettre2.Text := MontantLettre;
MontantLettre1.Visible := False;
MontantLettre2.Visible := True;
end
else
begin
for i := 1 to Length(MontantLettre) do
if (copy (MontantLettre,i,1)=' ' )and (i > Length(MontantLettre)div 2) then break ;
MontantLettre1.Text := Copy(MontantLettre,1,i) ;
MontantLettre2.Text := Copy(MontantLettre,i+1,Length(MontantLettre)) ;
Marsh Posté le 19-03-2008 à 16:49:52
Bonjour,
Je cherche a splitter un sting en fonction de sa longeur par rapport aux champs destinataires.
En gros, il s'agit d'un montant en lettre du genre :
"Dix mille six cent vingt euros et trente centimes"
que j'aimerai , en fonction de la longeur pouvoir repartir sans couper les mots sur un ou deux champ .
Si mon champ 1 fait 25car, cela amene par ex a couper "euros" en plein milieu.
Dans ce ce cas, ce mot doit donc aller dans le champ 2 avec la suite du string .
Et la, je bloque !! Mon experience est quand meme limitée !!
J'utilise Delphi6 Pro, et merci d'avance a ceux qui pourrait me donner un debut de piste, simple et efficace poiur y arriver.