| A l'aide Klaus. | |
|
|
|
Auteur | Message |
---|
pan59
Nombre de messages : 367 Age : 67 Localisation : Wattignies Date d'inscription : 16/10/2011
| Sujet: A l'aide Klaus. Dim 2 Sep 2012 - 10:16 | |
| Bonjour Klaus.
Avez-vous la possibilité de créer une DLL personnalisée à mon intention, svp ? En espérant ne pas abuser de votre temps.
Je bloque dans mon programme java de 16.000 lignes, que j'essaie de réécrire en panoramic.
Il me manque les fonctions suivantes:
En premier, la fonction en java. En second lieu, la fonction correspondante en basic.
J'aurais donc besoin des fonctions substring qui suivent, puis startswith et endswith qui retourneraient vrai ou faux.
ligne$.substring(0,xx%) -> left$(ligne$,xx%) ligne$.substring(xx%) -> right$(ligne$,len(ligne$)-xx%)
ligne$.substring(xx%+1) -> right$(ligne$,len(ligne$)-xx%-1)
chaine$.indexOf(sous_chaine$)>-1 -> instr(chaine$,sous_chaine$)>0
chaine$.startsWith(sous_chaine$) -> left$(chaine$,len(sous_chaine$))=sous_chaine$ chaine$.endsWith(sous_chaine$) -> right$(chaine$,len(sous_chaine$))=sous_chaine$
Merci d'avance de votre réponse. | |
|
| |
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: A l'aide Klaus. Dim 2 Sep 2012 - 10:46 | |
| Oui, je peux faire ça. Mais avec une réserve: Panoramic ne connait pas le type de données "boolean". La notion "vrai" ou "faux" n'a donc pas de sens en Panoramic. A la place, je peux retourner une valeur 0 pour "faux" et 1 pour "vrai".
Je fais cela et je t'informerai lorsque ce sera prêt.
Une petite remarque: sur ce forum, on se tutoie tous. C'est plus convivial ainsi. Alors, je t"invite à laisser tomber le "vous"... | |
|
| |
Nardo26
Nombre de messages : 2294 Age : 56 Localisation : Valence Date d'inscription : 02/07/2010
| Sujet: Re: A l'aide Klaus. Dim 2 Sep 2012 - 10:50 | |
| Bonjour pan59, Avant que Klaus te réponde, j'aimerais comprendre ta demande : car tu donnes toi-même l'équivalent en basic Panoramic... Ooops on s'est croisé Klaus ! | |
|
| |
Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: A l'aide Klaus. Dim 2 Sep 2012 - 11:00 | |
| En fait, sauf erreur, puisque tu as tout, tu n'a qu'à faire un if... mais quelque chose (une subtilité) doit m'échapper aussi ... | |
|
| |
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: A l'aide Klaus. Dim 2 Sep 2012 - 11:37 | |
| J'ai ajouté deux fonctions à KGF.dll: - Code:
-
res% = dll_call2("StartsWith",adr(chaine$),adr(debut$)) res% = dll_call2("EndsWith",adr(chaine$),adr(fin$)) Les deux fonctions retournent 1 si la condition est vraie et 0 sinon. La doc est mise à jour dans KGF.hlp. Essaie ces deux fonctions à partir de KGF.dll. Est-ce que cela t'est utile ? Si tu as besoin d'autres fonctions, pourrais-tu suggérer le passage de paramètres, à l'image des deux fonctions ci-dessus ? Je rappelle l'accès à mon WebDav: Site: http://www.mydrive.ch/Identifiant: panoramic@klausgunther Mot de passe: panoramic123 Dossier: DLL | |
|
| |
pan59
Nombre de messages : 367 Age : 67 Localisation : Wattignies Date d'inscription : 16/10/2011
| Sujet: A l'aide Klaus. Dim 2 Sep 2012 - 11:46 | |
| Bonjour Klaus.
Merci beaucoup pour la réponse rapide et l'intégration dans la DLL.
Oui, j'aurais besoin des fonctions suivantes:
'substring (0,xx%)' qui donnerait directement left$(chaine$,xx%), comme suit:
ligne$.substring(0,xx%) -> left$(ligne$,xx%)
'substring (xx%)' qui donnerait right$(chaine$,len(chaine$)-xx%), comme suit:
ligne$.substring(xx%) -> right$(ligne$,len(ligne$)-xx%)
'substring(xx%+1) qui donnerait right$(ligne$,len(ligne$)-xx%-1), comme suit:
ligne$.substring(xx%+1) -> right$(ligne$,len(ligne$)-xx%-1)
Ce serait super de les intégrer dans la DLL, et ainsi mon programme de 16.000 lignes pourrait avancer à grands pas, sans trop de problèmes.
| |
|
| |
pan59
Nombre de messages : 367 Age : 67 Localisation : Wattignies Date d'inscription : 16/10/2011
| Sujet: A l'attention de Klaus. Dim 2 Sep 2012 - 11:49 | |
| Rebonjour Klaus.
Toutes ces nouvelles fonctions ne pourraient-elles pas être intégrées dans 'strings.dll', car j'utilise déjà la fonction Instring de cette DLL.
Merci d'avance. | |
|
| |
Severin
Nombre de messages : 547 Localisation : Braunschweig / Germany Date d'inscription : 13/12/2010
| Sujet: Re: A l'aide Klaus. Dim 2 Sep 2012 - 14:02 | |
| @ Kaus
Ich habe eine Frage zu deiner Dokumentation. Pflegst du nur noch die Hilfe Datei ?
Ich kann die Dokumentation als Hilfe Datei nicht mehr übersetzen.
Schade
| |
|
| |
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: A l'aide Klaus. Dim 2 Sep 2012 - 14:11 | |
| @Pan59: Toutes les fonctions de string.dll sont intégrées dans KGF.dll. Les différentes DLLs individuelles ne sont plus maintenues déparément - trop de travail.
Si c'est vraiment important, je peux les ré-extraire de KGF.dll, mais je ne peux pas garantir une mise à niveau régulière. KGF.dll sera toujours complète et à jour.
@Severin; In der Tat ist die gesamte Dookumentation auf KHG.hlp umgestellt worden. Ich were sehen, obj ich eind Textversion dazugeben kann. | |
|
| |
pan59
Nombre de messages : 367 Age : 67 Localisation : Wattignies Date d'inscription : 16/10/2011
| Sujet: A l'aide Klaus. Dim 2 Sep 2012 - 14:15 | |
| Bonjour Klaus.
OK, cela me convient parfaitement.
As-tu pû intégrer les dernières fonctions 'substring' dans kgf.dll ?
Par contre, il est impossible d'ouvrir le fichier kgf.hlp sous windows 64.
Merci pour tout. | |
|
| |
Severin
Nombre de messages : 547 Localisation : Braunschweig / Germany Date d'inscription : 13/12/2010
| Sujet: Re: A l'aide Klaus. Dim 2 Sep 2012 - 14:18 | |
| @ klaus Du sperrst den Rest der Welt aus. Alle die kein französisch sprechen. England, Deutschland usw. Eine einfache Textdatei wie der Editor reicht. Severin | |
|
| |
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: A l'aide Klaus. Dim 2 Sep 2012 - 15:04 | |
| Ich habe eine TExtdatei dazugelegt: KGF_HLP.rtf. Dies ist die Datei, die zue Erzeugung von KGF.hlp verwendet word. | |
|
| |
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: A l'aide Klaus. Dim 2 Sep 2012 - 15:13 | |
| @Pan59: Sous WF, tu as besoin de l'utilitaire Microsoft WinHlp32.exe. Tu peux le télécharger directement chez MicroSoft, ou le prendre dans mon WebDav, dossier "Klaus Sources". Et ça marchera, comme chez les autres qui ont W7. En ce qui concerne substring, je t'ai demandé de me décrire exactement ce que tu souhaites comme passage de paramètres. Ton post initial est ambigu. D'une part, je ne connais pas Java. D'autre part, Panoramic ne connait que des appels à des fonctions DLL avec un nombre de paramètres fixe, et non pas 1 ou 2 paramètres comme dans don post initial. Peux-tu me donner une syntaxe du type: - Code:
-
res% = dll_call2("substring",par1,par2) ou res% = dll_call1("substring",par1)
en expliquant le sens du ou des paramètres ? La fonction sera alors rapidement disponible. | |
|
| |
pan59
Nombre de messages : 367 Age : 67 Localisation : Wattignies Date d'inscription : 16/10/2011
| Sujet: a l'aide Klaus. Dim 2 Sep 2012 - 15:28 | |
| Bonjour Klaus.
Je ne suis pas sûr, mais ils me semble que les fonctions de la DLL ne peuvent retourner que des valeurs entières, et non pas des chaînes !!
Merci de me confirmer ou non. | |
|
| |
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: A l'aide Klaus. Dim 2 Sep 2012 - 15:37 | |
| Oui et non. Techniquement, la valeur de retour est toujours un entier, d'où la syntaxe - Code:
-
res% = dll_call3('xxx",p1%,p2%,p3%) res% est forcément un entier. Mais pour les paramètres, on a la possibilité de passer l'adresse en paramètre, au lieu du paramètre lui-même. Et je m'en sers pour passer des chaînes de caractères à une routine DLL, mais aussi pour permettre à une routine de DLL d'envoyer une chaîne de caractères au programme appelant. Regarde ceci: - Code:
-
dim res%, vers$, fam$ vers$ = string$(255," ") : ' réserver de l'espace fam$ = string$(255," ") res% = dll_call2("GetWindowsVersionAndFAmily",adr(vers$),adr(fam$)) vers$ = trim$(vers$) : ' supprimer les espaces non utilisés fam$ = trim$(fam$) message "On est sur un "+vers$+" de la famille des "+fam$
Tu vois, on ignore en réalité la valeur retournée par la fonction. Seules comptent les chaînes de caractères créées par la fonction et écrites dans l'espace de 255 "blancs" réservés pour chacune des deux variables. | |
|
| |
pan59
Nombre de messages : 367 Age : 67 Localisation : Wattignies Date d'inscription : 16/10/2011
| Sujet: à l'aide Klaus Dim 2 Sep 2012 - 15:52 | |
| Bonjour.
OK, donc j'ai besoin des fonctions suivantes:
res%=dll_call4(adr(param1$), adr(param2$), 0, adr(xx%))
qui retournerait left$(param1$,xx%) au programme appelant, dans la chaine param2$.
Et ensuite:
res%=dll_call3(adr(param1$), adr(param2$), adr(xx%))
qui retournerait right$(param1$,len(param1$)-xx%) au programme appelant, dans la chaine param2$.
Merci de ton aide.
| |
|
| |
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: A l'aide Klaus. Dim 2 Sep 2012 - 16:32 | |
| Hmmmm, - Citation :
- res%=dll_call4(adr(param1$), adr(param2$), 0, adr(xx%))
qui retournerait left$(param1$,xx%) au programme appelant, dans la chaine param2$.
Et ensuite:
res%=dll_call3(adr(param1$), adr(param2$), adr(xx%))
qui retournerait right$(param1$,len(param1$)-xx%) au programme appelant, dans la chaine param2$.
voudrait peut-être dire: - Citation :
- res%=dll_call4("substring",adr(param1$), adr(param2$), 0, adr(xx%))
qui retournerait left$(param1$,xx%) au programme appelant, dans la chaine param2$.
Et ensuite:
res%=dll_call3("substring",adr(param1$), adr(param2$), adr(xx%))
qui retournerait right$(param1$,len(param1$)-xx%) au programme appelant, dans la chaine param2$.
Mais cela ne peut pas être le mêm nom "substring" car une fonction ne peut pas être appelée une fois avec 3 paramètres et une autre fois avec 4 paramètres. Je pourrais faire ceci: - Citation :
- res%=dll_call3("LeftStr",adr(param1$), adr(param2$), adr(xx%))
qui retournerait left$(param1$,xx%) au programme appelant, dans la chaine param2$.
Et ensuite:
res%=dll_call3("RightStr",adr(param1$), adr(param2$), adr(xx%))
qui retournerait right$(param1$,len(param1$)-xx%) au programme appelant, dans la chaine param2$.
mais dans tous les cas, il faudrait appeler ces fonctions de la manière suivante: - Code:
-
dim s1$, s2$
s1$ = "un texte pour voir" s2$ = str$(255," ") res%=dll_call3("LeftStr",adr(s1$), adr(s2$), 4) s2$ = trim$(s2$) message s2$ : ' affiche "un t"
s2$ = str$(255," ") res%=dll_call3("RightStr",adr(s1$), adr(s2$), 6) s2$ = trim$(s2$) message s2$ : ' affiche "r voir"
Est-ce vraiment une avance sur le simple appel à LEFT$() ou RIGHT$() ? | |
|
| |
pan59
Nombre de messages : 367 Age : 67 Localisation : Wattignies Date d'inscription : 16/10/2011
| Sujet: à l'aide Klaus Dim 2 Sep 2012 - 16:40 | |
| Bonjour klaus.
Oui, cela me convient parfaitement.
Par contre, dans la 1ère fonction, le paramètre 0 doit absolument être intégré.
Merci de la suite donnée. | |
|
| |
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: A l'aide Klaus. Dim 2 Sep 2012 - 18:40 | |
| OK, je vais le faire.
Mais peux-tu m'expliquer pourquoi intégrer un paramètre 0 alors que c'est une valeur constante et qu'elle ne sera jamais utilisée ? | |
|
| |
pan59
Nombre de messages : 367 Age : 67 Localisation : Wattignies Date d'inscription : 16/10/2011
| Sujet: à l'aide Klaus Dim 2 Sep 2012 - 18:42 | |
| Bonsoir Klaus.
Le paramètre '0' correspond au 1er caractère d'une chaîne, en java. Peut-être est-il inutile en panoramic ?
Je te laisse le soin de voir.
Merci pour toute ton aide. | |
|
| |
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: A l'aide Klaus. Dim 2 Sep 2012 - 18:53 | |
| Enn effet, dans ce cas, c'est parfaitement inutile. Déjà, en Panoramic pur, la fonction LEFT(chaine$,n%) retourne les n% premiers caractères, en prenant vraiment au début. Et accessoirement, les positions des caractères en Panoramic sont numérotées à partir de 1, pas de 0. Donc, dans "Panoramic", le caractère 1 est "P", et LEFT$("Panoramic",4) retourne une chaîne de caractères contenant "Pano". Tu es sûr qu'il est plus intéressant pour toi d'avoir une fonction DLL pour laquelle il faut 3 lignes de code, au li'eu d'une seule avec LEFT$ ? Regarde les deux morceaux de code suivants sui sont fonctionnellement équivalents; 1. Panoramic seul: - Code:
-
resultat$ = LEFT$(chaine$,n%) 2. avec fonction DLL: - Code:
-
temp$ = string$(255," ") res% = dll_call3("LeftStr",adr(chaine$),adr(temp$),n%) resultat$ = trim$(temp$ Et je te parle même pas du temps d'exécution qui pour la seconde solution est un multiple de la première solution ! Techniquement, ce n'est pas un problème pour moi de le faire. Je m'interroge simplement si c'est vraiment la bonne solution pour toi. En général, on utilise des fonctions DLL pour réaliser des fonctions qui ne sont pas disponibles en Panoramic. Mais je ne vois vraiment pas l'intérêt technique de réécrire des fonctions qui existent déjà en Panoramic, sans leur ajouter au moins un supplément de fonctionnalité. Du vois ce que je veux dire ? | |
|
| |
pan59
Nombre de messages : 367 Age : 67 Localisation : Wattignies Date d'inscription : 16/10/2011
| Sujet: à l'aide Klaus Dim 2 Sep 2012 - 18:59 | |
| Bonsoir Klaus.
Tu as certainement raison.
Il me manquerait donc la fonction suivante:
ligne$.substring(xx%) -> right$(ligne$,len(ligne$)-xx%)
Cette fonction retournerait une sous-chaine à partir d'une position donnée, et cela jusqu'au dernier caractère de la chaine de départ.
Merci de ton aide pour l'intégrer dans la dll. | |
|
| |
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: A l'aide Klaus. Dim 2 Sep 2012 - 19:27 | |
| Je ne voudrais pas donner l'impression d'être buté, mais là encore, tu as une fonction Panoramic native très simple que j'utilise en permanence dans ce but: - Code:
-
resultat$ = MID$(chaine$,xx%,20000) à la place de 20000, tu mets n'importe quoi qui est plus grand ou égal à la longueur restante entre xx% et la fin de la chaîne. Tu peux aussi écrire - Code:
-
resultat$ = MID$(chaine$,xx%,len(chaine$)) ce qui est plus propre et marche aussi pour des chaînes plus longues que 20000 caractères, mais c'est plus lon à exécuter. Tu vois, bien qu'on aimerait avoir quelque fois plus de souplesse en Panoramic, il y a des fonctions natives intéressantes ! | |
|
| |
Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: A l'aide Klaus. Dim 2 Sep 2012 - 19:48 | |
| Je suis assez d'accord avec Klaus, pour faire une fonction, mieux vaut ne le faire que quand on ne peut pas le faire simplement avec Panoramic, sinon on multiplie les fonctions et il y aura une aide indigeste dans laquelle on mettra une heure à retrouver des fonctions pour des apports minimes.
| |
|
| |
Nardo26
Nombre de messages : 2294 Age : 56 Localisation : Valence Date d'inscription : 02/07/2010
| Sujet: Re: A l'aide Klaus. Dim 2 Sep 2012 - 20:08 | |
| Bonsoir, Une DLL ne sert pas à re-écrire la syntaxe d'un langage. J'ai l'impression que c'est cela que tu souhaites... Tu devrais, comme dis Klaus, utiliser les commandes natives déjà existantes... c'est plus rapide et moins contraignant que les appels de fct DLL_CALL. Et dans le cas où il n'y a pas de solutions pour contourner le problème (ce qui doit être rare pour un traitement de chaine de caractère), c'est seulement dans ce cas là, qu'il est intéressant de créer une nouvelle fonction via une DLL. | |
|
| |
Contenu sponsorisé
| Sujet: Re: A l'aide Klaus. | |
| |
|
| |
| A l'aide Klaus. | |
|