|
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.
PhilMensagem 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 - #JamaisFinieMensagem 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 = "-") __Input = ChaîneFormate(__Input,ccSansEspace+ccMinuscule) __arrBuffer est un tableau de chaîne ChaîneVersTableau(__Input, __arrBuffer, _sSeparator) POUR TOUT __sBuffer, __nIndice de __arrBuffer __arrBuffer[__nIndice] = Majuscule(Gauche(__sBuffer,1)) + Milieu(__sBuffer,2) FIN __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é ^^
-- 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 |
| |
| |
| | | |
|
| | | | |
| | |
|