banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

Rencontres QGIS 2025

L'appel à participation est ouvert jusqu'au 19 janvier 2025!

#1 Mon 21 January 2008 17:41

magali di salvo
Participant actif
Lieu: Lyon
Date d'inscription: 21 Sep 2005
Messages: 70

[mapbasic9] lire le nom de tables contenues dans un répertoire donné

Bonjour,
je me retrouve confrontée à un problème inédit (pour moi !) et ne trouve rien dans les archives...J'explique :
J'ai un certain nombre de répertoires contenant un certain nombre de tables mapinfo, variable. Je voudrais ouvrir "automatiquement" toutes les tables mapinfo contenues dans un répertoire donné (je peux stocker le nom du rep dans une variable). Y-a-t-il une commande mapbasic qui fasse ça ? comment "détecter" le nom des fichiers contenus dans un répertoire afin de les stocker dans une variable "chemin" et ouvrir ainsi les tables ? (et ceci sans créer de fichier texte descriptif de l'arborescence...)

j'ai pour objectif de concaténer toutes les tables dispatchées dans des répertoires pour n'en faire plus qu'une. elles ont toutes la même structure (ouf !).

si quelqu'un a une idée ça me rendrait bien service !
merci d'avance

magali di salvo, Diren Rhone-Alpes

Hors ligne

 

#2 Mon 21 January 2008 18:34

Cartosig
Participant assidu
Date d'inscription: 16 Oct 2006
Messages: 222

Re: [mapbasic9] lire le nom de tables contenues dans un répertoire donné

J'ai peur qu'on touche ici une limite de MB...
Il ne me semble pas qu'il soit possible "d'explorer" des répertoires comme vous le souhaitez.
Si je ne me trompe pas, il faudra envisager de passer par un langage un peu plus polyvalent pour faire ça (Python semble tout indiqué pour ce type de tâches).

Hors ligne

 

#3 Mon 21 January 2008 20:59

Maurice
Membre
Lieu: Montpellier
Date d'inscription: 5 Sep 2005
Messages: 5331

Re: [mapbasic9] lire le nom de tables contenues dans un répertoire donné

Bonjour
Il y a avec MapBasic (7, donc a priori 9) :
- une solution pour explorer les répertoires et stocker le nom de celui choisi: le plus simple, sans faire appel aux API Windows, est d'utiliser FileOpenDlg et de demander à l'utilisateur de cliquer sur n'importe quel TAB, puis d'extraire le chemin. Mais on peut faire plus "élégant" avec les API
- une solution pour stocker dans une variable liste (array) le nom de toutes les tables contenues dans ce répertoire, éventuellement en filtrant celles qui sont mappables/vecteur, en faisant appel à la seule API kernel32
Je vous mets en ligne demain un exemple de ces solutions

Hors ligne

 

#4 Mon 21 January 2008 23:46

Maurice
Membre
Lieu: Montpellier
Date d'inscription: 5 Sep 2005
Messages: 5331

Re: [mapbasic9] lire le nom de tables contenues dans un répertoire donné

Re bonjour
Finalement j'ai trouvé les éléments et le temps pour faire ça ce soir.. tongue
Ci joint un code à compiler qui donne le choix de pointer un répertoire par FileOpenDlg ou par un browser (rustique) qui fait appel aux API Windows, puis qui liste les TAB contenus dans ce répertoire (stockés dans une variable liste)
Le code est lourdingue mais je vous laisse le soin de l'alléger des parties peut être inutiles ou de le rendre plus élégant smile
... et de faire profiter la communauté de ces améliorations (bien sûr)


Fichier(s) joint(s) :
Pour accéder aux fichiers vous devez vous inscrire.

Hors ligne

 

#5 Wed 23 January 2008 08:19

magali di salvo
Participant actif
Lieu: Lyon
Date d'inscription: 21 Sep 2005
Messages: 70

Re: [mapbasic9] lire le nom de tables contenues dans un répertoire donné

Merci beaucoup ! je m'y colle de ce pas !

magali di salvo

Hors ligne

 

#6 Wed 23 January 2008 20:43

hanczyk
Participant assidu
Lieu: Châlons-en-Champagne
Date d'inscription: 21 Apr 2006
Messages: 596

Re: [mapbasic9] lire le nom de tables contenues dans un répertoire donné

Bonjour,
(MI 7.8)

j'ai compilé le MB, puis exécuté dans MI en sélectionnant un répertoire, je n'ai rien obtenu à part la liste dans la boîte de dialogue message, que je ne peux pas exploiter.

jean-marc


Jean-Marc Hanczyk

Hors ligne

 

#7 Wed 23 January 2008 20:55

Maurice
Membre
Lieu: Montpellier
Date d'inscription: 5 Sep 2005
Messages: 5331

Re: [mapbasic9] lire le nom de tables contenues dans un répertoire donné

Ben.. c'est exactement ce qu'est sensé faire ce code donné à titre d'exemple pour montrer qu'on peut pointer un répertoire (par deux méthodes différentes) et faire la liste des TAB qu'il contient (c'est ce qui est demandé dans le sujet). Et pour prouver qu'il marche, il écrit le contenu de la variable liste obtenue - CNames() - dans la boite de message...
Le "rien" que tu as obtenu est donc bien l'objectif de ce code smile
Et avec cette variable liste tu peux faire ensuite ce que tu veux dans une boucle: reprojeter les tables, les détruire, les renommer, etc...

Hors ligne

 

#8 Wed 23 January 2008 21:38

hanczyk
Participant assidu
Lieu: Châlons-en-Champagne
Date d'inscription: 21 Apr 2006
Messages: 596

Re: [mapbasic9] lire le nom de tables contenues dans un répertoire donné

Bonjour,

d'accord, j'ai sauté une étape (mal lu le post de Magali), si j'ai bien compris ce n'est pas le code de l'outil souhaité mais une partie.

Je pense que je pourrais avoir l'utilité de cet outil. Je fais donc appel à Magali si elle peut le mettre à disposition.

merci, jean-marc


Jean-Marc Hanczyk

Hors ligne

 

#9 Wed 23 January 2008 22:54

Maurice
Membre
Lieu: Montpellier
Date d'inscription: 5 Sep 2005
Messages: 5331

Re: [mapbasic9] lire le nom de tables contenues dans un répertoire donné

Je ne sais pas quel est l'outil en préparation, mais le code fourni n'en est sûrement qu'une petite partie...
Parce que pour ouvrir toutes les tables d'un répertoire ... il y a déjà MapInfo smile
Si j'ai compris il s'agit d'ouvrir et concaténer toutes les tables de répertoires divers et dans ce cas le code fourni est insuffisant
Mais je laisse la "demanderesse" préciser...

Hors ligne

 

#10 Thu 24 January 2008 09:27

magali di salvo
Participant actif
Lieu: Lyon
Date d'inscription: 21 Sep 2005
Messages: 70

Re: [mapbasic9] lire le nom de tables contenues dans un répertoire donné

je précise, je précise...effectivement seule un partie de code m'intéressait, je l'ai intégrée dans une petite macro perso...

le thème est celui de la numérisation des Plans de Prévention de Risque dans un département. On a un répertoire "PPR" et des sous-répertoires "Nom_du_PPR". Chaque sous-répertoire contient un ensemble de 1 à n tables mapinfo (une par commune en général). L'objectif est de faire une table départementale avec tout ça !

J'ai crée une liste texte des noms de sous-repertoire que j'ouvre sous mapinfo, je lis ensuite chaque nom de sous-répertoire et j'ouvre toutes les tables mapinfo contenues dans le sous-répertoire. L'objectif étant de ne choisir par une boite de dialogue que le répertoire "PPR" et pas chaque sous-repertoire.

voilà déjà en pj comment j'ai exploité le code fourni par Maurice. mon programme est tout sauf élégant, mais bon il répond à mon besoin pour l'instant...les paramètres à entrer sont de 3 types : le nom de la table MI contenant la liste des sous-rep, la localisation du rep principal et le nom de la table ppr départementale qu'on veut créer (avec sa structure entrée en dur)...on pourrait bien sûr choisir uniquement la localisation du rep principal et forcer le reste, on pourrait aussi dupliquer la structure de la première table plutôt que de l'entrer en dur, ça ferait une macro plus ouverte, mais bon, je ferais ça plus tard...

pour info  on a 36 sous-répertoire pour 74 tables mapinfo, d'où l'idée d'automatiser l'aggrégation sans passer par "ouvrir table" dans MI...en tous cas, merci Maurice !

magali di salvo, Diren Rhone-Alpes


Fichier(s) joint(s) :
Pour accéder aux fichiers vous devez vous inscrire.

Hors ligne

 

#11 Thu 24 January 2008 09:44

Maurice
Membre
Lieu: Montpellier
Date d'inscription: 5 Sep 2005
Messages: 5331

Re: [mapbasic9] lire le nom de tables contenues dans un répertoire donné

magali di salvo a écrit:

...on pourrait bien sûr choisir uniquement la localisation du rep principal et forcer le reste...


Merci Magali
Ca ressemble à l'option "traiter tous les répertoires" que j'avais mise dans bigseamless
Ca vaudrait peut être le coup de "généraliser" l'outil pour en faire quelque chose qui permet une action sur toutes les tables d'un répertoire, sous-répertoires compris...

Hors ligne

 

Pied de page des forums

Powered by FluxBB