Pedro
Nombre de messages : 1595 Date d'inscription : 19/01/2014
| Sujet: Problème avec la fonction ReplaceStringInString. Jeu 20 Avr 2017 - 7:14 | |
| Bonjour. @Klaus. Je voulais te signaler un petit problème avec cette fonction. Dans le cas où la chaîne de remplacement est plus longue que la chaîne de recherche, le résultat final est tronqué, comme on peut le voir ci-dessous ! Je suis donc dans l'obligation de créer une nouvelle variable, avant l'appel de la fonction, comme suit: a$=string$(len(chaine$)*2," ")Ensuite, remplacer l'avant-dernier paramètre par adr(a$). Et au retour, ajouter: chaine$=trim$(a$)Ce qui devient très lourd à gérer, car je dois appeler cette fonction des dizaines de fois, avec des variables différentes. Ne serait-il pas possible d'intégrer le tout dans la fonction ? Merci de la suite. - Code:
-
dll_on "kgf"
dim res%, e$, f$, chaine$
chaine$="Bonjour, tout le monde."
e$="," f$=" , " res%=dll_call5("ReplaceStringInString",adr(chaine$),adr(e$),adr(f$),adr(chaine$),0)
message "["+chaine$+"]" | |
|
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Problème avec la fonction ReplaceStringInString. Jeu 20 Avr 2017 - 8:54 | |
| Tu te heurtes malheureusement à une des limitations de Panoramic en atière d'nterface avec une DLL. On ne peut passer que des valeurs entières, pas de chaines de caractères. Et donc, pour pallier à cela, on passe l'adresse de la chaîne, et la DLL doit se débrouiller avec ce qu'elle trouve à cet endroit. En particulier, la DLL n'a aucun moyen de créer une nouvelle chaîne Panoramic, ni de rallonger ou raccourcir une chaîne existante. Pour cette raison, dans toute la doc et dans tous les exemples, il y a bien un - Code:
-
sortie$ = string$(255," ") avant un appel à uun etelle fonction, qui sera suivi d'un - Code:
-
sortie$ = trim$(sortie$) Maintenant, il est possible de ne failre la création de la variable de sortie qu'une seule fois, au début, dans une variable du genre temp$. Puis, après chaque appel à une telle fonction, on fait - Code:
-
sortie$ = trim$(temp$) et c'est tout. En voici l'application dans une petite démo: - Code:
-
dll_on "kgf"
dim res%, e$, f$, chaine$, temp$ temp$ = string$(255," ")
chaine$="Bonjour, tout le monde." e$="," f$=" , " res%=dll_call5("ReplaceStringInString",adr(chaine$),adr(e$),adr(f$),adr(temp$),0) chaine$ = trim$(temp$) message "["+chaine$+"]"
chaine$="Bien que d'une longueur différente, cette chaîne marche aussi." e$="," f$=" , " res%=dll_call5("ReplaceStringInString",adr(chaine$),adr(e$),adr(f$),adr(temp$),0) chaine$ = trim$(temp$) message "["+chaine$+"]"
chaine$="Et, pour finir, ici, un autre exemple.." e$="," f$=" , " res%=dll_call5("ReplaceStringInString",adr(chaine$),adr(e$),adr(f$),adr(temp$),0) chaine$ = trim$(temp$) message "["+chaine$+"]"
Désolé, mais techniquement, je ne peux pas faire mieux. La chaîne résultante a bien la binne longueuren fin de processus, dans la DLL. Mais en la recopiant dans la chaîne d'origine, il n'y a tout simplement pas assez de place.
Dernière édition par Klaus le Jeu 20 Avr 2017 - 11:26, édité 1 fois | |
|
Ouf_ca_passe
Nombre de messages : 285 Age : 76 Localisation : Villeneuve d'Ascq (59-Dpt du NORD) France Date d'inscription : 21/12/2015
| Sujet: Alors là ! Chapeau ! Jeu 20 Avr 2017 - 11:23 | |
| | |
|
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Problème avec la fonction ReplaceStringInString. Jeu 20 Avr 2017 - 11:26 | |
| | |
|
Pedro
Nombre de messages : 1595 Date d'inscription : 19/01/2014
| Sujet: Problème avec la fonction ReplaceStringInString. Jeu 20 Avr 2017 - 14:29 | |
| Bonjour.
OK, merci Klaus d'avoir regardé. Je vais donc procéder autrement. | |
|
Contenu sponsorisé
| Sujet: Re: Problème avec la fonction ReplaceStringInString. | |
| |
|