Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1051 connectés 

  FORUM HardWare.fr
  Programmation
  Delphi/Pascal

  Separer les mots d'un string, sans les couper

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Separer les mots d'un string, sans les couper

n°1704817
bf77170
Posté le 19-03-2008 à 16:49:52  profilanswer
 

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.  
 

mood
Publicité
Posté le 19-03-2008 à 16:49:52  profilanswer
 

n°1704933
Flagad'awa​re
c pô moi, j'ai pas touché!
Posté le 19-03-2008 à 19:56:33  profilanswer
 

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  :D )  
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 [:barthaliastoxik]


Message édité par Flagad'aware le 19-03-2008 à 19:57:29
n°1705321
bf77170
Posté le 20-03-2008 à 13:52:16  profilanswer
 

je vais essayer ca, d'autres idées ?

n°1705812
bf77170
Posté le 21-03-2008 à 09:23:52  profilanswer
 

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 !! )

n°1707079
Flagad'awa​re
c pô moi, j'ai pas touché!
Posté le 24-03-2008 à 21:16:49  profilanswer
 

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


Message édité par Flagad'aware le 24-03-2008 à 21:17:22
n°1707141
bf77170
Posté le 25-03-2008 à 08:45:52  profilanswer
 

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)) ;  


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Delphi/Pascal

  Separer les mots d'un string, sans les couper

 

Sujets relatifs
Mysql : création base pour héberger mots de passe[Résolu]"Couper" un .pdf
blocage pour un programme de mots croisésJava - calculer une formule arithmétique contenue dans un "String"
[C#] Convertir un Float en StringSéparer et transformer les lignes d'un textarea
string !C/C++ couper une chaine en deux, distance fixe
Conversion string[Javascript] Une string avec une balise php dedans
Plus de sujets relatifs à : Separer les mots d'un string, sans les couper


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR