123456 | |||||||||||||||||
Auteur | Messages | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Invité | #1 Posté le 2/8/2010 à 11:11:00 | ||||||||||||||||
Bonjour, Je début dans le monde de la programmation sur gambas. je désire importer un fichier txt dans un tableau pour par la suite faire un tri sur celui-ci fichier brute 30/07/10 06:00:08 CLVCPTB10001 nvoEffectOccup OC_UNOCCUPIED 30/07/10 06:00:08 CLVCPTB10001 nvoSpaceTemp 21.62 30/07/10 06:00:08 CLVCPTB10001 nvoSetptOffset 0.00 30/07/10 06:00:08 CLVCPTB10001 nvoUnitStatus HVAC_COOL,0.000,0.000,163.835,163.835,0.000,0 30/07/10 06:00:08 CLVCPTB10002 nvoEffectOccup OC_UNOCCUPIED 30/07/10 06:00:08 CLVCPTB10002 nvoSpaceTemp 25.63 30/07/10 06:00:08 CLVCPTB10002 nvoSetptOffset 0.00 30/07/10 06:00:08 CLVCPTB10002 nvoUnitStatus HVAC_COOL,0.000,0.000,163.835,163.835,0.000,0 30/07/10 06:20:10 CLVCPTB10001 nvoEffectOccup OC_UNOCCUPIED 30/07/10 06:20:10 CLVCPTB10001 nvoSpaceTemp 21.50 30/07/10 06:20:10 CLVCPTB10001 nvoSetptOffset 0.00 30/07/10 06:20:10 CLVCPTB10001 nvoUnitStatus HVAC_COOL,0.000,0.000,163.835,163.835,0.000,0 30/07/10 06:20:10 CLVCPTB10002 nvoEffectOccup OC_UNOCCUPIED 30/07/10 06:20:10 CLVCPTB10002 nvoSpaceTemp 25.63 30/07/10 06:20:10 CLVCPTB10002 nvoSetptOffset 0.00 30/07/10 06:20:10 CLVCPTB10002 nvoUnitStatus HVAC_COOL,0.000,0.000,163.835,163.835,0.000,0 30/07/10 06:40:12 CLVCPTB10001 nvoEffectOccup OC_UNOCCUPIED 30/07/10 06:40:12 CLVCPTB10001 nvoSpaceTemp 21.38 30/07/10 06:40:12 CLVCPTB10001 nvoSetptOffset 0.00 30/07/10 06:40:12 CLVCPTB10001 nvoUnitStatus HVAC_COOL,0.000,0.000,163.835,163.835,0.000,0 30/07/10 06:40:12 CLVCPTB10002 nvoEffectOccup OC_UNOCCUPIED 30/07/10 06:40:12 CLVCPTB10002 nvoSpaceTemp 25.63 30/07/10 06:40:12 CLVCPTB10002 nvoSetptOffset 0.00 30/07/10 06:40:12 CLVCPTB10002 nvoUnitStatus HVAC_COOL,0.000,0.000,163.835,163.835,0.000,0 30/07/10 07:00:05 CLVCPTB10001 nvoEffectOccup OC_UNOCCUPIED 30/07/10 07:00:05 CLVCPTB10001 nvoSpaceTemp 21.38 30/07/10 07:00:05 CLVCPTB10001 nvoSetptOffset 0.00 30/07/10 07:00:05 CLVCPTB10001 nvoUnitStatus HVAC_COOL,0.000,0.000,163.835,163.835,0.000,0 30/07/10 07:00:05 CLVCPTB10002 nvoEffectOccup OC_UNOCCUPIED 30/07/10 07:00:05 CLVCPTB10002 nvoSpaceTemp 25.63 30/07/10 07:00:05 CLVCPTB10002 nvoSetptOffset 0.00 30/07/10 07:00:05 CLVCPTB10002 nvoUnitStatus HVAC_COOL,0.000,0.000,163.835,163.835,0.000,0 30/07/10 07:20:07 CLVCPTB10001 nvoEffectOccup OC_OCCUPIED 30/07/10 07:20:07 CLVCPTB10001 nvoSpaceTemp 23.41 30/07/10 07:20:07 CLVCPTB10001 nvoSetptOffset 0.00 30/07/10 07:20:08 CLVCPTB10001 nvoUnitStatus HVAC_COOL,0.000,0.000,163.835,163.835,33.000,0 30/07/10 07:20:08 CLVCPTB10002 nvoEffectOccup OC_OCCUPIED 30/07/10 07:20:08 CLVCPTB10002 nvoSpaceTemp 24.77 30/07/10 07:20:08 CLVCPTB10002 nvoSetptOffset 1.00 30/07/10 07:20:08 CLVCPTB10002 nvoUnitStatus HVAC_COOL,0.000,0.000,163.835,163.835,33.000,0 30/07/10 07:40:10 CLVCPTB10001 nvoEffectOccup OC_OCCUPIED 30/07/10 07:40:10 CLVCPTB10001 nvoSpaceTemp 23.92 30/07/10 07:40:10 CLVCPTB10001 nvoSetptOffset -3.00 30/07/10 07:40:10 CLVCPTB10001 nvoUnitStatus HVAC_COOL,0.000,0.000,163.835,163.835,33.000,0 30/07/10 07:40:10 CLVCPTB10002 nvoEffectOccup OC_OCCUPIED 30/07/10 07:40:10 CLVCPTB10002 nvoSpaceTemp 24.53 30/07/10 07:40:10 CLVCPTB10002 nvoSetptOffset 2.00 30/07/10 07:40:10 CLVCPTB10002 nvoUnitStatus HVAC_COOL,0.000,0.000,163.835,163.835,33.000,0 je voudrais trié par exemple ces deux paramètre CLVCPTB10001 nvoSpaceTemp 30/07/10 06:00:08 CLVCPTB10001 nvoSpaceTemp 21.62 30/07/10 06:20:10 CLVCPTB10001 nvoSpaceTemp 21.50 30/07/10 06:40:12 CLVCPTB10001 nvoSpaceTemp 21.38 30/07/10 07:00:05 CLVCPTB10001 nvoSpaceTemp 21.38 30/07/10 07:40:10 CLVCPTB10001 nvoSpaceTemp 23.92 Par la suite le but est de faire un graphique de la température en fonction de l'heure de la journée. merci | |||||||||||||||||
Prokopy | #2 Posté le 2/8/2010 à 13:59:00 | ||||||||||||||||
Kinder Pingui | Salut et bienvenue à toi defcom, Je pense avoir trouvé la solution à ton problème, mais il faut le séparer en plusieurs parties : Tout d'abord, il faut ouvrir et parcourir ton fichier. Il faut donc pour commencer déclarer une variable pour ton fichier et une autre pour la ligne actuellement parcourue :
Ensuite, il faut ouvrir ton fichier. J'ai ici supposé que le fichier en question s'appelait Donnees.txt et qu'il était inclus dans le projet :
Puis on parcourt le fichier ligne par ligne dans une boucle :
Ensuite, pour faire le tri, il faut une condition qui permette de détecter si l'on a bien dans la ligne les mots nvoSpaceTemp et CLVCPTB10001. On va le faire grâce à la fonction InStr :
Ensuite, on va créer deux tableaux qui vont contenir respectivement les heures et les températures :
Puis vient le moment de récupérer les dates et les températures dans la ligne. Pour cela, on va se baser sur le fait que la date est écrite dans les 18 premiers caractères de la ligne (oui j'ai compté ). On va donc les récupérer grâce à la fonction Left(), puis les transformer en Date avec la fonction Val() et enfin les ajouter dans le tableau :
Et on fait de même avec les températures :
Et maintenant, on a deux tableaux qui sont prêts à être utilisés pour faire des beaux graphiques. Je remets le code complet :
Voilà, en espérant t'avoir aidé. Si tu as quelque chose que tu ne comprend pas, n'hésite pas à demander. La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand ça marche mais qu'on ne sait pas pourquoi. Quand la théorie rejoint la pratique, rien ne fonctionne et on ne sait pas pourquoi. | ||||||||||||||||
Invité | #3 Posté le 2/8/2010 à 15:02:00 | ||||||||||||||||
merci Prokopy pour cette réponse. j'ai commencé à travailler sur le graphique pour voir ce que cela donne mais j'ai un petit problème de syntaxe pour intégré les tableaux dates et températures [/code] Chart.CountDataSets = 1 Chart.Headers.Values = dates Chart[0].Values =temperatures Chart[0].Text = "courbe 1" Chart.Type = ChartType.LinesStacked Chart.Legend.Visible = TRUE END PUBLIC SUB DrawingArea1_Draw() Chart.Width = DrawingArea1.Width Chart.Height = DrawingArea1.Height 'pour tracer le graphique dans la DrawingArea Chart.Draw END
| |||||||||||||||||
Prokopy | #4 Posté le 2/8/2010 à 15:52:00 | ||||||||||||||||
Kinder Pingui | Ah oui. En fait Chart.Headers.Values attend un tableau de String, pas un tableau de Dates… Mets le tableau dates en un String[], puis vire la fonction Val() et ça devrait aller mieux. En clair :
Pardon pour cette ch'tite étourderie. PS : Si Gambix passe par là, c'est vrai que ce serait bien que les headers puissent être des dates, non ? La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand ça marche mais qu'on ne sait pas pourquoi. Quand la théorie rejoint la pratique, rien ne fonctionne et on ne sait pas pourquoi. | ||||||||||||||||
defcom | #5 Posté le 2/8/2010 à 16:19:00 | ||||||||||||||||
il y a encore une petit problème j'ai éxéxuter le programme pas à pas mais en aucun cas on passe sur les lignes.
on dirait que la condition du dessus est toujours fausse. | |||||||||||||||||
Prokopy | #6 Posté le 2/8/2010 à 16:42:00 | ||||||||||||||||
Kinder Pingui | Ah tiens c'est bizarre, chez moi ça marche parfaitement … Est-ce que les tableaux sont bien remplis à la fin ? Le graphique est bien affiché ? La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand ça marche mais qu'on ne sait pas pourquoi. Quand la théorie rejoint la pratique, rien ne fonctionne et on ne sait pas pourquoi. | ||||||||||||||||
defcom | #7 Posté le 2/8/2010 à 18:37:00 | ||||||||||||||||
non le tableau ne ce rempli pas et la graph plante avec comme message : The values count must be up than 1. j'ai même fait un copier coller du fichier brut cité au début du sujet pour être sur qu'il y a pas de problème de nom de variable. | |||||||||||||||||
Prokopy | #8 Posté le 2/8/2010 à 18:53:00 | ||||||||||||||||
Kinder Pingui | Est-ce que ça marche mieux avec cette condition-là :
Des fois que ce serait un problème de version … La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand ça marche mais qu'on ne sait pas pourquoi. Quand la théorie rejoint la pratique, rien ne fonctionne et on ne sait pas pourquoi. | ||||||||||||||||
defcom | #9 Posté le 2/8/2010 à 18:55:00 | ||||||||||||||||
ca fonctionne. merci | |||||||||||||||||
defcom | #10 Posté le 2/8/2010 à 19:14:00 | ||||||||||||||||
une autre question comme fait on pour afficher les valeurs du tableau comme la température dans un lablel par exemple. j'ai trouvé pour une valeur Label1.Caption = temperatures[1] mais comment fait on pour la série complète. | |||||||||||||||||
Prokopy | #11 Posté le 2/8/2010 à 19:18:00 | ||||||||||||||||
Kinder Pingui | Ben tu fais une boucle qui parcourt le tableau et qui à chaque tour ajoute la valeur au label. Exemple :
Voilà. La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand ça marche mais qu'on ne sait pas pourquoi. Quand la théorie rejoint la pratique, rien ne fonctionne et on ne sait pas pourquoi. | ||||||||||||||||
defcom | #12 Posté le 2/8/2010 à 20:56:00 | ||||||||||||||||
Merci de toutes ces réponses j'ai appris pas mal de chose avec c'est quelque exemple. comment faire pour décomposer la recherche et le chargement du fichier. je désir chargé tout le fichier en premier et par la suite faire le tri cela évite de recharger le fichier à chaque recherche. | |||||||||||||||||
Prokopy | #13 Posté le 2/8/2010 à 22:36:00 | ||||||||||||||||
Kinder Pingui | Excuse-moi mais j'ai du mal à saisir l'intérêt de ce que tu veux faire… car si tu redemandes les données, c'est bien parce que il y a besoin d'une ré-actualisation, et donc d'un nouveau chargement de fichier, non ? La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand ça marche mais qu'on ne sait pas pourquoi. Quand la théorie rejoint la pratique, rien ne fonctionne et on ne sait pas pourquoi. | ||||||||||||||||
manu | #14 Posté le 3/8/2010 à 07:41:00 | ||||||||||||||||
Avec Gambas ca roule ! | Defcom : Le fichier n'est chargé qu'une fois par la ligne suivante :
Puis le tri est fait par la boucle, comme tu le veux. On peu pas faire plus simple.... Prokopy : J'ai vu quelque part que tu souhaitais faire un megatutoriel pour Gambas. Ou en est tu dans ce projet ? Jeanne d'arc, elle a frit, elle a tout compris ! Config : Manjaro linux (excellent !) XFCE 4.1 (simple et efficace) Gambas 3 dans les dépots (confort total) | ||||||||||||||||
defcom | #15 Posté le 3/8/2010 à 08:26:00 | ||||||||||||||||
Voila ce que je veut faire en plus détailler: Dans un répertoire j'ai des dossiers qui ressemble à TB0004 TB0509 TB1014 TB1519 TA0004 TA0509 etc ... par exemple dans le répertoire TB1014 il y a des fichiers qui ressemble à TB1014_03082020_0700.txt TB1014_03082020_0720.txt TB1014_03082020_0740.txt TB1014_03082020_0800.txt etc... l'utilisateur sélectionne une TOUR (exemple TB par intermédiaire de bouton), puis un ETAGE (exemple étage 10 par intermédiaire bouton) ce qui a pour conséquence de pointer dans le répertoire TB1014, Charge le fichier qui on la même nom TB1014 avec la date en cours (03082010). puis j'affiche dans des LABEL les températures qui correspond au fichier le plus récent (exemple 0800) explication sur la variable CLVCPTB10001 CLVCP (fixe ne change jamais), TB (TOUR), 10 (Étage), 001 (Numéro de clim) Donc le premier Label s'appelle Label1 (par exemple) doit afficher la température de la clim CLVCPTB10001 le deuxième Label s'appelle Label2 doit afficher la température de la clim CLVCPTB10002 etc ... Voila en gros mon projet. existe t'il des variables global sur gambas pour définir comme variable TOUR, ETAGE, CLIM. je veut faire une fonction générique avec les paramètre précèdent comme variable. Exemple: SUB chargement (TOUR as string, ETAGE as interger, CLIM as interger) DIM fichier AS File DIM ligne AS String DIM dates AS NEW String[] DIM temperatures AS NEW Float[] DIM decalage AS NEW Float[] DIM i AS Integer DIM TOUR AS String DIM ETAGE AS Integer DIM CLIM AS Integer DIM numero AS String fichier = OPEN "Donnees.txt" FOR INPUT WHILE NOT Eof(fichier) numero = ("CLVCP" & TOUR & ETAGE & Format(CLIM, "000")) LINE INPUT #fichier, ligne IF String.InStr(ligne, "nvoSpaceTemp") > 0 AND String.InStr(ligne, numero) > 0 dates.Add(Left(ligne, 18)) temperatures.Add(CFloat(Right(ligne, 5))) ENDIF WEND d'où ma question sur les variable global. | |||||||||||||||||
123456 |