Novembre 2024 | Lun | Mar | Mer | Jeu | Ven | Sam | Dim |
---|
| | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | | Calendrier |
|
|
| Besoin d'une commande de lecture de mots individuels. | |
| | Auteur | Message |
---|
Pedro
Nombre de messages : 1594 Date d'inscription : 19/01/2014
| Sujet: Besoin d'une commande de lecture de mots individuels. Sam 8 Avr 2017 - 5:28 | |
| Bonjour.
J'aurais encore besoin d'une commande qui lirait les mots individuels d'une chaîne de caractères quelconque, et les placerait dans un objet combo ou autre. Cette commande existant dans d'autres basics: SplitTokens.
Exemple:
Le chat boit du lait.
La combo contiendrait, après traitement:
le chat boit du lait
Le traitement de la chaîne ne doit pas tenir compte des ponctuations, ni des mots commençant par un chiffre. Ce qui signifie que chacun des mots doit débuter par un caractère alphabétique.
Est-ce faisable ?
Merci de la suite. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Besoin d'une commande de lecture de mots individuels. Sam 8 Avr 2017 - 9:52 | |
| | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Besoin d'une commande de lecture de mots individuels. Sam 8 Avr 2017 - 11:57 | |
| C'est fait. Regarde la nouvelle version de KGF.dll de ce jour. | |
| | | Pedro
Nombre de messages : 1594 Date d'inscription : 19/01/2014
| Sujet: Besoin d'une commande de lecture de mots individuels. Sam 8 Avr 2017 - 19:01 | |
| Bonsoir.
Encore merci Klaus de ta rapidité. Cette nouvelle fonction accélère encore un peu plus mon logiciel de traduction.
C'est tout simplement génial. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Besoin d'une commande de lecture de mots individuels. Sam 8 Avr 2017 - 21:34 | |
| Je viens de penser à un truc: puisque cette nouvelle fonction est detinée à servir dans un cadre de logiciel de traduction, il y a peut-être un problème de jeu de caractères ? Je m'explque: Je filtre tout ce qui n'est pas du texte et je ne transmets au résultat que les caractères de texte pur. Or, j'ai choisi les minuscules accentuées françaises: 'à','â','é','ê','ë','è','î','ï','ô','ù','û','ç'. Et si la chaîne à analyser est dans une autre langue ? Quels sont les caractères à considérer ? Plus généralement, ne serait-ce pas judcieux d'avoir une deuxième fonction qui définirait le jeu de caractères considérés comme "texte". Ce choix serait mémorisé et utilisé par la fonction IsolateWordsFromString, jusqu'à ce qu'un autre appel de la deuxième fonction remplace le jeu de caractères. Ou est-ce que je suis compplètement à côté de la plaque ? EDITEt qu'est-ce qu'il en est avec des mots comme aujourd'hui et grand-mère ? EDITActuellement, ça marche comme ça: Et si l'on faisait comme ceci: Quelle solution est préférable ? | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Besoin d'une commande de lecture de mots individuels. Dim 9 Avr 2017 - 3:23 | |
| Bon, dans le doute, je rends les choses paramétrables, avec la situation actuelle comme valeurs par défaut, présentes automatiquement. Je publierai la nouvelle version demain... enfin aujourd'hui, car nous sommes déjà demain, en fait ! | |
| | | Pedro
Nombre de messages : 1594 Date d'inscription : 19/01/2014
| Sujet: Besoin d'une commande de lecture de mots individuels. Dim 9 Avr 2017 - 8:35 | |
| Bonjour. Je rencontre un gros problème avec cette nouvelle commande. Pourrais-tu réaliser un test de ton côté, comme suit: - Avec la même chaîne de caractères dans le mémo, analyser la chaîne et la placer dans la combo. - A la lecture du fichier 'mots.txt', on s'aperçoit que l'enregistrement du contenu de la combo laisse apparaître des lignes vides, ce qui fausse le traitement de mon programme par la suite. Il semblerait qu'un retour chariot soit placé entre chaque mot. - De plus, certains mots en fin de ligne sont mal lus, car ils se trouvent à la fin d'un item du memo. On retrouve des mots accolés les uns aux autres. Merci de la suite Klaus. - Code:
-
' test_IsolateWordsFromString.bas
label analyser
dim res%, txt$
dll_on "KGF.dll"
maximize 0 alpha 1 : top 1,10 : left 1,10 : caption 1,"Chaîne de caractères à analyser:" edit 2 : top 2,30 : left 2,10 : width 2,400
alpha 3 : top 3,60 : left 3,10 : caption 3,"Résultat dans:" option 10 : top 10,80 : left 10, 10 : caption 10,"Clipboard" option 11 : top 11,80 : left 11,110 : caption 11,"Memo" option 12 : top 12,80 : left 12,210 : caption 12,"Combo" option 13 : top 13,80 : left 13,310 : caption 13,"List"
button 20 : top 20,110 : left 20,10 : caption 20,"Analyser" : on_click 20,analyser
memo 21 : left 21,10 : top 21,140 : width 21,300 : height 21,400 : bar_both 21 combo 22 : left 22,310 : top 22,140 : width 22,300 : height 22,400 list 23 : left 23,620 : top 23,140 : width 23,400 : height 23,600 font_size 23,12 font_bold 23
item_add 21,"Là ! Voilà Jean. Jean est là. Voilà Charles. Charles est là. Mme Schimtt est là. Voilà M. Schmitt. Voici Jean. Voilà Charles." item_add 21,"Voici Kiel. Voilà Vienne. Kiel est ici. Vienne est là. Voici Mme Schmitt. Voilà M. Schmitt. Mme Schmitt est ici. M. Schmitt est là." item_add 21,"Là-bas! Voilà Bonn. Voilà Rome. Jean est là. Charles est là-bas. Jean est là-bas. Voilà Charles. Voilà M. Schmitt." item_add 21,"Voici Vienne. Voilà Rome. Voilà Kiel. Mme Schmitt est ici. Hans est là. Charles est là-bas. Voici Mme Schmitt. Voilà Jean. Voilà Charles."
end
analyser: txt$ = text$(21) clear 22 clear 23 if checked(10)=1 res% = dll_call3("IsolateWordsFromString",adr(txt$),0,0) clipboard_paste 21 end_if if checked(11)=1 res% = dll_call3("IsolateWordsFromString",adr(txt$),1,handle(21)) end_if if checked(12)=1 res% = dll_call3("IsolateWordsFromString",adr(txt$),2,handle(22)) file_save 22,"mots.txt" end_if if checked(13)=1 res% = dll_call3("IsolateWordsFromString",adr(txt$),3,handle(23)) end_if
message str$(res%)+" mots trouvés" return | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Besoin d'une commande de lecture de mots individuels. Dim 9 Avr 2017 - 10:27 | |
| Cela vient de la façon dont tu construis ta vriable txt$. Remplace - Code:
-
txt$ = text$(21)
par - Code:
-
txt$ = "" for i%=1 to count(21) txt$ = txt$ + item_read$(21,i%) + " " next i%
et ça marchera. Ton code devient: - Code:
-
' test_IsolateWordsFromString.bas
label analyser
dim res%, txt$, i%
dll_on "KGF.dll"
maximize 0 alpha 1 : top 1,10 : left 1,10 : caption 1,"Chaîne de caractères à analyser:" edit 2 : top 2,30 : left 2,10 : width 2,400
alpha 3 : top 3,60 : left 3,10 : caption 3,"Résultat dans:" option 10 : top 10,80 : left 10, 10 : caption 10,"Clipboard" option 11 : top 11,80 : left 11,110 : caption 11,"Memo" option 12 : top 12,80 : left 12,210 : caption 12,"Combo" option 13 : top 13,80 : left 13,310 : caption 13,"List"
button 20 : top 20,110 : left 20,10 : caption 20,"Analyser" : on_click 20,analyser
memo 21 : left 21,10 : top 21,140 : width 21,300 : height 21,400 : bar_both 21 combo 22 : left 22,310 : top 22,140 : width 22,300 : height 22,400 list 23 : left 23,620 : top 23,140 : width 23,400 : height 23,600 font_size 23,12 font_bold 23
item_add 21,"Là ! Voilà Jean. Jean est là. Voilà Charles. Charles est là. Mme Schimtt est là. Voilà M. Schmitt. Voici Jean. Voilà Charles." item_add 21,"Voici Kiel. Voilà Vienne. Kiel est ici. Vienne est là. Voici Mme Schmitt. Voilà M. Schmitt. Mme Schmitt est ici. M. Schmitt est là." item_add 21,"Là-bas! Voilà Bonn. Voilà Rome. Jean est là. Charles est là-bas. Jean est là-bas. Voilà Charles. Voilà M. Schmitt." item_add 21,"Voici Vienne. Voilà Rome. Voilà Kiel. Mme Schmitt est ici. Hans est là. Charles est là-bas. Voici Mme Schmitt. Voilà Jean. Voilà Charles."
end
analyser: ' txt$ = text$(21) txt$ = "" for i%=1 to count(21) txt$ = txt$ + item_read$(21,i%) + " " next i% clear 21 clear 22 clear 23 if checked(10)=1 res% = dll_call3("IsolateWordsFromString",adr(txt$),0,0) clipboard_paste 21 end_if if checked(11)=1 res% = dll_call3("IsolateWordsFromString",adr(txt$),1,handle(21)) end_if if checked(12)=1 res% = dll_call3("IsolateWordsFromString",adr(txt$),2,handle(22)) file_save 22,"mots.txt" end_if if checked(13)=1 res% = dll_call3("IsolateWordsFromString",adr(txt$),3,handle(23)) end_if
message str$(res%)+" mots trouvés" return Ne pas oubier de faire - Code:
-
clear 21 avant d'appeler la fonction, car sinon, les mots trouvés seront ajoutés au mémo si le choix était presse-papier ou mémo ! | |
| | | Pedro
Nombre de messages : 1594 Date d'inscription : 19/01/2014
| Sujet: Besoin d'une commande de lecture de mots individuels. Dim 9 Avr 2017 - 10:32 | |
| Bonjour.
Merci Klaus, je pensais bien que le problème venait de là. Par contre, le problème avec la combo n'est pas résolu.
Merci de la suite. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Besoin d'une commande de lecture de mots individuels. Dim 9 Avr 2017 - 15:20 | |
| Je n'ai aucun problème de contenu de combo, pas de lignes blanches, et autant de lignes que la fonction déclare avoir retournées. Regarde ce test (sélectionne "combo"): - Code:
-
' test_IsolateWordsFromString.bas
label analyser
dim res%, txt$, i%
dll_on "KGF.dll"
maximize 0 alpha 1 : top 1,10 : left 1,10 : caption 1,"Chaîne de caractères à analyser:" edit 2 : top 2,30 : left 2,10 : width 2,400
alpha 3 : top 3,60 : left 3,10 : caption 3,"Résultat dans:" option 10 : top 10,80 : left 10, 10 : caption 10,"Clipboard" option 11 : top 11,80 : left 11,110 : caption 11,"Memo" option 12 : top 12,80 : left 12,210 : caption 12,"Combo" option 13 : top 13,80 : left 13,310 : caption 13,"List"
button 20 : top 20,110 : left 20,10 : caption 20,"Analyser" : on_click 20,analyser
memo 21 : left 21,10 : top 21,140 : width 21,300 : height 21,400 : bar_both 21 combo 22 : left 22,310 : top 22,140 : width 22,300 : height 22,400 list 23 : left 23,620 : top 23,140 : width 23,400 : height 23,600 font_size 23,12 font_bold 23
item_add 21,"Là ! Voilà Jean. Jean est là. Voilà Charles. Charles est là. Mme Schimtt est là. Voilà M. Schmitt. Voici Jean. Voilà Charles." item_add 21,"Voici Kiel. Voilà Vienne. Kiel est ici. Vienne est là. Voici Mme Schmitt. Voilà M. Schmitt. Mme Schmitt est ici. M. Schmitt est là." item_add 21,"Là-bas! Voilà Bonn. Voilà Rome. Jean est là. Charles est là-bas. Jean est là-bas. Voilà Charles. Voilà M. Schmitt." item_add 21,"Voici Vienne. Voilà Rome. Voilà Kiel. Mme Schmitt est ici. Hans est là. Charles est là-bas. Voici Mme Schmitt. Voilà Jean. Voilà Charles."
end
analyser: ' txt$ = text$(21) txt$ = "" for i%=1 to count(21) txt$ = txt$ + item_read$(21,i%) + " " next i% clear 21 clear 22 clear 23 if checked(10)=1 res% = dll_call3("IsolateWordsFromString",adr(txt$),0,0) clipboard_paste 21 end_if if checked(11)=1 res% = dll_call3("IsolateWordsFromString",adr(txt$),1,handle(21)) end_if if checked(12)=1 res% = dll_call3("IsolateWordsFromString",adr(txt$),2,handle(22)) file_save 22,"mots.txt" end_if if checked(13)=1 res% = dll_call3("IsolateWordsFromString",adr(txt$),3,handle(23)) end_if
message str$(res%)+" mots trouvés" if checked(12)=1 if count(22)<>res% then message "Ecart de nombre de lignes" for i%=1 to count(22) txt$ = item_read$(22,i%) if len(txt$)=0 then message "Ligne vide no. "+str$(i%) next i% end_if return | |
| | | Pedro
Nombre de messages : 1594 Date d'inscription : 19/01/2014
| Sujet: Besoin d'une commande de lecture de mots individuels. Dim 9 Avr 2017 - 15:27 | |
| Bonjour. OK Klaus, pas de problème détecté dans la combo. Mais il demeure un problème, lors de l'enregistrement, dans le fichier texte 'mots.txt', doit voici un extrait. Les lignes vides contiennent chacune un retour-chariot chr$(13). - Code:
-
Là
Voilà
Jean
Jean
est
là
Voilà
Charles | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Besoin d'une commande de lecture de mots individuels. Dim 9 Avr 2017 - 15:43 | |
| Ok, je vois. Je vais chercher d'où ça vient... | |
| | | Pedro
Nombre de messages : 1594 Date d'inscription : 19/01/2014
| Sujet: Besoin d'une commande de lecture de mots individuels. Dim 9 Avr 2017 - 16:25 | |
| Bonjour. J'ai trouvé un indice qui te permettra certainement de résoudre le problème. En ajoutant les lignes suivantes avant le return, tu verras que l'apostrophe finale est affichée sur une ligne différente, ce qui signifie que le dernier caractère de la ligne est un chr$(13). - Code:
-
txt$="'"+item_read$(22,1)+"'"
message txt$ | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Besoin d'une commande de lecture de mots individuels. Dim 9 Avr 2017 - 19:04 | |
| Oui, j'ai trouvé. Fichu copier/coller - ce n'est pas la première fois que je me fais avoir avec ça.
Enfin, c'est corrigé, aussi bien pour le combo que pour la liste. Le presse-papier et le mémo n'étaient pas concernés.
Recharge simplement la DLL, et ça devrait marcher. Désolé pour la complication. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Besoin d'une commande de lecture de mots individuels. Dim 9 Avr 2017 - 19:35 | |
| D'ailleurs, qu'est-ce que tu penses de la possibilité de gérer la persistance ou non de certains caractères (trait d'union et apostrophe, par défaut), de changer cette liste, et de changer la liste des lettres spéciales pour avoir les accentués d'une autre langue ? | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Dim 9 Avr 2017 - 19:43 | |
| Erreur de sujet Désolé... | |
| | | Contenu sponsorisé
| Sujet: Re: Besoin d'une commande de lecture de mots individuels. | |
| |
| | | | Besoin d'une commande de lecture de mots individuels. | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |