FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  RechercherRechercher  Dernières imagesDernières images  S'enregistrerS'enregistrer  MembresMembres  Connexion  
Derniers sujets
» Gestion d'un système client-serveur.
Recherche rapide d'un élément de tableau. Emptypar Klaus Ven 17 Mai 2024 - 14:02

» item_index(résolu)
Recherche rapide d'un élément de tableau. Emptypar jjn4 Mar 14 Mai 2024 - 19:38

» Bataille terrestre
Recherche rapide d'un élément de tableau. Emptypar jjn4 Lun 13 Mai 2024 - 15:01

» SineCube
Recherche rapide d'un élément de tableau. Emptypar Marc Sam 11 Mai 2024 - 12:38

» Editeur EliP 6 : Le Tiny éditeur avec 25 onglets de travail
Recherche rapide d'un élément de tableau. Emptypar Marc Sam 11 Mai 2024 - 12:22

» Philharmusique
Recherche rapide d'un élément de tableau. Emptypar jjn4 Ven 10 Mai 2024 - 13:58

» PANORAMIC V 1
Recherche rapide d'un élément de tableau. Emptypar papydall Jeu 9 Mai 2024 - 3:22

» select intégrés [résolu]
Recherche rapide d'un élément de tableau. Emptypar jjn4 Mer 8 Mai 2024 - 17:00

» number_mouse_up
Recherche rapide d'un élément de tableau. Emptypar jjn4 Mer 8 Mai 2024 - 11:59

» Aide de PANORAMIC
Recherche rapide d'un élément de tableau. Emptypar jjn4 Mer 8 Mai 2024 - 11:16

» trop de fichiers en cours
Recherche rapide d'un élément de tableau. Emptypar lepetitmarocain Mer 8 Mai 2024 - 10:43

» Je teste PANORAMIC V 1 beta 1
Recherche rapide d'un élément de tableau. Emptypar papydall Mer 8 Mai 2024 - 4:17

» bouton dans autre form que 0(résolu)
Recherche rapide d'un élément de tableau. Emptypar leclode Lun 6 Mai 2024 - 13:59

» KGF_dll - nouvelles versions
Recherche rapide d'un élément de tableau. Emptypar Klaus Lun 6 Mai 2024 - 11:41

» @Jack
Recherche rapide d'un élément de tableau. Emptypar Jack Mar 30 Avr 2024 - 20:40

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Mai 2024
LunMarMerJeuVenSamDim
  12345
6789101112
13141516171819
20212223242526
2728293031  
CalendrierCalendrier
Le Deal du moment : -55%
Coffret d’outils – STANLEY – ...
Voir le deal
21.99 €

 

 Recherche rapide d'un élément de tableau.

Aller en bas 
+2
Klaus
pan59
6 participants
AuteurMessage
pan59

pan59


Nombre de messages : 367
Age : 66
Localisation : Wattignies
Date d'inscription : 16/10/2011

Recherche rapide d'un élément de tableau. Empty
MessageSujet: Recherche rapide d'un élément de tableau.   Recherche rapide d'un élément de tableau. EmptyJeu 20 Sep 2012 - 18:12

Bonjour.

Connaissez-vous une méthode rapide afin de savoir si un élément existe dans un tableau de valeurs.

En java, il existe une méthode qui ressemble à 'instr' donnant directement le résultat.

En panoramic, évidemment, je ne cherche pas à lire chacun des éléments du tableau, puis le comparer à la valeur cherchée.

Merci de votre aide.
Revenir en haut Aller en bas
Klaus

Klaus


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

Recherche rapide d'un élément de tableau. Empty
MessageSujet: Re: Recherche rapide d'un élément de tableau.   Recherche rapide d'un élément de tableau. EmptyJeu 20 Sep 2012 - 18:15

Pour le moment, nous n'avons pas cela en Panoramic.
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
pan59

pan59


Nombre de messages : 367
Age : 66
Localisation : Wattignies
Date d'inscription : 16/10/2011

Recherche rapide d'un élément de tableau. Empty
MessageSujet: recherche rapide d'un élément de tableau.   Recherche rapide d'un élément de tableau. EmptyJeu 20 Sep 2012 - 18:24

Bonjour Klaus.

Merci de la réponse.

Je vais donc procéder autrement.

Pendant que j'y suis, connais-tu la longueur maximum d'une chaîne de caractères en panoramic ?
Revenir en haut Aller en bas
Nardo26

Nardo26


Nombre de messages : 2294
Age : 55
Localisation : Valence
Date d'inscription : 02/07/2010

Recherche rapide d'un élément de tableau. Empty
MessageSujet: Re: Recherche rapide d'un élément de tableau.   Recherche rapide d'un élément de tableau. EmptyJeu 20 Sep 2012 - 18:39

Bonjour Pan59,

Pour répondre simplement :
pour la longueur maxi d'une chaine, le plus simple c'est de faire un petit programme : une boucle qui rajoute un caractère au fur et à mesure et tu modifie le caption de la fenêtre pour voir l’incrémentation... je ne connais pas la réponse... Recherche rapide d'un élément de tableau. 19

Sinon pour la recherche dans une liste, tu peux classer tes éléments avec SORT_ON N puis faire une recherche par dichotomie...
Very Happy

Sinon, on en a déjà parlé sur le forum.
Sous google tu tapes :
Code:
recherche dichotomie site:http://panoramic.1fr1.net
comme ça google fait la recherche sur la totalité du forum et rien d'autre...

Revenir en haut Aller en bas
http://nardo26.lescigales.org
Klaus

Klaus


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

Recherche rapide d'un élément de tableau. Empty
MessageSujet: Re: Recherche rapide d'un élément de tableau.   Recherche rapide d'un élément de tableau. EmptyJeu 20 Sep 2012 - 18:48

Je pense que c'est limité à 2 puissance 31 - 1 caractères, peut-être 2 puissance 32 - 1 si la longueur est stockée en non-signée. En tout cas, c'est énorme. J'ai fait ce petit programme:
Code:
label err

dim i%

on_error_goto err
for i%=1 to 1000000000 step 100000
  caption 0,str$(i%)
 dim s$
 s$ = string$(i%," ")
 free s$
next i%

message "Pas d'erreur"
end

err:
  off_error_goto
  message "Erreur avec i%="+str$(i%)
  terminate
et j'ai eu la patience de le laisser aller jusqu'à 15 millions de caractères - ça passe. En fait, en-dehors el la limite théorique, c'est la place en mémoire qu posera les limites.
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Invité
Invité




Recherche rapide d'un élément de tableau. Empty
MessageSujet: Re: Recherche rapide d'un élément de tableau.   Recherche rapide d'un élément de tableau. EmptyJeu 20 Sep 2012 - 19:00

Si le tableau ne change pas, tu fais une routine qui met dans une chaine, l'ensemble d'un tableau, avec un séparateur de champ:
Code:
dim tab$(1000),line%,a$ , a% ,list$
label cherche

' on rempli le tableau avec des polices de caractères pour simplifier
dlist 1 :font_names_load 1
for a%=1 to count(1)
  tab$(a%)=item_read$(1,a%) :list$=list$+item_read$(1,a%)+"|"
next a%
edit 2
button 3:top 3,30:caption 3,"cherche":on_click 3,cherche
end

cherche:
  a$=text$(2)
  if instr(list$,a$) > 0 then message "trouvé:" + a$:else:message "inconnu dans la liste"
return

Si tu veux à partir de là connaitre la position, alors tu explores la liste, ou au départ, tu fais une autre chaine avec un séparateur par élément, et un deuxième entre pour extraire la position.
Je n'ai pas le temps de le faire maintenant, mais cela pourrait ressembler à cela: "10,1|15,2|30,3|". i,2,3
étant l'incrémentation de a%
Tu fais cette chaine en même temps que list$, avec la longueur de list$ à chaque fois.

Si tu ne comprends pas et que personne n'intervient d'ici ce soir, je regarderais.
Je me demande si je ne suis pas hors sujet en voyant les réponses entre-temps. J'avais déjà essayé de remplir un edit pareil en incrémentant, et je sais qu'on peux en mettre des quantités. J'avais pas trouvé la limite.
A plus!
Revenir en haut Aller en bas
Klaus

Klaus


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

Recherche rapide d'un élément de tableau. Empty
MessageSujet: Re: Recherche rapide d'un élément de tableau.   Recherche rapide d'un élément de tableau. EmptyJeu 20 Sep 2012 - 19:08

Tu n'es pas hors sujet, Cosmos70. Tu as répondu à une des deux questions de Pan59. Et ton astuce est intéressante: constituer une seule chaîne avec l'ensemble des éléments, séparés par un séparateur à choisir, et en plus tu ajoutes le numéro de chaque élément de sorte qu'après un INSTR, on peut trouver facilement le numéro qui sert d'indexe. Astucieux.

Pour ma part, je suggère une légère variante de la proposition de Cosmos70. On constitue toujours une seule chaîne de caractères avec tous les éléments, séparés par un séparateur quelconque. Puis, on utilise une des routines de KGF.dll qui trouve très rapidement l'indexe d'un élément dans une telle chaîne. Extrait de la doc:

Code:

ItemIndexInString               

Cette fonction cherche une chaîne dans une autre.  La chaîne dans laquelle on cherche, est une liste de chaînes dans laquelle les sous-chaînes sont séparées par un caractère de séparation. La fonction retournera non pas la position, mais l'indice de la sous-chaine trouvée. L'appel a le format suivant:


res% = dll_call3("ItemIndexInString",adr(string$),adr(sep$),adr(item$))

string$
liste de chaînes dans laquelle il faut chercher

sep$
tcaractère de séparation

item$
chaîne de caractères à chercher dans string$

res%
indice de item$ dans string$ si trouvé, et zéro sinon

Exemple:
dim res%,sting$,item$,sep$
item$ = "Mai"
sep$ = ","
string$ = "Janvier,Février,Mars,Avril,Mai,Juin,Juillet,Août,Septembre,Octobre,Novembre,Décembre"
res% = dll_call3("ItemIndexInString",adr(string$),adr(sep$),adr(item$))
if res%=0
  message "le mois est invalide"
else
  vous avez saisi de mois numéro "+str$(res%)
end_if

C'est écrit en Delphi et est très rapide.
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
papydall

papydall


Nombre de messages : 7009
Age : 73
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

Recherche rapide d'un élément de tableau. Empty
MessageSujet: Re: Recherche rapide d'un élément de tableau.   Recherche rapide d'un élément de tableau. EmptyJeu 20 Sep 2012 - 19:27

Voici un code de recherche par dichotomie : il est particulièrement rapide.
La recherche doit se faire sur un tableau TRIE
Code:

' *****************************************************************************
'  RECHERCHE DICHOTOMIQUE DANS UN TABLEAU TRIE

'          DICHO.BAS

' Exemple d'utilisation
' La recherche doit se faire sur un tableau trié
' Le tableau peut contenir n'importe quel type de données : entier, réel ,string

' La dichotomie consiste à couper le tableau en 2 et comparer la valeur du milieu
' avec celle à rechercher.
' si la valeur du milieu est supérieure à celle recherchée,on recherche alors
' dans la premiere moitié sinon dans la seconde.

' Cet algorithme est très rapide : sur un très grand tableau, il est très efficasse

DIM T(1000), i
dim premier,milieu,dernier,recherche, trouve, pos
' création d'un tableau d'entiers contenant les valeurs de 1 à 1000
for i = 1 to 1000 : t(i) = i : next i
recherche = 999 : ' valeur à rechercher
' recherche = 1110
trouve = 0 : premier = 1 : dernier = 1000
while (premier <= dernier) and trouve = 0
    milieu = int((premier + dernier)/2)
    if t(milieu) =  recherche
      trouve = 1 : pos = milieu
    else
        if t(milieu) > recherche
          dernier = milieu
        else
            premier = milieu +1
        end_if
    end_if
end_while
if trouve = 0
  message "cette valeur n'appartient pas à la liste"
else
  message "cette valeur appartient à la liste " + chr$(10)+chr$(13)+ "elle est en position: " +str$(pos)
end_if
Revenir en haut Aller en bas
http://papydall-panoramic.forumarabia.com/
pan59

pan59


Nombre de messages : 367
Age : 66
Localisation : Wattignies
Date d'inscription : 16/10/2011

Recherche rapide d'un élément de tableau. Empty
MessageSujet: recherche rapide d'un élément de tableau.   Recherche rapide d'un élément de tableau. EmptyJeu 20 Sep 2012 - 20:31

Bonsoir à tous.

Je vous remercie bien sincèrement de votre aide.

Je conserve donc les 2 méthodes.

Revenir en haut Aller en bas
Klaus

Klaus


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

Recherche rapide d'un élément de tableau. Empty
MessageSujet: Re: Recherche rapide d'un élément de tableau.   Recherche rapide d'un élément de tableau. EmptyJeu 20 Sep 2012 - 22:30

J'ai ajouté une fonction dans KGF.dll qui fait cette recherche. Format:
Code:
res% = dll_call3("SearchListBox",hnd%,mode%,adr(crit$))
 

Du coup, KGF.dll passe à la version V1.61 du 20/09/2012

Cette fonction recherche un élément dans un objet LIST identifié par son handle. Si mode%=0, la chaîne de caractères crit$ doit correspondre au début de l'élément. Si mode%=1, la chaîne de caractères doit correspondre à l'élément entier. La recherche est insensible à la casse.

Dans la documentation, il y a un programme exemple détaillé.

Il faut télécharger:
DLLs\KGF.dll (la DLL)
DLLs\Documentation CHM\KGF.chm ou KGF.pdf ou KGF.doc (la doc)

C'est écrit en Delphi et utilise un seul appel API - c'est très rapide.
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Nardo26

Nardo26


Nombre de messages : 2294
Age : 55
Localisation : Valence
Date d'inscription : 02/07/2010

Recherche rapide d'un élément de tableau. Empty
MessageSujet: Re: Recherche rapide d'un élément de tableau.   Recherche rapide d'un élément de tableau. EmptyJeu 20 Sep 2012 - 22:59

@pan59:
Peut tu nous donner une idée de la quantité d’élément que tu veux contrôler ?
Pour ton projet, je suppose que tu dois avoir une masse considérable de données à trier...
dans un cas comme celui-là, il vaut mieux abandonner l'idée de tout faire en RAM...
scratch
Revenir en haut Aller en bas
http://nardo26.lescigales.org
Jicehel

Jicehel


Nombre de messages : 5947
Age : 51
Localisation : 77500
Date d'inscription : 18/04/2011

Recherche rapide d'un élément de tableau. Empty
MessageSujet: Re: Recherche rapide d'un élément de tableau.   Recherche rapide d'un élément de tableau. EmptyVen 21 Sep 2012 - 0:28

Par contre un tri par arbre pourrait dans ce cas être très intéressant (Voir arbres binaires de Nardo)
Revenir en haut Aller en bas
Klaus

Klaus


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

Recherche rapide d'un élément de tableau. Empty
MessageSujet: Re: Recherche rapide d'un élément de tableau.   Recherche rapide d'un élément de tableau. EmptyVen 21 Sep 2012 - 0:30

Pourquoi trier ? Tu as vu la fonction que j'ai mise à disposition ? Simple, ultra-rapide - pourquoi chercher midi à 14 heures ?
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Jicehel

Jicehel


Nombre de messages : 5947
Age : 51
Localisation : 77500
Date d'inscription : 18/04/2011

Recherche rapide d'un élément de tableau. Empty
MessageSujet: Re: Recherche rapide d'un élément de tableau.   Recherche rapide d'un élément de tableau. EmptyVen 21 Sep 2012 - 0:51

Ce n'est pas faux j'avoue Klaus Wink Plus simple de trouver directement
Revenir en haut Aller en bas
Yannick




Nombre de messages : 8611
Age : 53
Localisation : Bretagne
Date d'inscription : 15/02/2010

Recherche rapide d'un élément de tableau. Empty
MessageSujet: Re: Recherche rapide d'un élément de tableau.   Recherche rapide d'un élément de tableau. EmptyVen 21 Sep 2012 - 0:57

Like a Star @ heaven Like a Star @ heaven Like a Star @ heaven Like a Star @ heaven Like a Star @ heaven Like a Star @ heaven
Revenir en haut Aller en bas
Invité
Invité




Recherche rapide d'un élément de tableau. Empty
MessageSujet: Re: Recherche rapide d'un élément de tableau.   Recherche rapide d'un élément de tableau. EmptyVen 21 Sep 2012 - 2:11

erreur de post
Revenir en haut Aller en bas
Nardo26

Nardo26


Nombre de messages : 2294
Age : 55
Localisation : Valence
Date d'inscription : 02/07/2010

Recherche rapide d'un élément de tableau. Empty
MessageSujet: Re: Recherche rapide d'un élément de tableau.   Recherche rapide d'un élément de tableau. EmptyVen 21 Sep 2012 - 6:58

Je pensais à une sorte de base de données sur disque, avec index calculé...
Je pensais à ce que Klaus avait écrit sur la gestion de fichier de type ISAM...
Revenir en haut Aller en bas
http://nardo26.lescigales.org
pan59

pan59


Nombre de messages : 367
Age : 66
Localisation : Wattignies
Date d'inscription : 16/10/2011

Recherche rapide d'un élément de tableau. Empty
MessageSujet: Recherche rapide d'un élément de tableau.   Recherche rapide d'un élément de tableau. EmptyVen 21 Sep 2012 - 9:46

Bonjour.

Je viens juste de retrouver la dll suivante, dans kgf.dll, qui me convient parfaitement.


res% = dll_call3("ItemIndexInString",adr(string$),adr(sep$),adr(item$))

Cette fonction cherche une chaîne dans une autre. La chaîne dans laquelle on cherche, est une liste de
chaînes dans laquelle les sous-chaînes sont séparées par un caractère de séparation. La fonction
retournera non pas la position, mais l'indice de la sous-chaîne trouvée.
Revenir en haut Aller en bas
pan59

pan59


Nombre de messages : 367
Age : 66
Localisation : Wattignies
Date d'inscription : 16/10/2011

Recherche rapide d'un élément de tableau. Empty
MessageSujet: Recherche rapide d'un élément de tableau.   Recherche rapide d'un élément de tableau. EmptyVen 21 Sep 2012 - 14:18

Bonjour.

A l'attention de Klaus.

J'ai réalisé le petit programme qui suit.
Mais le résultat donné n'est pas correct.
Il affiche 458, alors que le mot à trouver se trouve à l'index 23.874 dans le dictionnaire !!

Merci de ton aide.



Code:
dim a$, chaine$, mot$, sep$
dim y%

dll_on "kgf.dll"

file_open_read 1,"c:\perso\langues\traducteur\dictionnaires\dico_espagnol.dat"

' Lignes de titre.
file_readln 1,a$
file_readln 1,a$

while file_eof(1)<>1

      ' maison;fs;casa;fs;
      file_readln 1,a$
      if a$="FIN" then exit_while
     
      chaine$=chaine$+left$(a$,instr(a$,";")-1)+"#"
     
end_while

sep$ = "#"
mot$="maison"
y% = dll_call3("ItemIndexInString",adr(chaine$),adr(sep$),adr(mot$))
message str$(y%)

dll_off

file_close 1
Revenir en haut Aller en bas
Klaus

Klaus


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

Recherche rapide d'un élément de tableau. Empty
MessageSujet: Re: Recherche rapide d'un élément de tableau.   Recherche rapide d'un élément de tableau. EmptyDim 23 Sep 2012 - 21:34

Et qu'est-ce qu'on trouve à la position 458 ? Je n'ai pas beaucoup d'éléments pour essayer de reproduire le problème.
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
pan59

pan59


Nombre de messages : 367
Age : 66
Localisation : Wattignies
Date d'inscription : 16/10/2011

Recherche rapide d'un élément de tableau. Empty
MessageSujet: Recherche rapide d'un élément de tableau.   Recherche rapide d'un élément de tableau. EmptyDim 23 Sep 2012 - 21:44

Bonsoir Klaus.

On trouve la ligne suivante:


à voix basse;locut;en voz baja;locut;

Il s'agit d'un fichier trié.
Revenir en haut Aller en bas
Klaus

Klaus


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

Recherche rapide d'un élément de tableau. Empty
MessageSujet: Re: Recherche rapide d'un élément de tableau.   Recherche rapide d'un élément de tableau. EmptyDim 23 Sep 2012 - 22:15

Le problème vient des espaces. Une chaîne individuelle dans la liste ne peur contenir un espace car l'espace est un délimiteur d'office et implicite. Je viens de le découvrir, et je vais mettre la doc à jour.

Mais il y a un moyen de le contourner: remplace les espaces par autre chose. J'ai essayé "@" et ça marche. Regarce ce programme:
Code:
dim a$, chaine$, mot$, sep$
dim y%

dll_on "kgf.dll"

chaine$ = "#"
for y%=1 to 853
  chaine$ = chaine$ + str$(y%) + "#"
next y%
chaine$ = chaine$ + "à@voix@basse;locut;en@voz@baja;locut;"
for y%=855 to 23873
  chaine$ = chaine$ + str$(y%) + "#"
next y%
chaine$ = chaine$ + "maison" + "#" + "xxx" + "#" + "yyy" + "#"

sep$ = "#"
mot$="maison"
y% = dll_call3("ItemIndexInString",adr(chaine$),adr(sep$),adr(mot$))
message str$(y%)

dll_off
il affiche 23.873 ce qui est normal, car les indices sont comptés à partir de zéro. Un résultat de -1 signifie "non trouvé".
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Contenu sponsorisé





Recherche rapide d'un élément de tableau. Empty
MessageSujet: Re: Recherche rapide d'un élément de tableau.   Recherche rapide d'un élément de tableau. Empty

Revenir en haut Aller en bas
 
Recherche rapide d'un élément de tableau.
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Coordonnées (x,y) d’un élément dans un tableau et vice versa
» Besoin d'une fonction de recherche ultra rapide.
» Recherche rapide d'un item dans un dlist, sans DLL.
» trier un fichier de façon rapide
» cls plus rapide que color

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: