[..] Affecter des éléments d'un tableau à une variable

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
pierrotm777
Membre émérite
Membre émérite
Messages : 770
Enregistré le : sam. 11 oct. 2008 14:44
Localisation : Bordeaux
Status : Hors ligne

[..] Affecter des éléments d'un tableau à une variable

#1

Message par pierrotm777 »

Bonjour,
J'essaie de comprendre l'utilisation des tableaux que j'ai franchement du mal à comprendre.
Pour cela je lis un fichier texte qui comporte des points gps, que je mais dans un tableau.

Pour tous les points gps de ce tableau, je voudrais tester la distance entre ces points GPS ($lat2,$lon2) et le point GPS où je me trouve ( $lat1,$lon1).
Le point GPS est lu toutes les 0.5s (timer) $lat1,$lon1 .

Mon script est pratiquement terminé mais actuellement, le programme ne vois que le dernier point.

Je voudrais que le programme teste en permanence si ma position se rapproche d'un des points listés dans le fichier zones.txt et si
c'est le cas visualiser la distance dans le input.

La distance d'alarme est définie par la variable $Distance2 = $Var[5] .

Je vous remercie de votre aide par avance.
Fichiers joints
CheckZones.zip
(3.33 Kio) Téléchargé 77 fois
Modifié en dernier par pierrotm777 le ven. 01 oct. 2010 06:54, modifié 7 fois.
Avatar du membre
moutelous
Niveau 6
Niveau 6
Messages : 229
Enregistré le : sam. 09 févr. 2008 19:51
Localisation : Rennes
Status : Hors ligne

Re: [..]Affectation des éléments d'un tableau à une variable

#2

Message par moutelous »

Bonsoir,
pierrotm777 a écrit :Mon script est pratiquement terminé mais actuellement, le programme ne vois que le dernier point
Regardez votre boucle For .... Next, elle ne fait qu'affecter des valeurs du tableau à des variables et ce jusqu'à la fin du tableau sans aucune exploitation de ces variables sauf effectivement pour le dernier point.

En fait l'algorithme doit être le suivant :

While 1
For
"chaque groupe de variables déterminant la position d'un radar"
"calculer la distance me séparant de ce radar"
Next
Wend

En espérant avoir été clair ....
A+
pierrotm777
Membre émérite
Membre émérite
Messages : 770
Enregistré le : sam. 11 oct. 2008 14:44
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Affecter des éléments d'un tableau à une variable

#3

Message par pierrotm777 »

Oui, je pense, je vais essayer d'y réflaichir ,

Merci
pierrotm777
Membre émérite
Membre émérite
Messages : 770
Enregistré le : sam. 11 oct. 2008 14:44
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Affecter des éléments d'un tableau à une variable

#4

Message par pierrotm777 »

J'ai travaillé un peu le sujet, mais cela ne fait pas ce que je veux.

Le post 1 est mis à jour.

Quell est mon erreur SVP.
Avatar du membre
moutelous
Niveau 6
Niveau 6
Messages : 229
Enregistré le : sam. 09 févr. 2008 19:51
Localisation : Rennes
Status : Hors ligne

Re: [..] Affecter des éléments d'un tableau à une variable

#5

Message par moutelous »

Bonsoir,
pierrotm777 a écrit :mais cela ne fait pas ce que je veux
C'est à dire ?
A+
pierrotm777
Membre émérite
Membre émérite
Messages : 770
Enregistré le : sam. 11 oct. 2008 14:44
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Affecter des éléments d'un tableau à une variable

#6

Message par pierrotm777 »

Et bien le tableau est relu régulièrement, alors qu'il suffirait qu'il soit lu une seule fois.

Enfin, il faudrait que ma boucle ne teste que la distance qui change entre les différents points du tableau, et si la distance est inférieure à 500 alors l'alarme se déclanche et indique la distance restante avant la position qui déclanche cette alarme.
pierrotm777
Membre émérite
Membre émérite
Messages : 770
Enregistré le : sam. 11 oct. 2008 14:44
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Affecter des éléments d'un tableau à une variable

#7

Message par pierrotm777 »

Désolé mais je ne m'en sort pas.
Si vous pouviez me guider svp ?
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11823
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Affecter des éléments d'un tableau à une variable

#8

Message par Tlem »

Je ne peut pas tester votre code, car je n'ai pas l'objet SDK RideRunner, mais voici quelques conseils rapides en passant :

1 - L'utilisation du Timer et le type de codage dans la boucle While !!!
Au lieu de mettre le code dans la boucle, utilisez plutôt la fonction AdlibRegister.

Cela vous permettra d'activer/désactiver la comparaison de point plus facilement.

2 - Pour votre code de comparaison, vous pourriez (pour plus de facilité pour vous), utiliser la fonction _ArrayFileToArray qui vous permettra de convertir votre fichier zones.txt directement en tableau 2D (ce qui devrait simplifier légèrement le code de votre boucle ainsi que la lecture de vos valeurs). ;)
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
pierrotm777
Membre émérite
Membre émérite
Messages : 770
Enregistré le : sam. 11 oct. 2008 14:44
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Affecter des éléments d'un tableau à une variable

#9

Message par pierrotm777 »

Merci Tlem de votre intérêt pour mon problème.

Je vous propose mon script modifié de tel sorte qu'il n'a plus besoin de l'objet $RR .
Le point GPS du véhicule est simulé ici par le combo '$SelectPoi' qui donne 4 positions possibles.

Le post #1 est modifié, merci encore
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11823
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Affecter des éléments d'un tableau à une variable

#10

Message par Tlem »

Merci de ré-éditer votre premier message afin de ne laisser que le fichier joint.
Il est inutile d'avoir le code deux fois.

En ce qui concerne votre problème, je vais vous laisser travailler quand même un peut. :roll:
Je vous joint un code qui teste en boucle les coordonnées d'un point X (lat/lon) par rapport aux points de votre fichier zones.txt et qui affiche (dans la console de Scite) le texte lié au POI.

Amusez vous bien. ;)
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
pierrotm777
Membre émérite
Membre émérite
Messages : 770
Enregistré le : sam. 11 oct. 2008 14:44
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Affecter des éléments d'un tableau à une variable

#11

Message par pierrotm777 »

Je ne vois pas de fichier attaché à votre réponse !
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11823
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Affecter des éléments d'un tableau à une variable

#12

Message par Tlem »

Oups !!!

Voici le code :
► Afficher le texte
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
pierrotm777
Membre émérite
Membre émérite
Messages : 770
Enregistré le : sam. 11 oct. 2008 14:44
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Affecter des éléments d'un tableau à une variable

#13

Message par pierrotm777 »

Merci Tlem,

C'est bien ce qu'il me fallait.

Je vais tester avec un plus gros fichier pour voir
pierrotm777
Membre émérite
Membre émérite
Messages : 770
Enregistré le : sam. 11 oct. 2008 14:44
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Affecter des éléments d'un tableau à une variable

#14

Message par pierrotm777 »

Tlem,

Je vous joinds un fichier zones.txt complet (radars france 2009)

J'ai modifié mon script à partir de votre exemple.

Pourriez me dire si votre script fonctionne comme vous l'entendez.

Pour ma part, il semble trés lent .

Est possible d'utiliser plusieurs AdlibRegister , cela semble possible, mais la boucle principale prenant beaucoup de temp cpu, la mise à jour _LatLonUpdate ne se fait pas !

Par exemple:
AdlibRegister("_IsNear", 2000)
AdlibRegister("_LatLonUpdate", 500)
Fichiers joints
checkzones.zip
(320.82 Kio) Téléchargé 57 fois
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11823
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Affecter des éléments d'un tableau à une variable

#15

Message par Tlem »

Ben ... c'est ptet un chti peut normal non ?

36000 POI. :shock:

Vous imaginez un peut, que le script doit :
1 - Mettre en tableau spécial chaque élément de votre fichier, soit : 36000 X 7 = 252000

2 - Lire ce tableau ligne par ligne (36000) et prendre à chaque fois la longitude + la latitude pour calculer une valeur moyenne par rapport à la longitude + la latitude actuelle (et tout ca dans un délais de deux secondes sur mon script original) . :shock:

Vous ne trouvez pas que ca fait beaucoup ?

Dans votre cas précis, si vous devez lire chaque ligne du tableau, vous n'arriverez à rien de potable.
Pour cela, il vous faudra user d'un peut d'astuce et de bon sens.

Je vais vous mettre sur la voie :
Avez vous vraiment besoin de lire la totalité des lignes du tableau et d'y pratiquer chaque fois le calcul de proximité ? ;)

Juste pour information, sur mon PC, la lecture du tableau de 36000 POI $aZones sans aucune instruction dans la boucle, prend 4.7ms.
Si je rajoute la simple condition If Int($aZones[$i][0]) > 1 Then ContinueLoop, hé bien nous passons de 5ms à 250ms et si je remplace par la fonction de test distHaversine(), je passe à 5250ms. :roll: :roll: :roll:
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
pierrotm777
Membre émérite
Membre émérite
Messages : 770
Enregistré le : sam. 11 oct. 2008 14:44
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Affecter des éléments d'un tableau à une variable

#16

Message par pierrotm777 »

Oui, je m'en doutais un peu !

Mon idée serait peut être de découper une fois pour toute les fichier en zones de 100km par exemple et de ne tester en suite
que dans la zone où l'on se trouve.

Qu'en pensez vous ?
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11823
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Affecter des éléments d'un tableau à une variable

#17

Message par Tlem »

Ce sera moins simple au début, mais votre script n'en sera que plus rapide au final. ;)
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
pierrotm777
Membre émérite
Membre émérite
Messages : 770
Enregistré le : sam. 11 oct. 2008 14:44
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Affecter des éléments d'un tableau à une variable

#18

Message par pierrotm777 »

On pourrait par exemple découper le fichier en plusieurs, en prenant comme principe que chaque nom de fichier est du type:
partie entière latitude partie entière longitude . txt

soit pour un fichier comme suivant:

Code : Tout sélectionner

[color=#FF0000]50[/color].17353,[color=#FF0000]3[/color].24325,300,60,500,M,"ZONE_DANGEREUSE_0"
[color=#FF0000]50[/color].18552,[color=#FF0000]3[/color].34339,300,60,500,M,"ZONE_DANGEREUSE_0"
[color=#FF0000]50[/color].21,[color=#FF0000]3[/color].3865,300,60,500,M,"ZONE_DANGEREUSE_0"
[color=#FF0000]50[/color].24937,[color=#FF0000]3[/color].03142,300,60,500,M,"ZONE_DANGEREUSE_0"
[color=#FF0000]50[/color].2842,[color=#FF0000]3[/color].97474,300,60,500,M,"ZONE_DANGEREUSE_0"
[color=#FF0000]50[/color].34262,[color=#FF0000]3[/color].97068,300,60,500,M,"ZONE_DANGEREUSE_0"
5003.txt

Le problème est que chaque partie entière peut être soit positive soit négative en fonction de sa position Gps sur le globe !
De plus avant la création des zones, je ferais bien un tri du fichier par rapport à la première colonne .
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11823
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Affecter des éléments d'un tableau à une variable

#19

Message par Tlem »

La fragmentation des POI en plusieurs fichiers n'est pas mal, mais je pense qu'elle ne doit pas être en relation avec les coordonnées.
Vous pouvez, par exemple séparer les radars en fonction de leur vitesse, mais dans ce cas cela va compliquer leur gestion.

J'avais plutôt à l'idée de ce concentrer sur une partie significative des coordonnées.
Lorsque l'on prend pour exemple une longitude de 50.17353°, le fait de ce déplacer va modifier ce nombre et plus particulièrement la dernière partie de celui-ci.
En règle générale, il est très rare de prévenir de la présence d'un POI qui ce trouve en dehors d'un périmètre de quelques kilomètres (1 à 5 max).
Donc l'idée serait de voir ce que représente un déplacement de 5 Km Ouest sur la valeur de la longitude cité précédemment.
Je n'ai pas l'information exacte, mais d'après mes petits tests, je dirait que pour 5 Km, le chiffre significatif à prendre en considération, est le deuxième après la virgule. :roll:
En ce basant sur la longitude de 50.17353°, si j'augmente ce nombre de 0,05 soit 50.22353°, j'obtiens un déplacement approximatif sur Google Map de 5 Km et des brouettes.

Donc dans ce cas, il suffit de comparer brièvement la partie significative des coordonnées à comparer et de prendre la décision de faire le test de la distance entre les points ou non.

En reprenant une partie de votre tableau, voici ce que je prendrais en considération :

Code : Tout sélectionner

[color=#FF0000]50.17[/color]353,[color=#FF0000]3.24[/color]325,300,60,500,M,"ZONE_DANGEREUSE_0"
[color=#FF0000]50.18[/color]552,[color=#FF0000]3.34[/color]339,300,60,500,M,"ZONE_DANGEREUSE_0"
[color=#FF0000]50.24[/color]937,[color=#FF0000]3.03[/color]142,300,60,500,M,"ZONE_DANGEREUSE_0"
De plus, si le tableau est trié par ordre croissant, je peut rajouter un test afin d'éviter de lire la suite du tableau si je rencontre une valeur supérieur de 5 Km à mes coordonnées actuelles.
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
GaRydelaMer
Niveau 7
Niveau 7
Messages : 450
Enregistré le : mer. 18 mars 2009 22:12
Localisation : Montpellier
Status : Hors ligne

Re: [..] Affecter des éléments d'un tableau à une variable

#20

Message par GaRydelaMer »

Bonsoir

vous allez dire que je reviens encore avec ca, mais bon je me lance !!

Pourquoi pas utiliser ADO ?.

J'ai fais un test avec ton fichier les 38000 POI:
► Afficher le texte
Le truc ici est de filtrer rapidement les données, la je filtre uniquement sur le 1er champ mais on peut multiplier les conditions du filtre.
Par exemple:
Un dernier point, attention si le filtre renvoie aucune valeur la fonction GetRows() renvoie une erreur.
Facile à gérer:
► Afficher le texte
Un autre dernier point c'est plus long à ouvrir:
Pour trier un tableau Type de radar décroissant puis par latitude, longitude croissant:

Code : Tout sélectionner

$oRs.Sort = "F7 desc, F1, F2"

le résultat sur ma machine:
Name=F1
Name=F2
Name=F3
Name=F4
Name=F5
Name=F6
Name=F7
Time Difference 834.542378989508
Time Difference 29.2523211748979
Time Difference 4029.22913387037

On voit que même en ouvrant la connexion on est plus rapide que le parcours du tableau. dans mon test je filtre 2 fois le tableau, le 1er je compte l'ouverture de la connexion ensuite en 29 ms je le filtre sur les autres valeurs.
26 valeurs entre 44.87 et 44.88
32 valeurs entre 45.87 et 45.88

Avec le tri:
Name=F1
Name=F2
Name=F3
Name=F4
Name=F5
Name=F6
Name=F7
Time Difference 32249.4923237451
Time Difference 53.4419877386651
F1 >= 44.86 AND F1 <= 44.88 AND F2 >= -0.58 AND F2 <= -0.56
6 enregstrements
Time Difference 288.390842970266
Time Difference 4707.70279462893
Répondre