PC SOFT

GRUPOS DE DISCUSSÃO PROFISSIONAL
WINDEVWEBDEV e WINDEV Mobile

Inicio → WINDEV 2024 → PositionOccurrence + rangsuivant plante
PositionOccurrence + rangsuivant plante
Iniciado por Philippes, mar., 22 2018 6:51 PM - 3 respostas
Membro registado
5 mensagems
Publicado em março, 22 2018 - 6:51 PM
Bonjour,

Je viens de passer de Windev 17 à Windev 23.

Bien sur, je m'attendais à devoir vérifier et modifier pas mal de choses mais là, je suis perdu. J'ai l'impression qu'il y a encore un bug dans Windev 23.

En lançant une procédure (que j'utilise depuis des années), qui met les adresses en minuscules, puis transforme chaque première lettre en majuscule, j'ai tout à coup l'erreur suivante :

Vous avez appelé la fonction PositionOccurrence.
Utilisation de l'option de parcours rangSuivant alors que le parcours n'a pas été initialisé par rangPremier ou qu'il est terminé.


Voici le code utilisé :

Res est un entier
Adresse est une chaîne

Adresse="SINT-ANDRIESSTRAAT 34"
Adresse=ChaîneFormate(Adresse,ccSansEspace+ccMinuscule)
Adresse=Majuscule(Gauche(Adresse,1))+Milieu(Adresse,2)

Res=PositionOccurrence(Adresse,"-",rangPremier)
TANTQUE Res>0
Adresse=Gauche(Adresse,Res)+Majuscule(Milieu(Adresse,Res+1,1))+Milieu(Adresse,Res+2)
Res=PositionOccurrence(Adresse,"-",rangSuivant)
FIN


Le résultat devrait être "Sint-Andriesstraat 34".

Au premier passage de la boucle, tout se passe bien mais dès le second passage ("Res" est à zéro à ce moment-là), ça plante.

Quelqu'un aurait une idée ?

Merci.

Phil
Mensagem modificada, março, 22 2018 - 7:06 PM
Membro registado
948 mensagems
Popularité : +30 (92 votes)
Publicado em março, 23 2018 - 5:26 AM
Coucou,

J'ai pas réusit a reproduire le problem ...





--
In üs we trust

Chocolat en Suisse - #Foetus
Kaeng Khiao Wan en Thailland - #ATR
Kopi luwak en Indonesie - #Abracadabra
Durio zibethinus en Malaisie - #JamaisFinie
Mensagem modificada, março, 23 2018 - 5:27 AM
Membro registado
948 mensagems
Popularité : +30 (92 votes)
Publicado em março, 23 2018 - 5:50 AM
Coucou,

_sAddresse est une chaîne = "SINT-ANDRI-ESSTRA-AT 34"

PROCEDURE INTERNE Format_Adresse(__Input est une chaîne, _sSeparator est une chaîne = "-")
// Passe la chaîne de caractères en minuscules.
__Input = ChaîneFormate(__Input,ccSansEspace+ccMinuscule)
__arrBuffer est un tableau de chaîne
// Remplit un tableau du type spécifié avec la chaîne de caractères passée en paramètre.
ChaîneVersTableau(__Input, __arrBuffer, _sSeparator)
// Parcours le tableau
POUR TOUT __sBuffer, __nIndice de __arrBuffer
// Pass le premier caractére en majuscule
__arrBuffer[__nIndice] = Majuscule(Gauche(__sBuffer,1)) + Milieu(__sBuffer,2)
FIN
// Transforme le tableau en chaine
__Input = TableauVersChaîne(__arrBuffer, _sSeparator)
FIN

Format_Adresse(_sAddresse)

Info(_sAddresse)


Voila un petit morceau de code différent qui fait le même boulot, juste histoire de finir le café :p ^^

--
In üs we trust

Chocolat en Suisse - #Foetus
Kaeng Khiao Wan en Thailland - #ATR
Kopi luwak en Indonesie - #Abracadabra
Durio zibethinus en Malaisie - #JamaisFinie
Membro registado
5 mensagems
Publicado em março, 23 2018 - 11:41 AM
Charly,

Merci pour ta réponse.

En fait, dans le bout de code que j'ai montré, j'ai encodé l'adresse en dur. Et là, effectivement, il n'y a pas de problème.

En réalité, ce code fait partie d'une procédure globale, qui reçoit l'adresse à modifier en paramètre.

Le code qui appelle cette procédure globale, va chercher l'adresse dans une colonne de table. Je passe donc en paramètre une colonne de table !

Le problème se situe là, il n'y a plus moyen de passer une colonne de table en paramètre pour y apporter des modifications, alors que ça marchait très bien en version 17. C'est dommage.

L'astuce est d'importer le texte à modifier en LOCAL.

Procedure PremièresLettresEnMajuscules(LOCAL Adresse)

Res est un entier

Adresse=ChaîneFormate(Adresse,ccSansEspace+ccMinuscule)
Adresse=Majuscule(Gauche(Adresse,1))+Milieu(Adresse,2)

Res=PositionOccurrence(Adresse,["-"," "],rangPremier)
TANTQUE Res>0
Adresse=Gauche(Adresse,Res)+Majuscule(Milieu(Adresse,Res+1,1))+Milieu(Adresse,Res+2)
Res=PositionOccurrence(Adresse,["-"," "],rangSuivant)
FIN

RENVOYER Adresse


Je suis donc condamné à revérifier toutes mes procedures :)

Phil