Pages: 1
- Sujet précédent - [mapbasic9] lire le nom de tables contenues dans un répertoire donné - Sujet suivant
#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..
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
... et de faire profiter la communauté de ces améliorations (bien sûr)
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
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
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
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é
...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
Pages: 1
- Sujet précédent - [mapbasic9] lire le nom de tables contenues dans un répertoire donné - Sujet suivant