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

GEODATA DAYS 2024

#1 Mon 01 September 2008 15:36

chiche31
Participant actif
Date d'inscription: 20 Aug 2008
Messages: 64

[MapBasic] Lecture dans un fichier ayant un nom non-défini

Bonjour,
J'ai la problématique suivante :
Sur un serveur de mon réseau est mis à disposition un fichier généré et effacé toutes les 5 minutes. Ce fichier ne porte jamais le même nom, étant donné que le nom contient le jour, l'heure et la minute de sa création.
Donc cela pose problème lorsque je veux l'ouvrir via la commande mapbasic Open File, étant donné que je ne connais pas son nom exact.
Est-ce qu'il n'existe pas une fonction qui permet d'ouvrir le fichier le plus récent d'un dossier?
Ou est-ce que la commande Open file ne pas prendre un paramètre supplémentaire?
Ou autres?

Merci par avance

Hors ligne

 

#2 Mon 01 September 2008 15:54

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

Re: [MapBasic] Lecture dans un fichier ayant un nom non-défini

Bonjour
Quelle est la version de MI/MB ?? ( la gestion des dates a beaucoup changée avec MI9 et MB9)
Est-ce que l'heure de votre PC est la même que celle du serveur ?? (pour utiliser la fonction Time()...)

Hors ligne

 

#3 Mon 01 September 2008 16:03

chiche31
Participant actif
Date d'inscription: 20 Aug 2008
Messages: 64

Re: [MapBasic] Lecture dans un fichier ayant un nom non-défini

Version 9.0 pour MI et MB.
Et oui, l'heure sera la même.

Hors ligne

 

#4 Mon 01 September 2008 16:25

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

Re: [MapBasic] Lecture dans un fichier ayant un nom non-défini

Hypothèse, car je n'ai pas MB9:
Time() donne une chaine de caractère genre 16:13:44
FormatDate$(CurDate()) donne une chaine de caractère genre 01/09/2008 (fonction du format système local)
En découpant ces chaines judicieusement pour "reconstituer" le nom de fichier, on peut fabriquer 5 noms:
nom0 avec la minute du moment, nom1 avec la minute précedente...jusqu'à nom5 pour le fichier qui a au plus 5 minutes
et utiliser:
If  FileExists("C:\MapInfo\nom0.TXT") Then Open File "C:\MapInfo\nom0.TXT" ...
ElseIf  FileExists("C:\MapInfo\nom1.TXT") Then Open File "C:\MapInfo\nom1.TXT" ...
...
ElseIf  FileExists("C:\MapInfo\nom5.TXT") Then Open File "C:\MapInfo\nom5.TXT" ...
End If

Hors ligne

 

#5 Tue 02 September 2008 10:56

chiche31
Participant actif
Date d'inscription: 20 Aug 2008
Messages: 64

Re: [MapBasic] Lecture dans un fichier ayant un nom non-défini

J'ai trouvé un système un peu dans ce style pour résoudre mon problème. Merci pour la piste en tout cas!

Hors ligne

 

#6 Tue 02 September 2008 15:31

chiche31
Participant actif
Date d'inscription: 20 Aug 2008
Messages: 64

Re: [MapBasic] Lecture dans un fichier ayant un nom non-défini

IL n'y a vraiment aucun moyen de lire un fichier sans en connaître le nom?
Car dans mon cas, j'ai un fichier qui commence toujours par "toto_tata_" puis la date du jour, l'heure et les minutes.

Exemple : toto_tata_200809021204.txt

Ce fichier est systématiquement renouvelé, donc il ne porte jamais le même nom. Mais mon code mapbasic a besoin de le lire, quel que soit le nom qu'il porte.
Mais comme le dossier qui contient ce fichier contient tous les fichiers générés, j'ai besoin de lire le plus récent

Au secours...

Hors ligne

 

#7 Tue 02 September 2008 16:00

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

Re: [MapBasic] Lecture dans un fichier ayant un nom non-défini

Ben...j'ai répondu !!??
Si le fichier est "généré et effacé toutes les 5 minutes" (cf post #1) - ce qui est contradictoire avec "le dossier qui contient ce fichier contient tous les fichiers générés" (cf post #6) - il n'y en a qu'un qui date d'au plus 5 minutes.
Donc à l'instant T:

heure=Time(24)   ' soit "15:58:40"
jour=FormatDate$(CurDate())    ' soit  "02/09/2008"
ch1=left$(heure,2) ch2=mid$(heure,4,2) ch3=right$(jour,4) ch4=mid$(jour,4,2) ch5=left$(jour,2)
nom0="toto_tata_"+ch3+ch4+ch5+ch1+ch2
nom1="toto_tata_"+ch3+ch4+ch5+ch1+str$(val(ch2)-1)
...
nom5="toto_tata_"+ch3+ch4+ch5+ch1+str$(val(ch2)-5)
For i=0 to 5
monfichier="C:\MapInfo\nom"+i
If  FileExists(monfichier) Then Open File monfichier Exit For End If 'oublié, désolé !
Next


permet d'ouvrir le plus récent des toto_tata_xxxxxxxxxxxx.txt !!
nb: sous réserve d'erreurs de code et des complications liées à des horaires à cheval sur 2 heures, qui sont solubles mais compliquent le code smile

Hors ligne

 

#8 Tue 02 September 2008 16:28

Damien BEAUSEIGNEUR
Participant assidu
Lieu: meyzieu
Date d'inscription: 5 Sep 2005
Messages: 425

Re: [MapBasic] Lecture dans un fichier ayant un nom non-défini

Bonjour

je propose une autre solution qui utilise la recherche de fichier bien connue DIR, mais la liste risque d'être un peu longue...
si le dossier n'est pas nettoyé de temps en temps...

Dim nom_fichier as string
Run application "Dir monrep\toto_tata_*.txt /O-D /B >list_fich.rep" génère la liste des fichiers du répertoire trié par date du plus vieux au plus jeune et stocke l'information dans le fichier list_fich.rep

open file "list_fich.rep" for input As #1

nom_fichier = ""
Do While Not EOF(1)
Line Input #1, nom_fichier
Loop
Close File #1

If  nom_fichier = "" Then Open File nom_fichier end if

cordialement

Dernière modification par Damien BEAUSEIGNEUR (Tue 02 September 2008 16:36)

Hors ligne

 

#9 Tue 02 September 2008 16:31

chiche31
Participant actif
Date d'inscription: 20 Aug 2008
Messages: 64

Re: [MapBasic] Lecture dans un fichier ayant un nom non-défini

Oui mais nouveauté, le fichier le plus récent ne date pas forcément de 5 minutes, il peut dater d'1h ou d'un jour!

Hors ligne

 

#10 Tue 02 September 2008 16:35

chiche31
Participant actif
Date d'inscription: 20 Aug 2008
Messages: 64

Re: [MapBasic] Lecture dans un fichier ayant un nom non-défini

Damien BEAUSEIGNEUR a écrit:

Bonjour

je propose une autre solution qui utilise la recherche de fichier bien connue DIR, mais la liste risque d'être un peu longue...
si le dossier n'est pas nettoyé de temps en temps...

Dim nom_fichier as string
Run application "Dir monrep\toto_tata_*.txt /O-D /B >list_fich.rep" génère la liste des fichiers du répertoire trié par date du plus vieux au plus jeune et stocke l'information dans le fichier list_fich.rep

open file "list_fich.rep" for input As #1

nom_fichier = ""
Do While Not EOF(1)
Line Input #1, nom_fichier
Loop
Close File #1

If  nom_fichier = "" Then Open File nom_fichier

cordialement


Merci beaucoup, j'essaye ça de suite

Hors ligne

 

#11 Tue 02 September 2008 16:50

chiche31
Participant actif
Date d'inscription: 20 Aug 2008
Messages: 64

Re: [MapBasic] Lecture dans un fichier ayant un nom non-défini

J'ai le message suivant qui apparaît quand j'utilise ce code :
"Erreur 22 ouverture fichier B > liste_fich.rep"

Mon fichier est mal placé?

Hors ligne

 

#12 Tue 02 September 2008 17:09

Damien BEAUSEIGNEUR
Participant assidu
Lieu: meyzieu
Date d'inscription: 5 Sep 2005
Messages: 425

Re: [MapBasic] Lecture dans un fichier ayant un nom non-défini

Le principe de la ligne de commande est de stocker le résultat de la commande DIR dans le fichier list_fich.rep

"Dir monrep\toto_tata_*.txt /O-D /B >list_fich.rep"

l'option /O-D permet de d'indiquer l'ordre de tri
l'option /B permet de limiter l'information au minimum...

Attention ne pas rajouter d'espace dans la définition des options.

Note aussi list_fich.rep peut être sous la forme monrep\monfich.rep

Peux-tu nous envoyer ta ligne de commande, si le problème persiste merci.

Hors ligne

 

#13 Tue 02 September 2008 17:15

chiche31
Participant actif
Date d'inscription: 20 Aug 2008
Messages: 64

Re: [MapBasic] Lecture dans un fichier ayant un nom non-défini

Voici la ligne de commande que j'utilise :

Dir C:\Program Files\ACXIOM\AIRTAC GIS\docs\RMT*.txt /O-D /B >C:\Program Files\ACXIOM\AIRTAC GIS\docs\list_fich.rep"

Dernière modification par chiche31 (Tue 02 September 2008 17:18)

Hors ligne

 

#14 Tue 02 September 2008 17:23

chiche31
Participant actif
Date d'inscription: 20 Aug 2008
Messages: 64

Re: [MapBasic] Lecture dans un fichier ayant un nom non-défini

Après plusieurs tests, je me suis aperçu que la commande ne voulait pas accéder au répertoire "Program Files". Si on met les fichiers dans d'autres répertoires, cela fonctionne correctement.
D'où est-ce que cela provient? Est-ce que c'est dû fait qu'il y a des espaces dans le nom des répertoires?
Existe t-il un moyen de tout de même accéder au répertoire Program Files avec la commande Dir?

Merci par avance

Hors ligne

 

#15 Tue 02 September 2008 17:24

Damien BEAUSEIGNEUR
Participant assidu
Lieu: meyzieu
Date d'inscription: 5 Sep 2005
Messages: 425

Re: [MapBasic] Lecture dans un fichier ayant un nom non-défini

Essaye d'écrire la commande comme celà
Run application "Dir ""C:\Program Files\ACXIOM\AIRTAC GIS\docs\RMT*.txt"" /O-D /B >""C:\Program Files\ACXIOM\AIRTAC GIS\docs\list_fich.rep"""

Le dos n'aime pas trop les chemin et nom de fichier avec des espaces
mais en délimitant avec des double quotes le nom des fichiers le problème devrait être résolu.
D'ou l'utilisation de "" dans l'écriture du code.

on devrait pouvoir s'en sortir.

Hors ligne

 

#16 Tue 02 September 2008 17:25

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

Re: [MapBasic] Lecture dans un fichier ayant un nom non-défini

Excellente solution (surtout qu'on ne sait pas bien comment fonctionnent les mises à jour sad)
Si mon DOS est correct, le fichier *.rep créé avec ces options a comme première ligne le nom du dernier fichier toto_tata_*.txt créé, le plus récent
Il suffit donc ensuite de

open file "list_fich.rep" for input As #1
nom_fichier = ""
Line Input #1, nom_fichier
Close File #1
If  nom_fichier <> "" Then Open File nom_fichier End If


nb: attention à la faute de frappe, c'est <>"" et pas =""

Hors ligne

 

#17 Tue 02 September 2008 17:34

Damien BEAUSEIGNEUR
Participant assidu
Lieu: meyzieu
Date d'inscription: 5 Sep 2005
Messages: 425

Re: [MapBasic] Lecture dans un fichier ayant un nom non-défini

Maurice a écrit:

nb: attention à la faute de frappe, c'est <>"" et pas =""


Et oui des fois on va trop vite et on écrit des bêtises.
Et oui le dos peut être encore utile.

Hors ligne

 

#18 Tue 02 September 2008 17:38

chiche31
Participant actif
Date d'inscription: 20 Aug 2008
Messages: 64

Re: [MapBasic] Lecture dans un fichier ayant un nom non-défini

J'ai toujours la même erreur : "Erreur 22 ouverture fichier B > liste_fich.rep"
Alors que si j'utilise la commande Dir C:\RMT*.txt /O-D /B >C:\list_fich.rep, ça marche correctement dans le DOS, mais pas dans MapInfo

Je comprends pas...

Dernière modification par chiche31 (Tue 02 September 2008 17:42)

Hors ligne

 

#19 Tue 02 September 2008 17:46

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

Re: [MapBasic] Lecture dans un fichier ayant un nom non-défini

Passer par une commande interprétée:
dim cmd as string
cmd="Dir C:\RMT*.txt /O-D /B >C:\list_fich.rep"
run command cmd

Hors ligne

 

#20 Tue 02 September 2008 17:49

chiche31
Participant actif
Date d'inscription: 20 Aug 2008
Messages: 64

Re: [MapBasic] Lecture dans un fichier ayant un nom non-défini

Là il me met "commande inconnue : dir" ....

Hors ligne

 

#21 Tue 02 September 2008 18:21

Damien BEAUSEIGNEUR
Participant assidu
Lieu: meyzieu
Date d'inscription: 5 Sep 2005
Messages: 425

Re: [MapBasic] Lecture dans un fichier ayant un nom non-défini

En fait c'est ma faute sad

il faut écrire

Code:

Run Program "command.com /c Dir ""C:\Program Files\ACXIOM\AIRTAC GIS\docs\RMT*.txt"" /O-D /B >""C:\Program Files\ACXIOM\AIRTAC GIS\docs\list_fich.rep"""

solution indiquée dans l'aide de Mapbasic... big_smile

c'est à ça que je pensais mais quand on peut pas tester son code ...

Et puis quand on va trop vite, on fait des erreurs..

Hors ligne

 

#22 Wed 03 September 2008 08:17

Jean-Jacques
Participant actif
Lieu: Aurillac
Date d'inscription: 4 Jan 2006
Messages: 99

Re: [MapBasic] Lecture dans un fichier ayant un nom non-défini

Bonjour,
Je rentre de congé et je prends le train en marche.
"Sur un serveur de mon réseau est mis à disposition un fichier généré et effacé toutes les 5 minutes"
Donc il n'y en a qu'un de nom "toto_tata_" puis la date du jour, l'heure et les minutes.
Je pense sous DOS à la commande REN toto_tata*.* toto_tata.txt et le fichier aura toujours le même nom.
Par contre traduit en MapBasic, je suis un peu "sec".

Cordialement
Jean-Jacques
DDE15


Jean-Jacques
DDT15

Hors ligne

 

#23 Wed 03 September 2008 09:58

chiche31
Participant actif
Date d'inscription: 20 Aug 2008
Messages: 64

Re: [MapBasic] Lecture dans un fichier ayant un nom non-défini

Damien BEAUSEIGNEUR a écrit:

En fait c'est ma faute sad

il faut écrire

Code:

Run Program "command.com /c Dir ""C:\Program Files\ACXIOM\AIRTAC GIS\docs\RMT*.txt"" /O-D /B >""C:\Program Files\ACXIOM\AIRTAC GIS\docs\list_fich.rep"""

solution indiquée dans l'aide de Mapbasic... big_smile

c'est à ça que je pensais mais quand on peut pas tester son code ...

Et puis quand on va trop vite, on fait des erreurs..


Toujours pas...
MapInfo me dit "Impossible d'exécuter - Le programme ne peut être lancé"
C'est bien command.com qu'il faut utiliser? C'est pas un truc du style cmd.exe?

Hors ligne

 

#24 Wed 03 September 2008 10:04

chiche31
Participant actif
Date d'inscription: 20 Aug 2008
Messages: 64

Re: [MapBasic] Lecture dans un fichier ayant un nom non-défini

Ca marche avec cmd.exe plutôt que command.com
Par contre, étant donné que j'ouvre le fichier list_fich.rep directement après la création, il faudrait que je mette en place un timer pour laisser le temps au fichier de se créer.

En tout cas merci à tous pour votre aide!

Dernière modification par chiche31 (Wed 03 September 2008 10:10)

Hors ligne

 

Pied de page des forums

Powered by FluxBB