Taillle des mots dans une chaine

XgaletteX Messages postés 102 Date d'inscription samedi 14 mai 2005 Statut Membre Dernière intervention 12 août 2005 - 18 juin 2005 à 01:15
XgaletteX Messages postés 102 Date d'inscription samedi 14 mai 2005 Statut Membre Dernière intervention 12 août 2005 - 18 juin 2005 à 19:26
Je cherche a déterminer la taille de chaque mot composant une chaines de caractères, j'ai un string cmoposé de mot séparé par des espaces, es ce que l'on peu récupérer la taille de ces mots?

4 réponses

ni69 Messages postés 1418 Date d'inscription samedi 12 juin 2004 Statut Membre Dernière intervention 5 juillet 2010 12
18 juin 2005 à 03:51
Cette procédure met la taille de tous les mots rencontrés dans la string texte dans ListBox1 :



procedure MaProc;
var
texte: string;
begin

texte := 'voici la chaîne de caractères séparés par des espaces';

if texte = '' then exit; // Au cas où la chaîne soit vide (dans ce code, le problème ne se pose pas, vu que la chaîne est définie sur la ligne du dessus)

while Pos(' ' , texte)<>0 do // Tant qu'un nouvel espace est trouvé on continue

begin

ListBox1.Items.Add(IntToStr(Canvas.TextWidth(Copy(texte, 1, Pred(Pos(' ' , texte)))))); // Ajout de la taille du mot trouvé avant l'espace

texte : = Copy(texte, Succ(Pos(' ' , texte)), Length(texte)); // On supprime le mot et l'espace qui le suit de la chaîne de référence pour pouvoir analyser les autres

end ;
ListBox1.Items.Add(IntToStr(Canvas.TextWidth(texte
))); // Ajout de la taille du dernier mot de la chaîne non traité par la boucle while

end;


@+
Bonne Prog'
Nico [www.ni69.new.fr]
<hr size ="2" width="100%">




N'oubliez pas de cliquer sur Réponse acceptée lorsque la réponse vous convient !





0
florenth Messages postés 1023 Date d'inscription dimanche 1 août 2004 Statut Membre Dernière intervention 17 août 2008 3
18 juin 2005 à 12:30
Ou, si l'on ne veut pas modifier la source de départ, avoir plusieurs
séparateurs (en plus de l'espace) on peut faire (plus rapide aussi):

- Ajouter un Edit (ici EdtTexte)

- Ajouter un Button (ici BtnCompter)

- Ajouter un Mémp (ici MemoResultat)

- Dans l'évenement OnClick du BtnCompter mettre:

<hr size= "2" width="100%"> procedure TFrmPrinc.BtnCompterClick(Sender: TObject);

const

{ Liste des séparateurs de mots. }

SEPS: TSysCharSet = [' ','.',';',',','!','?',':','-'];

var

i, Deb: Integer;

Mot: string;

begin

{ Cas de la chaîne vide. }

if EdtTexte.Text = EmptyStr then

Exit;

{ Petit affichage. }

MemoResultat.Text: ='Découpage de la chaîne "' + EdtTexte.Text + '" en mots, ' + sLineBreak +

'Affichage du nombre de caractères et de la largeur (en pixels) de chacun.' +

sLineBreak + sLineBreak;

{ Boucle sur la longueur du texte. }

i:= 1;

repeat

{ On passe les espaces. }

while (i < = Length(EdtTexte.Text)) and (EdtTexte.Text[i] in SEPS) do

Inc(i);

{ On note le début du mot. }

Deb:= i;

{ On récupère le mot. }

while (i < = Length(EdtTexte.Text)) and (not (EdtTexte.Text[i] in SEPS)) do

Inc(i);

if i > Deb then // Si l'on a trouvé un mot.

begin

Mot:= Copy(EdtTexte.Text,Deb,i-Deb);

{ On ajoute son nombre de caractères et sa largeur en pixels au Mémo. }

MemoResultat.Lines.Add(Format('Mot: "%s" - Nombre de caractères: %d - Largeur: %d',

[Mot,Length(Mot),Canvas.TextWidth(Mot)]));

end;

{ Jusqu'a la fin. }

until i > = Length(EdtTexte.Text);

end;

<hr size="2" width="100%">

@ ++

Florent


Si tu ne te plantes pas ......
tu ne poussera jamais
0
XgaletteX Messages postés 102 Date d'inscription samedi 14 mai 2005 Statut Membre Dernière intervention 12 août 2005
18 juin 2005 à 19:23
Nico69

G essayé ta procedure mais elle ne fonctionne pas, il y a une erreur de voilation d'accès au niveau de cette ligne la :

ListBox1.Items.Add(IntToStr(Canvas.TextWidth(Copy(texte, 1, Pred(Pos(' ' , texte))))));

.....Je vois pas pourquoi, ta une idée...
0
XgaletteX Messages postés 102 Date d'inscription samedi 14 mai 2005 Statut Membre Dernière intervention 12 août 2005
18 juin 2005 à 19:26
Ne fait pas attention au message au dessus, g résolu le pb,merci pour ton aide..
0
Rejoignez-nous