[VB2005] J'en ai marre d'etre une quiche !

Résolu
Signaler
Messages postés
251
Date d'inscription
samedi 19 novembre 2005
Statut
Membre
Dernière intervention
2 novembre 2010
-
Messages postés
1447
Date d'inscription
jeudi 2 novembre 2000
Statut
Membre
Dernière intervention
23 septembre 2007
-
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....

heeeeeeeeeeeeeeeeeelp

27 réponses

Messages postés
3172
Date d'inscription
dimanche 15 février 2004
Statut
Membre
Dernière intervention
9 avril 2017
35
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





__________
 Kenji
Messages postés
3172
Date d'inscription
dimanche 15 février 2004
Statut
Membre
Dernière intervention
9 avril 2017
35
Pour le & dans les label, il faut passer sa propriété UseMnemonic à False.
Autrement, la lettre derrière un & est soulignée.





__________
 Kenji
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
27
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.
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
27
Euh... tu permets ?...

J'observe que la réponse que Casy t'a donnée là :
http://www.vbfrance.com/infomsg_AMELIORER-RECUP-CONTENU-FICHIER-TEXTE-DANS-LISTBOX_931629.aspx
est celle de ton problème actuel, à la seule miniscule différence près qu'au lieu d'ajouter dans une listbox le contenu des lignes lues successivement, tu en fais le caption de labels successufs !!!
Messages postés
1447
Date d'inscription
jeudi 2 novembre 2000
Statut
Membre
Dernière intervention
23 septembre 2007
2
        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

Redman
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
27
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 ?
Messages postés
1447
Date d'inscription
jeudi 2 novembre 2000
Statut
Membre
Dernière intervention
23 septembre 2007
2
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.

Redman
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
27
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 ...
Messages postés
1447
Date d'inscription
jeudi 2 novembre 2000
Statut
Membre
Dernière intervention
23 septembre 2007
2
Non c'est normal. Et j'en suis sûr, ca fait quand même des années que je programme en VB.Net !

Redman
Messages postés
251
Date d'inscription
samedi 19 novembre 2005
Statut
Membre
Dernière intervention
2 novembre 2010

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))

je vais me pencher sur vos proposition !
 
Messages postés
1447
Date d'inscription
jeudi 2 novembre 2000
Statut
Membre
Dernière intervention
23 septembre 2007
2
Ca sert à rien la listbox cachée avec ce que je t'ai donné c'est plus simple.

Redman
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
27
Lis malgré out ceci, OneHacker, que cela fasse ou non des années que tu programmes sous VB.NET

http://www.pise.info/vb-net/14%20fichiers%20textes.htm

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...)
Messages postés
1447
Date d'inscription
jeudi 2 novembre 2000
Statut
Membre
Dernière intervention
23 septembre 2007
2
Si ca laisse le caractère d'éclatement.

Redman
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
41
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 )

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #    http://aide-office-vba.monforum.com/index.php
Messages postés
1447
Date d'inscription
jeudi 2 novembre 2000
Statut
Membre
Dernière intervention
23 septembre 2007
2
Excuse moi je l'ai déjà fait ! Et ca m'a mis des sut de lignes.

Redman
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
27
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...)
Messages postés
1447
Date d'inscription
jeudi 2 novembre 2000
Statut
Membre
Dernière intervention
23 septembre 2007
2
En effet donc voilà le code :

Dim text As String = "a" & NewLine & "b" & NewLine & "c"

        Dim textlignes(text.Split(vbCrLf).Length) As String
        textlignes = text.Split(vbCrLf)
        MsgBox(textlignes(0) & textlignes(1) & textlignes(2))

et vous verrez bien que ca enlève pas les lignes.

Redman
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
41
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.

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #    http://aide-office-vba.monforum.com/index.php
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
27
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é ?
Messages postés
1447
Date d'inscription
jeudi 2 novembre 2000
Statut
Membre
Dernière intervention
23 septembre 2007
2
Je suis bien réveillée et saches que NewLine ou VBCrlf c'est pareil c'est : chr(10)&chr(13)

Redman