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

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

heeeeeeeeeeeeeeeeeelp

27 réponses

Utilisateur anonyme
28 mai 2007 à 22:03
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
3
Utilisateur anonyme
28 mai 2007 à 22:26
Pour le & dans les label, il faut passer sa propriété UseMnemonic à False.
Autrement, la lettre derrière un & est soulignée.





__________
 Kenji
3
jmfmarques Messages postés 7668 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 28
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.
0
jmfmarques Messages postés 7668 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 28
28 mai 2007 à 20:49
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 !!!
0

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

Posez votre question
OneHacker Messages postés 1447 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 23 septembre 2007 2
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

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

Redman
0
jmfmarques Messages postés 7668 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 28
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 ...
0
OneHacker Messages postés 1447 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 23 septembre 2007 2
28 mai 2007 à 21:36
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
0
Tyrell2 Messages postés 251 Date d'inscription samedi 19 novembre 2005 Statut Membre Derniè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))

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

Redman
0
jmfmarques Messages postés 7668 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 28
28 mai 2007 à 21:50
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...)
0
OneHacker Messages postés 1447 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 23 septembre 2007 2
28 mai 2007 à 21:57
Si ca laisse le caractère d'éclatement.

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

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

Redman
0
jmfmarques Messages postés 7668 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 28
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...)
0
OneHacker Messages postés 1447 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 23 septembre 2007 2
28 mai 2007 à 22:12
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
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
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.

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

Redman
0