OVH Cloud OVH Cloud

Fonction ExtraitChaine()

7 réponses
Avatar
Yves.83
Bonjour à tous

Je viens de me rendre compte que la fonction ExtraitChaine()
avec TAB ou autre comme séparateur ne me renvoyait plus EOT
à la fin de la boucle, mais une chaine vide.
Je suis en 315p.
Est-ce quelqu'un a ce problème aussi ou alors ce pourrait être lié
à un problème de config.
Merci
Yves

Code de test ci-dessous :

ch,ch1 est une chaîne = ""
x est entier = 0

POUR x = 1 A 10
ch1 += NumériqueVersChaine(x,"05d")+TAB
FIN
Trace(ch1)
x = 0
BOUCLE
x ++
ch = ExtraitChaîne(ch1,x)
Trace(x,ch)
SI ch = EOT ALORS Trace(" sortie avec EOT") ; SORTIR
SI ch = "" ALORS Trace("sortie avec chaine vide") ; SORTIR
FIN

7 réponses

Avatar
Yves.83
Petite précision :
si vous remplacez les dernières lignes par :
SI ch = EOT ALORS Trace(" sortie avec EOT") ; SORTIR
SI ch = "" ALORS Trace("j'ai une chaine vide")
FIN
vous verrez la ligne 11 - chaine vide et la 12 - EOT



"Yves.83" a écrit dans le message de news:
41655d23$0$7199$
Bonjour à tous

Je viens de me rendre compte que la fonction ExtraitChaine()
avec TAB ou autre comme séparateur ne me renvoyait plus EOT
à la fin de la boucle, mais une chaine vide.
Je suis en 315p.
Est-ce quelqu'un a ce problème aussi ou alors ce pourrait être lié
à un problème de config.
Merci
Yves

Code de test ci-dessous :

ch,ch1 est une chaîne = ""
x est entier = 0

POUR x = 1 A 10
ch1 += NumériqueVersChaine(x,"05d")+TAB
FIN
Trace(ch1)
x = 0
BOUCLE
x ++
ch = ExtraitChaîne(ch1,x)
Trace(x,ch)
SI ch = EOT ALORS Trace(" sortie avec EOT") ; SORTIR
SI ch = "" ALORS Trace("sortie avec chaine vide") ; SORTIR
FIN






Avatar
Romain PETIT
Dans son message précédent, Yves.83 a écrit :
Bonjour à tous



Bonjour,

Est-ce quelqu'un a ce problème aussi ou alors ce pourrait être lié
à un problème de config.



Plutôt un problème de programmation...
Tu as 10 TAB donc tu boucles 11 fois, la 11ème fois tu récupères une
chaine vide...
A+

--
Romain PETIT
http://cerbermail.com/?IJmancZl88
(cliquez sur le lien ci-dessus pour me contacter en privé)
Avatar
ZryMel
Hello

en effet il te "manque 1 tour"

essaye ce code :

ch,ch1 est une chaîne = ""
x est entier = 1

ch1 = NumériqueVersChaine(x,"05d")
POUR x = 2 A 10
ch1 += TAB+NumériqueVersChaine(x,"05d")
FIN
Trace(ch1)
x = 0
BOUCLE
x ++
ch = ExtraitChaîne(ch1,x)
Trace(x,ch)
SI ch = EOT ALORS Trace(" sortie avec EOT") ; SORTIR
SI ch = "" ALORS Trace("sortie avec chaine vide") ; SORTIR
FIN


--
ZryMel
Avatar
Yves.83
Merci pour vos réponses, mais ce qui n'est pas exact alors c'est la ligne de
l'aide :
Résultat = La constante EOT si <Rang > est plus grand que le nombre de
séparateurs contenus dans la chaîne.
et donc il faut considérer la fin de chaine comme un séparateur
supplémentaire
car quand j'ai le rang = 11 et le nombre de TAB = 10 , je n'ai pas EOT

Je vais donc m'adapter. merci encore
Yves

"Romain PETIT" a écrit dans le message de news:

Dans son message précédent, Yves.83 a écrit :
> Bonjour à tous

Bonjour,

> Est-ce quelqu'un a ce problème aussi ou alors ce pourrait être lié
> à un problème de config.

Plutôt un problème de programmation...
Tu as 10 TAB donc tu boucles 11 fois, la 11ème fois tu récupères une
chaine vide...
A+

--
Romain PETIT
http://cerbermail.com/?IJmancZl88
(cliquez sur le lien ci-dessus pour me contacter en privé)



Avatar
michel.chanu
Bonjour!

Personnellement, et depuis toujours avec WINDEV, je teste Resultat comme suit:

si Resultat = EOT et pas (Resultat ~= "") alors
...

Bien sur il faut être certain que Resultat renvoie toujours une chaine non vide.

Bon dev...
Avatar
michel.chanu
Re bonjour!

Heureusement que je vais prendre un peu de repos la semaine prochaine!

Je me suis mélangé les crayons entre <<SI>> et <<TANT QUE>>. Voilà les
bonnes syntaxes:

// Dans un boucle (p.ex.)
boucle
Resultat = ExtraitChaine(...)
SI (Resultat ~= "") ou (Resultat = eot) alors sortir
// Traitements...
fin

// Avec <<Tant Que>>
Resultat = ExtraitChaine(...)
TANT QUE (Resultat <> EOT) et pas (Resultat ~= "")
//Traitements...
Resultat = ExtraitChaine(...)
fin

Je précise que ce genre de problème m'est apparu depuis la version 4.1
de Windev.

Bon DEV...
Avatar
Romain PETIT
Dans son message précédent, Yves.83 a écrit :
Merci pour vos réponses, mais ce qui n'est pas exact alors c'est la ligne de
l'aide :
Résultat = La constante EOT si <Rang > est plus grand que le nombre de
séparateurs contenus dans la chaîne.
et donc il faut considérer la fin de chaine comme un séparateur
supplémentaire
car quand j'ai le rang = 11 et le nombre de TAB = 10 , je n'ai pas EOT



Oui, la chaine vide renvoyée correspond à ce qui est entre le dernier
<TAB> et la fin de la chaine.
La doc est effectivement mal rédigée, il faut plutôt lire :
Résultat = La constante EOT si <Rang> est plus grand que (le nombre de
séparateurs + 1) contenus dans la chaîne .

Je vais donc m'adapter. merci encore



Ce comportement (et la doc citée) existe depuis toujours.. (en tout cas
depuis WD55)

A+

--
Romain PETIT
http://cerbermail.com/?IJmancZl88
(cliquez sur le lien ci-dessus pour me contacter en privé)