FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  FAQFAQ  RechercherRechercher  S'enregistrerS'enregistrer  MembresMembres  GroupesGroupes  Connexion  
Derniers sujets
» KGF_dll - nouvelles versions
par Klaus Aujourd'hui à 0:29

» track_bar circulaire
par Klaus Hier à 21:41

» Gestionnaire de Projets Panoramic
par Jean Claude Hier à 20:41

» Mah-Jong européen new-look
par Jean Claude Hier à 20:34

» Gestion de l'Unicode
par jean_debord Hier à 11:21

» Button_picture
par pascal10000 Jeu 14 Déc 2017 - 11:41

» Pourquoi le compilateur stagne
par Minibug Jeu 14 Déc 2017 - 11:09

» 4 (en analyse): SYNEDIT_TARGET_IS_OBJECT devient inactif
par Jack Jeu 14 Déc 2017 - 10:09

» 3 (en analyse): Mauvaise interprétation du string "THEN"
par Jack Jeu 14 Déc 2017 - 10:03

» KGF.dll - demandes ou suggestions de modifications ou ajouts
par Marc Jeu 14 Déc 2017 - 10:00

» API Windows
par Klaus Mar 12 Déc 2017 - 3:21

» Cartes de voeux, menus, etc.
par JL35 Lun 11 Déc 2017 - 17:48

» a l'aide klaus
par Minibug Lun 11 Déc 2017 - 11:42

» bug SYNEDIT_TARGET_IS_OBJECT
par Jack Lun 11 Déc 2017 - 0:16

» Jukebox : Serge Reggiani
par papydall Sam 9 Déc 2017 - 5:58

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Décembre 2017
LunMarMerJeuVenSamDim
    123
45678910
11121314151617
18192021222324
25262728293031
CalendrierCalendrier

Partagez | 
 

 Besoin d'une commande de lecture de mots individuels.

Voir le sujet précédent Voir le sujet suivant Aller en bas 
AuteurMessage
Pedro Alvarez

avatar

Nombre de messages : 882
Date d'inscription : 19/01/2014

MessageSujet: Besoin d'une commande de lecture de mots individuels.   Sam 8 Avr 2017 - 6: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.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Klaus

avatar

Nombre de messages : 10262
Age : 68
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: Re: Besoin d'une commande de lecture de mots individuels.   Sam 8 Avr 2017 - 10:52

Oui. Je vais voir ça...
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html En ligne
Klaus

avatar

Nombre de messages : 10262
Age : 68
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: Re: Besoin d'une commande de lecture de mots individuels.   Sam 8 Avr 2017 - 12:57

C'est fait. Regarde la nouvelle version de KGF.dll de ce jour.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html En ligne
Pedro Alvarez

avatar

Nombre de messages : 882
Date d'inscription : 19/01/2014

MessageSujet: Besoin d'une commande de lecture de mots individuels.   Sam 8 Avr 2017 - 20: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.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Klaus

avatar

Nombre de messages : 10262
Age : 68
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: Re: Besoin d'une commande de lecture de mots individuels.   Sam 8 Avr 2017 - 22: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 ?

EDIT

Et qu'est-ce qu'il en est avec des mots comme aujourd'hui et grand-mère ?

EDIT

Actuellement, ça marche comme ça:


Et si l'on faisait comme ceci:


Quelle solution est préférable ?
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html En ligne
Klaus

avatar

Nombre de messages : 10262
Age : 68
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: Re: Besoin d'une commande de lecture de mots individuels.   Dim 9 Avr 2017 - 4: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 !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html En ligne
Pedro Alvarez

avatar

Nombre de messages : 882
Date d'inscription : 19/01/2014

MessageSujet: Besoin d'une commande de lecture de mots individuels.   Dim 9 Avr 2017 - 9: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
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Klaus

avatar

Nombre de messages : 10262
Age : 68
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: Re: Besoin d'une commande de lecture de mots individuels.   Dim 9 Avr 2017 - 11: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 !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html En ligne
Pedro Alvarez

avatar

Nombre de messages : 882
Date d'inscription : 19/01/2014

MessageSujet: Besoin d'une commande de lecture de mots individuels.   Dim 9 Avr 2017 - 11: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.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Klaus

avatar

Nombre de messages : 10262
Age : 68
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: Re: Besoin d'une commande de lecture de mots individuels.   Dim 9 Avr 2017 - 16: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
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html En ligne
Pedro Alvarez

avatar

Nombre de messages : 882
Date d'inscription : 19/01/2014

MessageSujet: Besoin d'une commande de lecture de mots individuels.   Dim 9 Avr 2017 - 16: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:


Voilà

Jean

Jean

est



Voilà

Charles
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Klaus

avatar

Nombre de messages : 10262
Age : 68
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: Re: Besoin d'une commande de lecture de mots individuels.   Dim 9 Avr 2017 - 16:43

Ok, je vois. Je vais chercher d'où ça vient...
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html En ligne
Pedro Alvarez

avatar

Nombre de messages : 882
Date d'inscription : 19/01/2014

MessageSujet: Besoin d'une commande de lecture de mots individuels.   Dim 9 Avr 2017 - 17: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$
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Klaus

avatar

Nombre de messages : 10262
Age : 68
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: Re: Besoin d'une commande de lecture de mots individuels.   Dim 9 Avr 2017 - 20: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.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html En ligne
Klaus

avatar

Nombre de messages : 10262
Age : 68
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: Re: Besoin d'une commande de lecture de mots individuels.   Dim 9 Avr 2017 - 20: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 ?
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html En ligne
Yannick

avatar

Nombre de messages : 8002
Age : 46
Localisation : Bretagne
Date d'inscription : 15/02/2010

MessageSujet: re   Dim 9 Avr 2017 - 20:43

Erreur de sujet
Désolé... Embarassed
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Contenu sponsorisé




MessageSujet: Re: Besoin d'une commande de lecture de mots individuels.   

Revenir en haut Aller en bas
 
Besoin d'une commande de lecture de mots individuels.
Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Lecture video interrompue avec mise en tampon
» [Résolu] Commande cmd
» Liste des mots-clé de Panoramic avec leur classification
» commande menu "Enregistrer"
» Commande et retrosignalisation d'aiguilles + RRTC

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: PANORAMIC :: A l'aide!-
Sauter vers: