Récupérer ligne textbox

cs_dam94 Messages postés 59 Date d'inscription mercredi 28 avril 2004 Statut Membre Dernière intervention 14 juin 2004 - 30 avril 2004 à 10:13
cs_nihaoma Messages postés 140 Date d'inscription jeudi 2 mai 2002 Statut Membre Dernière intervention 2 février 2010 - 21 sept. 2004 à 18:43
Bonjour,

Est ce que quelqu'un pourrai m'aider à récupérer des caractères d'une textbox ligne par ligne.

C'est à dire que j'ai un fichier texte que j'envoie dans une textbox (le nombre de ligne est aléatoire par contre la syntaxe est toujours la même) :

<nombre>secondes(Tabulation)<nombre>°C
....

Si vous pouvez m'aider, et m'expliquer.
Merci

DAMIEN

16 réponses

cs_liquide Messages postés 1016 Date d'inscription samedi 22 mars 2003 Statut Membre Dernière intervention 24 juin 2008
30 avril 2004 à 10:48
*****en entete avec eventuellement Option explicit
dim split2() as string
dim Tableau () as string
dim compte as integer
redim tableau(0)
******
Open "config.txt" For Input As #2
Do While Not EOF(2)
Line Input #2, s

tableau(compte) = s
compte = compte + 1
redim preserve tableau(compte)

Split2() = Split(s, vbtab)
..... traitement du split2() ici puisque au bouclage il sera remplacer
VariableCompteur = Ubound(split2()) 'permet de recuperer le nb de split maxi , c'est la plus grande valeur du tableau
Loop
Close #2
redim preserve tableau(compte-1)


traduction a la liquide (si je me plante vous pouvez toujours rectifier ce que j'ai cru comprendre de ce que je code) :

split1() est un tableau qui sera utiliser avec le split
le split est une fonction qui permet de séparer des données avec un "intervalle" identique par ex : VBTAB
open : ouvre le fichier...... for input : pour lecture.... et met dans la variable : #2
do while not eof : tant qu'il n'est pas a la fin (EOF : End of File) de la variable 2
Line input : lit par ligne dans #2 et le "loge" dans la variable "s"

puis il y a l'utilisation de tableau dynamique, tableau() avec le redim qui permet de dimensionner le tableau avant de mettre une valeur : tableau(compte) = s puis on increment la valeur de : compte, puis on redimmensionne le tableau sans perdre une donnée : redim preserve puis apres comme le tableau s'est incrementé d'un valeur mais n'a rien pris , on le redim avec une valeur inferieur de "-1"

si c'estpas clair je veux bien detailler plus .. mais plus tard
j'espere que ca pourra t'aider

bonne prog

liquide
0
HFanny Messages postés 699 Date d'inscription mercredi 19 février 2003 Statut Membre Dernière intervention 13 mai 2011 20
30 avril 2004 à 10:48
Bonjour,

comme je te l'avais déjà écrit sur un autre post >:)
Tu récupères dans une variable le contenu de ta textbox (enfin, une ligne de ta textbox et tu fais une boucle pour traiter ligne par ligne).
Le plus simple, c'est de faire une boucle directement sur ton fichier (en incrémentant un compteur pour après).
Ensuite tu sépares (par la fonction split) les mots de ta ligne dans un tableau (comme la syntaxe et toujours la même, tu sais où chaque mot est positionné).
Tu remplaces pour le premier mot du tableau précédemment créé la chaine "secondes" par "", idem pour le second mot du tableau "°C" par "".
Et tu mets les résultats obtenus (que tu convertis en Integer pour pouvoir les réutiliser pour la création de ton graphe) dans un tableau d'Integer (ici j'ai mis comme dimension pour ton tableau 100).

A la fin, tu fais une boucle de 0 jusqu'à ton compteur - 1, et à chaque tour tu copies tes données où tu veux pour pouvoir les utiliser ultérieurement pour ton graphe.

'déclaration des variables
Dim objetfile, fichier
Dim tableauSecondes(100) As Integer
Dim tableauDegres(100) As Integer
Dim tabMots() As String
Dim cpt, i As IntegerConst ForReading 1, ForWriting 2, ForAppending = 3

'ouverture du fichier
Set objetfile = CreateObject("Scripting.FileSystemObject")
Set fichier = objetfile.OpenTextFile("C:\mesure.txt", ForReading)

cpt = 0

'boucle sur le fichier pour remplir les tableaux
Do While fichier.AtEndOfStream <> True
   'séparation des mots de la ligne lue dans un tableau
   tabMots() = Split(fichier.ReadLine)
   'récupération de la valeur des secondes
   tableauSecondes(cpt) = CInt(Replace(tabMots(0), "secondes", ""))
    'récupération de la valeur des degrès
   tableauDegres(cpt) = CInt(Replace(tabMots(1), "°C", ""))
   'incrémentation du compteur (permettant à pouvoir relire les tableaux
   cpt = cpt + 1
Loop
'fermeture du fichier
fichier.Close

'affichage dans une msgbox de toutes les valeurs
For i = 0 To cpt - 1
    MsgBox ("Premieres valeurs : " & tableauSecondes(i) & " sec, " & tableauDegres(i) & " °C")
Next i


En espérant avoir été claire cette fois ci,

Fanny
0
cs_dam94 Messages postés 59 Date d'inscription mercredi 28 avril 2004 Statut Membre Dernière intervention 14 juin 2004
30 avril 2004 à 11:09
je doi mettre ce programme dans ma textbox qui affiche le texte?
Sinon j'ai une erreur "13", Type incompatible
0
HFanny Messages postés 699 Date d'inscription mercredi 19 février 2003 Statut Membre Dernière intervention 13 mai 2011 20
30 avril 2004 à 11:34
Pour mon code, il suffit que tu crées un bouton de commande et de mettre ce code dedans (sur l'évènement on_click.
Au fait n'oublies pas de changer le chemin du fichier.

Et s'il y a des choses que tu ne comprends pas, dis le.
Je pense qu'on est tous prêt à t'expliquer.

Fanny
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_dam94 Messages postés 59 Date d'inscription mercredi 28 avril 2004 Statut Membre Dernière intervention 14 juin 2004
30 avril 2004 à 11:42
ca ne fonctionne pas, je ne comprends pas !
0
HFanny Messages postés 699 Date d'inscription mercredi 19 février 2003 Statut Membre Dernière intervention 13 mai 2011 20
30 avril 2004 à 11:56
Pour quel code ? celui de liquide ou le mien ?

Quelle est l'erreur ?

Fanny
0
cs_dam94 Messages postés 59 Date d'inscription mercredi 28 avril 2004 Statut Membre Dernière intervention 14 juin 2004
30 avril 2004 à 11:58
Mais en fait je ne veux pas de bouton de commande. Sinno je ne comprends pas pourquoi je dois aller chercher le fichier. Pour le moment, j'ai une textbox ou j'affiche le chemin puis je valide et le text s'affiche dans mon autre textbox. Tu connai la syntaxe de ce texte et je veux donc récupérer les valeurs, en les stockant dans un tableau dynamique j'imagine. Je peux éventuellement ajouté une textbox pour les afficher pour vérifier que ce sont bien les bonnes valeurs.
0
HFanny Messages postés 699 Date d'inscription mercredi 19 février 2003 Statut Membre Dernière intervention 13 mai 2011 20
30 avril 2004 à 13:00
En gros, tout ce que je voulais t'expliquer en te faisant ajouter un bouton, c'est que le code allait fonctionner.
Je ne t'ai pas non plus fait exactement le code que tu souhaites mais juste quelque chose à partir duquel tu peux t'inspirer !
Le bouton c'était juste pour provoquer l'évènement, c'est tout, tu n'es pas obligé de le mettre.
C'est juste que le code doit bien être appelé par une action.

Tu peux le mettre après avoir rempli ton textbox, mais là, mon code ouvre directement le fichier et remplit le tableau à partir du fichier (je ne vois pas ce que ça change).

J'ai fait cela car comme tu as plusieurs lignes à récupérer dans ta textBox (et que je ne sais pas comment parcourir les lignes d'une textBox), j'ai trouvé plus pratique de parcourir les valeurs directement à partir du fichier.
(En fait, je voulais juste te simplifier le code).

De plus, je rempli bien un tableau dynamique (en l'occurence 2 tableaux, un pour les secondes et l'autre pour les degrés), et la MsgBox est juste là pour que tu puisses constater que mon code fonctionne.

Il faut que de toi même tu le mettes à ta sauce (liquide et moi n'avont fait que te donner une idée de la façon dont tu peux t'en sortir).

Je récapitule :

* tu récupères 1 à 1 les lignes du fichier (avec une boucle et un compteur qui s'incrémente)
* pour chacune d'elle, tu sépares les mots de la ligne
* tu récupères le premier mot auquel tu remplaces "secondes" par "", tu mets cette valeur dans ton tableau de secondes (à l'indice du compteur)
* tu récupères le second mot auquel tu remplaces "°C" par "", tu mets cette valeur dans ton tableau de degrès (à l'indice du compteur)

Enfin, tu te sers des valeurs des tableaux créés pour faire ce que tu souhaites avec.

Je ne vois pas quoi te dire de plus, (surtout que j'ai quand même passé du temps à t'écrire le code intégralement et non pas des bouts), donc si je n'ai toujours pas réussi à me faire comprendre ...

Fanny
0
cs_dam94 Messages postés 59 Date d'inscription mercredi 28 avril 2004 Statut Membre Dernière intervention 14 juin 2004
30 avril 2004 à 13:09
Je te remercie. Je vais essayer de faire avec, c'est vrai que j'ai beaucoup d'élément maintenant. Mais je suis désolé car je débute vraiment en VB et ce que j'ai à réaliser me paraît vraiment très difficile c'est pour ça!
0
cs_dam94 Messages postés 59 Date d'inscription mercredi 28 avril 2004 Statut Membre Dernière intervention 14 juin 2004
30 avril 2004 à 14:09
Mais il y a un problème dans le code :

tableauSecondes(cpt) = CInt(Replace(tabMots(0), "secondes", ""))

Il me met type incompatible. Aurais-tu une solution à me proposer s'il te plaît?
0
HFanny Messages postés 699 Date d'inscription mercredi 19 février 2003 Statut Membre Dernière intervention 13 mai 2011 20
30 avril 2004 à 14:21
Est ce que ton tableau de seconde est bien de type integer ??

Dim tableauSecondes (100) As Integer

Fanny
0
cs_dam94 Messages postés 59 Date d'inscription mercredi 28 avril 2004 Statut Membre Dernière intervention 14 juin 2004
30 avril 2004 à 14:39
oui
0
HFanny Messages postés 699 Date d'inscription mercredi 19 février 2003 Statut Membre Dernière intervention 13 mai 2011 20
30 avril 2004 à 15:23
Donc je ne vois pas car si :
tableauSecondes est en integer
tabMots est en String
cpt en integer

alors tu devrais pouvoir mettre
la conversion du String en Integer --> CInt(Replace(...))
dans un Integer --> tableauSecondes

C'est bizarre parce que je n'ai pas eu cette erreur là.

C'est sans doute parce qu'il ne peut pas convertir la chaine de caractère en entier.
Explication :
La fonction Replace renvoie un String, donc je met la méthode CInt pour convertir ce String en Integer.
Mais si ce n'est pas un numérique comme chaine de caractères, alors il ne peut pas effectuer de conversion (il me semble).

Pour voir ce qui ne va pas (peut etre que les mots sont mal séparés par rapport à ta syntaxe), mets un point d'arret au niveau de ta boucle, lances ton programme, et ensuite fais F8 pour une exécution pas à pas.

Ainsi, tu pourras voir les valeurs que prennent les différentes variables au cours de l'exécution du programme (avant le bug) en mettant simplement ta souris dessus (ça fonctionne comme des infos-bulles).
Regarde bien à chaque ligne toutes les valeurs.

Normalement, tu devrais pouvoir débugguer de la sorte.

Fanny
0
cs_liquide Messages postés 1016 Date d'inscription samedi 22 mars 2003 Statut Membre Dernière intervention 24 juin 2008
30 avril 2004 à 18:46
petite question, si tu n'y es pas arrivé :

est ce que ton code peut se lancer au moment du demarrage en meme temps que tu charges ton fichier dans ta textbox, c'est à dire dans le form_Load ?

puis si toujours tu n'y es pas arrivé, je veux bien te faire un code (enfin essayer) en fonction de ton besoin et de tes critères, mais il faudrait qu'ils soient bien détaillés, comme par exemple, l'interet d'avoir une textbox, quelle methode te permet de recuperer telle ou telle ligne pour en tirer les valeurs, est ce que tu lui donne un numéro de ligne pour retrouver les valeurs, en gros comment tu geres la récupération des valeurs et sur quelle demande (soit un numéro de ligne ou soit tout d'un seul coup)? si tu peux recuperer les valeurs a partir de ton fichier direct ou tu dois absolument passer par la textbox etc etc

liquide
0
cs_dam94 Messages postés 59 Date d'inscription mercredi 28 avril 2004 Statut Membre Dernière intervention 14 juin 2004
1 mai 2004 à 12:54
Merci de ton aide mais j'ai finalement réussi à récupérer mes données.
0
cs_nihaoma Messages postés 140 Date d'inscription jeudi 2 mai 2002 Statut Membre Dernière intervention 2 février 2010
21 sept. 2004 à 18:43
Salut à tous,

j'ai un petit probleme pas tout à fait similaire, mais qui pourrait etre résolu par votre technique, sauf que c un peu lourd, alors si vous avez des idées, merci de m'en faire part...
je vous explique...
je suis en train de coder (on peut espérer lol) un logiciel style Outlook, je sais comment faire pour envoyer et recevoir des messages, ca y'a pas de soucis, mon problème actuel, c'est que lorsque je POP un message, il est bien sur envoyer avec son entete MIME ou non, mais de toutes facons y'a des infos essentielles à récupérer dedans (expéditeur, sujet, date, etc...)
pour récupérer ces infos, j'ai pour le moment coder des petites boucles qui via la fonction InStr() cherche un mot clé (par exemple "From:") puis quand il l'a trouver, passe le string caractère par caractère pour me trouver la fin de la ligne pour enfin pouvoir enregistrer l'info (en l(occurence, l'email de l'expediteur), pour ce faire, j'utilise la fontion mid() et je test si le caractère est égal ) CHR(13), ca fonctionne très bien danc certain cas, mais pas dans d'autre et je ne comprends pas pourquoi...
(pourtant quand je regarde la source du message, y'a bien un retour chariot, mais mon code ne semble pas le détecter)
alors je me suis dis que je pourais peut etre "lire" ma chaine de caractère ligne par ligne ce qui serait bcp plus simple, et c'est la que j'ai besoin de vous...comment faire pour lire une chaine de caractère ou un textbox ligne par ligne ? suis-je obligé a chaque fois d'enregistrer le contenu de mon textbox dans un fichier temp sur le disque afin de pouvoir le lire ligne par ligne ?
merci de votre aide

coding as well
0
Rejoignez-nous