|
Publicité ' | ||||||||||||||||||||||||
|
|
#1 |
|
Invité de passage
![]() Inscription : juin 2011 Messages : 10 ![]() |
Bonjour,
je dispose de plusieurs dizaines de fichiers texte dans lesquels sont inscrits des milliers de mesures par des capteurs. Le format des fichiers texte se présente comme suit : 4 colonnes (temps, Min, Max, Moyenne) répétées 240 fois (il y a 240 capteurs) et plusieurs milliers de lignes(une ligne toutes les 17 secondes). J'aimerai créer une table par capteur (soit 240 tables Une fois le fichier texte importer (appelons le Table1), j'aimerai donc créer 240 tables, sélectionner les colonnes appropriées dans Table1 et les coller dans l'une des 240 tables. Je suis débutant sur access. Est-ce possible de faire ceci seulement avec des requêtes sql (je connais le langage Merci d'avance pour tous vos conseils. Even |
|
|
00
|
|
|
#2 |
|
Membre Expert
![]() Jacques PetiotIndépendant développeur et formateur Inscription : octobre 2007 Messages : 891 ![]() |
hello
c'est bien possible, mais à mon sens, uniquement en VBA, le programme devrait être assez court par contre, je te conseille de tout mettre dans une seule table: N°capteur,temps, Min, Max, Moyenne ça sera beaucoup plus simple à manipuler et tu retrouvera par requête simple, le capteur de ton choix à plus pour les détails du VB
__________________
-------------------Simplifi----------comme si tout était simple-------- |
|
|
00
|
|
|
#3 |
|
Invité de passage
![]() Inscription : juin 2011 Messages : 10 ![]() |
OK, merci bien du conseil! je vais m'atteler au langage VBA alors.
Et concernant le trop grand nombre de colonnes de mon fichier texte, est-ce possible de l'importer en totalité? ou dois-je, lors de l'importation, décocher les (240*4)-4 soit 956 colonnes qui ne m'intéressent pas? |
|
|
00
|
|
|
#4 | ||
|
Membre Expert
![]() Jacques PetiotIndépendant développeur et formateur Inscription : octobre 2007 Messages : 891 ![]() |
Hello
en programmation, on va lire des enregistrements (d'une certaine longueur) ou des lignes complètes input ou line input à toi de nous dire quelle est la forme du fichier texte, est ce que le nombre de chiffres est toujours le même ou pas? y a t il des séparateurs, genre ; ou , ou seulement un espace? exemple de programmation: (j'ai mis le chemin dans ma table de paramêtres...) Code :
à l'intérieur de ce programme, on peut bien gérer une boucle sur les 240x4 valeurs et traiter les caractères lus comme on veut on peut rajouter le N° de capteur, le rang de la lecture, etc... à bientôt
__________________
-------------------Simplifi----------comme si tout était simple-------- |
||
|
|
10
|
|
|
#5 |
|
Invité de passage
![]() Inscription : juin 2011 Messages : 10 ![]() |
Bonjour!
Merci beaucoup pour tes informations. J'ai lu quelques tutoriels du langage VBA mais je n'arrive tout de même pas à comprendre ton code. J'ai remarqué que dans des sujets similaires sur le forum, les messages parlaient souvent de la fonction "DoCmd.TransferText acImportDelim" mais je n'arrive pas à comprendre la syntaxe ni le sens des différents arguments. Mes fichiers texte sont de la forme suivante : Séparateur : tabulation 1ère colonne : nombre réel représentant le nombre de secondes écoulées depuis le 01/01/1904 00:00:00 jusqu'au moment de l'acquisition de la mesure : exemple : 3343737137.0650 (toujours 4 chiffres après la virgule) 2ème,3ème et 4ème colonne : un réel :exemple : 18.5857 (toujours 4 chiffres après la virgule) Les 4 colonnes sont répétées 240 fois ( donc la 5ème est du même type que la première). Le nombre de lignes est différent pour chaque fichier texte. Je ne suis pas feignant mais il y a vraiment beaucoup de tutoriels et je n'arrive même pas à voir lesquels se rapprochent de mon projet. Est-ce que ceux du thème "Accès aux données ==> Avec Requêtes; Avec DAO; Avec ADO" etc sont intéressants pour moi? Dans tous les cas merci pour les efforts que vous faites!
|
|
|
00
|
|
|
#6 |
![]() ![]() |
Bonjour
Tu ne pourras jamais mettre autant de colonne dans une table Access, la limite est de 250. Il faut décomposer le tout en plusieurs tables. Philippe
__________________
Détaillez vos questions, sinon vous aurez des réponses erronées et vous irez tout droit dans le et lisez les règles sinon ![]() Si vous pensez commencer sans un livre, oublier : livres pour débuter Vous pouvez consulter mes articles sur Access et PowerPoint Le blog Office. Inutile de m'envoyer un MP pour des questions techniques ou de me relancer , je n'y répondrais pas. |
|
|
00
|
|
|
#7 |
|
Membre Expert
![]() Jacques PetiotIndépendant développeur et formateur Inscription : octobre 2007 Messages : 891 ![]() |
Hello
bonjour à tous désolé Philippe mais pour le coup, je pense à une table à 6 colonnes: N°capteur (en espérant qu'ils soient toujours dans le même ordre) Temps min max moyenne ce qui permet bien de retrouver toutes les mesures dans une seule table.... la commande TransfertText (pour laquelle, on pourrait te donner des explications et des exemples) ne peut traiter ton cas, fichier texte trop large, trop de colonnes, etc par contre rien n'interdit d'ouvrir le fichier par open "fichier" as #1 et de lire les caractères l'un après l'autre, puis ensuite de traiter cette lecture comme bon nous semble Je serais preneur d'un exemple tronqué (juste 5 capteurs et 10 lignes) pour vérifier la faisabilité Autre info: quelle est la taille globale de tes fichiers texte? si >2Go alors problème....
__________________
-------------------Simplifi----------comme si tout était simple-------- |
|
|
00
|
|
|
#8 |
|
Invité de passage
![]() Inscription : juin 2011 Messages : 10 ![]() |
Bonjour,
Les numéros de capteur sont toujours dans le même ordre donc c'est déjà un bon point ![]() La taille des fichiers va de moins de 1mo à 200Mo donc je pense qu'il n'y aura pas de soucis de ce côté là. Voici un morceau de mes fichiers texte, 5 colonnes, 10 lignes. Les séparateurs sont des tabulations. 3346395405.4965 7.3234 -7.1558 -0.0032 3346395405.4965 3346395473.7625 7.3234 -7.1558 0.023 3346395473.7625 3346395542.0285 7.1726 -7.3066 0.0278 3346395542.0285 3346395610.2944 7.1726 -7.1558 -0.0418 3346395610.2945 3346395678.5604 5.966 -5.9492 0.018 3346395678.5604 3346395746.8264 7.1726 -7.005 0.0074 3346395746.8264 3346395815.0924 6.8709 -6.4017 0.0118 3346395815.0924 3346395883.3584 6.1168 -5.9492 0.0415 3346395883.3584 3346395951.6244 5.966 -5.9492 0.0191 3346395951.6244 3346396019.8903 5.966 -5.9492 0.046 3346396019.8904 Merci pour toutes vos infos! J'avance lentement mais au moins j'avance!!! |
|
|
00
|
|
|
#9 |
|
Membre Expert
![]() Jacques PetiotIndépendant développeur et formateur Inscription : octobre 2007 Messages : 891 ![]() |
Hello
petit prog à venir d'ici 2 à 3 jours
__________________
-------------------Simplifi----------comme si tout était simple-------- |
|
|
00
|
|
|
#10 |
|
Invité de passage
![]() Inscription : juin 2011 Messages : 10 ![]() |
En algo, le programme que je voudrais réaliser ressemblerait à ça :
Ouverture d'une boîte de dialogue où on rentre l'adresse du fichier texte Récupération de l'adresse du fichier Ouverture du fichier Compter le nombre de lignes = N Pour i allant de 0 à 239 : Mettre i+1 dans le champ Numéro_de_Capteur sur N lignes dans la Table MesuresFin de la procédure Fin du programme |
|
|
00
|
|
|
#11 |
|
Membre Expert
![]() Jacques PetiotIndépendant développeur et formateur Inscription : octobre 2007 Messages : 891 ![]() |
Hello
à la programmation, je me rends compte que pour tester un peu j'ai besoin de 5 capteurs soit 20 colonnes De plus, pour dimensionner les tables au mieux, il est utile de savoir quelles sont les grandeurs mesurées: à combien peut monter le max, on ne prendra pas les mêmes types de données si max = 10 ou si max = 100000000000 le coeur du prog devrait tenir en quelques lignes edit: j'ai oublié de demander en quelle version tu veux la base: mdb ou accdb, version avant Access 2007 ou après?
__________________
-------------------Simplifi----------comme si tout était simple-------- |
|
|
00
|
|
|
#12 |
|
Invité de passage
![]() Inscription : juin 2011 Messages : 10 ![]() |
Bonjour,
les grandeurs mesurées sont de trois types : capteur de déformation, capteur de déplacement, capteur de force. Du coup les valeurs sont très variables mais pour l'ensemble des capteurs les valeurs sont comprises dans l'intervalle [-10000;+10000] que ce soit, pour le Max, le Min et donc la Moyenne. Pour le Temps la plus faible valeur est : 3343737137.0650 Et la valeur la plus grande est : 3385971836.3509 Comme la base de données peut être complétée si d'autres mesures sont effectuées, la valeur la plus grande du Temps est susceptible de changer. J'utilise Access 2003 et enregistre ma base de données en .mdb Je joint un petit fichier de mesures si tu veux faire des tests sur ton code. Merci encore pour tous vos conseils et vos efforts! |
|
|
00
|
|
|
#13 | |
|
Membre Expert
![]() Jacques PetiotIndépendant développeur et formateur Inscription : octobre 2007 Messages : 891 ![]() |
hello
SVP Citation:
__________________
-------------------Simplifi----------comme si tout était simple-------- |
|
|
|
00
|
|
|
#14 |
|
Membre Expert
![]() Jacques PetiotIndépendant développeur et formateur Inscription : octobre 2007 Messages : 891 ![]() |
Hello
commence bien par fixer le nb de capteur de ton fichier texte normalement, je livre mes bases sans mode d'emploi Simplifi est un peu synonyme d'intuitif A plus
__________________
-------------------Simplifi----------comme si tout était simple-------- |
|
|
00
|
|
|
#15 | ||||
|
Membre Expert
![]() Jacques PetiotIndépendant développeur et formateur Inscription : octobre 2007 Messages : 891 ![]() |
Hello
pour ceux qui ne veulent pas charger la base j'aurais pu mettre le VB pour montrer le programme j'ai seulement mis trois boutons sur le formulaire de démarrage: farfouiller (équivalent de browse) pour chercher le fichier de mesures charger pour le mettre dans la table voir pour visualiser le tableau d'un capteur et/ou celui des 240 capteurs à un moment donné Code :
)Code :
__________________
-------------------Simplifi----------comme si tout était simple-------- |
||||
|
|
10
|
|
|
#16 | ||
|
Membre Expert
![]() Jacques PetiotIndépendant développeur et formateur Inscription : octobre 2007 Messages : 891 ![]() |
Avec mes excuses, j'avais pas vu le fichier Excel en réponse à la demande de 5 capteurs et j'en ai bricolé 1,
par contre j'ai bricolé comme si le stemps n'était là qu'une seule fois au début de chaque ligne je vais donc modifier légèrement le VB edit: le voilà, seule la routine charger a changée Code :
__________________
-------------------Simplifi----------comme si tout était simple-------- |
||
|
|
10
|
|
|
#17 |
|
Invité de passage
![]() Inscription : juin 2011 Messages : 10 ![]() |
Bonjour!
Merci beaucoup! C'est génial, ça fonctionne! C'était bien au dessus de mes capacités de débutants! Quelle est la modification à apporter dans la routine charger pour ne s'occuper que des 156 premiers capteurs? |
|
|
00
|
|
|
#18 |
|
Membre Expert
![]() Jacques PetiotIndépendant développeur et formateur Inscription : octobre 2007 Messages : 891 ![]() |
Hello
aucune modification de programmation il suffit de taper 156 dans le formulaire à NbCapteurs
__________________
-------------------Simplifi----------comme si tout était simple-------- |
|
|
00
|
|
|
#19 |
|
Invité de passage
![]() Inscription : juin 2011 Messages : 10 ![]() |
Re!
Petites explications : pour des raisons expérimentales, certains capteurs ont été enlevés/remplacés à partir d'une certaine date. On retire 84 capteurs et on en remet 30 nouveau. Donc les 240-84=156 premières colonnes sont les mêmes capteurs. Les 30 dernières colonnes sont nouvelles. Ces nouveaux capteurs étant mal configurés les colonnes temps sont remplies de zéros. La colonne Minimum ( donc la colonne Moyenne) présente des valeurs incohérentes de l'ordre de -10^41. J'aimerai donc ne pas importer ces 30*4 dernières colonnes. Je joint un fichier texte en exemple. Je pense que l'importation s'arrête à cause d'une erreur car que je choisisse NbCapteurs=156 ou NbCapteurs=240 il n'importe que les 156 premiers capteurs de la première ligne. Voilà ce que j'ai compris de la routine "Charger" : On déclare les variables, on ouvre une table tempo. On met i dans le champ 1. On lit, caractère après caractère le fichier texte en concaténant les caractères jusqu'à la tabulation suivante. On convertis le string en date ou numérique. On le met dans le champs correspondant. Mes questions : -Une fois la boucle for terminée (i=240), on vient de terminé de lire la première ligne. Comment le programme fait pour passer à la ligne suivante? -Pourquoi n'y a-t-il pas de condition d'exécution à la boucle "Do" qui englobe la boucle "for"? A quoi sert-elle? -A quoi servent les commandes ".AddNew" et ".Update"? C'est un peu le bazarre et je ne vous en voudrai pas d'abandonner mon affaire vu tout ce que vous avez fait pour moi! Merci encore
|
|
|
00
|
|
|
#20 | ||||
|
Membre Expert
![]() Jacques PetiotIndépendant développeur et formateur Inscription : octobre 2007 Messages : 891 ![]() |
Hello
Citation:
- on ouvre le fichier à lire - on ouvre la table "Table_Mesures" dans un recordset (un tableau immense facilement manipulable) Citation:
Citation:
Citation:
En fait, j'ai pas du tout blindé le programme pour qu'il reste simplissime (on ne peut pas se refaire), on pourrait peut être modifier la gestion d'erreur pour lui permettre de continuer à lire les 240 capteurs en n'écrivant rien si une erreur de conversion intervient dans l'un des champs Je cherche un peu plus ce soir et je poste l'amélio A+
__________________
-------------------Simplifi----------comme si tout était simple-------- |
||||
|
|
00
|
Copyright © 2000-2012 - www.developpez.com