Tyrell2
Messages postés251Date d'inscriptionsamedi 19 novembre 2005StatutMembreDernière intervention 2 novembre 2010
-
28 mai 2007 à 19:48
OneHacker
Messages postés1447Date d'inscriptionjeudi 2 novembre 2000StatutMembreDernière intervention23 septembre 2007
-
28 mai 2007 à 22:32
Bon bin me revoila avec une question à la con...
ça concerne la lecture de fichiers texte . Pas la lecture en elle meme qui est facile avec le streameader
(rien qu'ici il ya des tas d'exemples)
mais la lecture triées de lignes, et là je fini par poster ici vu que je trouve rien qui m'aide sur le web :
par exemple : une form avec 4 labels
et remplissage des labels en fonction du fichier texte,
sauf que je ne veux pas lecture ligne par ligne. mais plutot genre label1 .text = ligne 2 du fichiers txt
label2 = ligne 4, etc....
OneHacker, je pense que tu t'est légerment trompé dans ton code vu que tu ne remplis pas le tableau
Le bon code est celui-ci :
Dim sr As New System.IO.StreamReader("fichier")
Dim text As String = sr.ReadToEnd()
sr.Close()
Dim textlignes() As String = text.Split(New String() {System.Environment.NewLine}, System.StringSplitOptions.None)
label2.text = textlignes(2) ' textlignes(2) la ligne 2 du texte ,
----
(Coloration syntaxique automatique par Kenji)
Je confire comme les autres, split supprime le délimiteur
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 28 mai 2007 à 20:44
Bonjour,
Si tu n'as que quellques labels, c'est facile à gérer...
Si tu en as beaucoup plus, il va te falloir apprendre à gérer l'équivalent de groupes de controles de VB6 sous VB.net.
quoiqu'il en soit :
Rien ne t'empêche (exemples sur ce forum) de lire la totalité de ton fichier d'un seul coup dans une variable, puis d'éclater celle-ci sur vbcrlf ===>> tu obtiendras ainsi un tableau et il te suffira alors d'affecter au caption des labels successifs par une boucle de 0 jusqu'à la fin (ubound) de ton tableau, les valeurs de chacun de ses éléments.
Tout celà me parait fort simple, ma foi...pour peu que l'on se penche, et dans cet ordre :
1) vers la lecture d'un seul bloc, du contenu du fichier texte
2) sur l'utilisation de Split
3) sur l'utilisation d'une boucle For X = 0 to ubound(tableau résultat du split) pour y lire chacun des éléments du tableaux, un derrière l'autre.
Autre méthode :
Tu lis ton fichier texte ligne par ligne (exemples également nimbreux sur ce forum) et, à chaque ligne lue, tu affectes directement son contenu à tes labels, dans l'ordre que tu définis.
OneHacker
Messages postés1447Date d'inscriptionjeudi 2 novembre 2000StatutMembreDernière intervention23 septembre 20072 28 mai 2007 à 21:01
Dim sr As New IO.StreamReader("fichier")
Dim text As String = sr.ReadToEnd
sr.Close()
Dim textlignes(text.Split(vbCrLf).Length) As String
For Each ligne As String In textlignes
ligne.Trim(vbCrLf.ToCharArray) ' Nettoie le saut de ligne de chaque ligne
Next
label2.text = textlignes(2) ' textlignes(2) la ligne 2 du texte
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 28 mai 2007 à 21:18
Salut OneHackjer,
Je ne connais pas VB.Net, mais me demande à quoi pourrait correspondre la nécessite de ce "nttoyage" alors qu'on a "éclaté" précisément sur VBCRLF ...
Tu peux expliquer ?
OneHacker
Messages postés1447Date d'inscriptionjeudi 2 novembre 2000StatutMembreDernière intervention23 septembre 20072 28 mai 2007 à 21:23
qu'est-ce que tu veux dire par "éclaté" ? C'est à dire que la fonction Split n'enlève pas la valeur VBCRLF de chaque valeur du tableau par ex si tu met la ligne de avant le texte ca va te faire un saut de ligne qui n'est pas forcément voulu.
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 28 mai 2007 à 21:34
T'es certain ?
Tu as vérifié ?
tu pourrais à mon sens avoir une ligne vide (entre 2 vbcrlf) dans le tableau résultant de l'éclatement (split), mais je vois mal comment tu pourrais avoir un VBCRLF dans les éléments du tableau !....
A moins que VB.Net n'ai des réactions bizarres ...
Tyrell2
Messages postés251Date d'inscriptionsamedi 19 novembre 2005StatutMembreDernière intervention 2 novembre 2010 28 mai 2007 à 21:38
Merci pour votre aide
entre temps je suis passé par un "grosse bidouille " (vous allez me traiter d'heretic...) :
j'ai rempli une listbox (cachée) par mon streamreader du texte
et j'ai fait labelx.text = listbox1.items.item(ligne qui m'interesse)
ça marche bien dans la mesure ou mes fichiers textes sont formatés à l'identique
mais j'ai bien conscience du coté "bricolage" du truc (on peut le faire ? oui on peut ! (private joke))
Tu y verras que le caractère d'éclatement par le split (un / dans l'exemple), ne se retrouve certes pas dans les éléments du tableau généré par le split ...(le contraire m'eût laissé fort perplexe...)
cs_casy
Messages postés7741Date d'inscriptionmercredi 1 septembre 2004StatutMembreDernière intervention24 septembre 201440 28 mai 2007 à 21:57
Je confirme que dans une instruction Split, le délimiteur n'est pas inclu dans le tableau retourné, il est purement et simplement supprimer de la chaine de caractères.
Et ceci sous VB2005, VB.Net 2003, comme sous VB6. Mais pas sous VB5 (Split n'existe pas sous VB5 )
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 28 mai 2007 à 22:00
Bonsoir Casy,
Tu me rassures, là ...
Les affirmations de OneHacker m'avaient rendu plutôt perplexe... même si (je travaille avec VB5) je n'utilise jamais Split (mais quand même : on peut savoir sans avoir ce que d'autres appremment ont et ne savent pas...)
cs_casy
Messages postés7741Date d'inscriptionmercredi 1 septembre 2004StatutMembreDernière intervention24 septembre 201440 28 mai 2007 à 22:17
Après vérification, si on utilise la methode Split de la chaine à découper, il existe effectivement un effet de bord si le découpage se fait sur vbNewLine ou sur vbCrLf. En effet cette methode ne prend en charge que un caractère pour le séparateur or vbCrLf correspond à 2 caractères. Le découpage se fera sur vbCr et vbLF restera en début des chaines découpées dans le tableau.
Dans ce cas precis, il vaut mieux passer par la méthode Split du Namespace Strings, qui elle permet de définir le mode de comparaison et donc notamment le découpage sur une chaine et non pas un seul caractère.
Dans les 2 cas le séparateur n'est pas conservé, c'est juste que dans le cas particulier du vbCrLF ou le vbLf est finalement interprété comme un suat de ligne à la relecture du tableau.
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 28 mai 2007 à 22:17
Ah çà, ma foi, OneHacker, c'est plutôt fort du café !!!
Dans la variable à éclater tu mets des NewLines... et tu fais ton Split sur autre chose (VBCRLF) !!!!!!!!!
Tu es sur que tu es bien réveillé ?