Pages: 1
- Sujet précédent - [MapBasic] Lecture dans un fichier ayant un nom non-défini - Sujet suivant
#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
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
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 )
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
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
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...
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
En fait c'est ma faute
il faut écrireCode:
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...
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
Pages: 1
- Sujet précédent - [MapBasic] Lecture dans un fichier ayant un nom non-défini - Sujet suivant