Récupération d'infos dans un fichier texte.

Fermé
DevMicrop - 28 janv. 2014 à 12:08
Kalissi Messages postés 218 Date d'inscription jeudi 2 mai 2013 Statut Membre Dernière intervention 15 juillet 2019 - 3 févr. 2014 à 22:30
Bonjour,

Je suis sur un projet de recuperation de données dans un fichier texte pour en copier une partie et l'enregistrer dans un fichier au format CSV



Et je voudrais que mon programme puisse recuperer des infos par exemple :



Maison;ruenoble;agence2000;174000
Maison;ruenoble;agence524;174000
Maison;ruecab;agence2000;174000
Maison;ruecoup;agence4;174000


Il ne regarderais que la 3e informations. et si c'est le mot "agence2000" il copie cette ligne et la colle dans un nouveau fichier (J'utiliserais Streamreader et StreamWriter ce n'est pas un probleme.)

Je en sais juste pas si il faut Utiliser un split? pour qu'il puisse ne lire que le 3e mot.
(Je ne sais pas utiliser Split donc si c'est de ca que j'ai besoin, je voudrais que vous m'expliquiez comment l'utiliser avec un exemple de code par exemple?)



avant qu'il copie colle.

Je voudrais aussi qu'il recupere tout les mot different qu'il pourait y avoir dans cette colonne (le3e mot de de chaque ligne ligne) et qu'il me creer un bouton check dans ma checkbox avec ces noms.)

(histoire de pouvoir choisir les quelles de ses agences je veux copier.)

J'espere ne pas déranger,
Merci d'avance !


Codialement !




A voir également:

6 réponses

Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
28 janv. 2014 à 17:08
Salut,

La fonction Split() récupère dans un tableau les éléments d'une chaîne de caractères délimités par un séparateur. Dans ton cas c'est ";".

Dim mTab()

        mTab = Split(sr, ";")

        MsgBox(mTab(2))


sr est la ligne récupérée par le StreamReader.
Le tableau généré par la fonction Split() a pour 1er index 0. Dans ton cas le tableau retourné par Split() aura cette forme pour la première ligne de ton exemple:

mtab(0) -> Maison
mtab(1) -> ruenoble
mtab(2) -> agence2000
mtab(3) -> 174000

Bonne continuation et bon courage

;0)
1
Kalissi Messages postés 218 Date d'inscription jeudi 2 mai 2013 Statut Membre Dernière intervention 15 juillet 2019 20
Modifié par Kalissi le 1/02/2014 à 00:56
Bonjour,

Avec tout le respect qui t'es du et ce sans préjudice, cette façon de faire
est plutôt selon la nomenclature de VB6

Sous Vb.Net, on devrait plutôt écrire :

mtab = sr.Split(";"c)


variable = objet.méthode

K
0
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
1 févr. 2014 à 03:12
Oui c'est une façon de faire.

Mais la méthode que j'ai donné fonctionne également en VB.Net.

;0)
0
flomine Messages postés 274 Date d'inscription vendredi 2 janvier 2009 Statut Membre Dernière intervention 4 décembre 2017 126
1 févr. 2014 à 14:12
Ou pas ! Non cela produit une erreur
0
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
1 févr. 2014 à 14:29
Je suis sous VB 2010 et ce test fonctionne ...

        Dim mTab()
        Dim machaine As String = "Maison;ruenoble;agence2000;174000"

        mTab = Split(machaine, ";")


        MsgBox(mTab(2))


T'assures-tu que ton StreamReader n'est pas vide avant de l'envoyer à la fonction Split() ?
0
Kalissi Messages postés 218 Date d'inscription jeudi 2 mai 2013 Statut Membre Dernière intervention 15 juillet 2019 20
Modifié par Kalissi le 3/02/2014 à 22:57
Bonjour,

À ma grande surprise, je confirme que ta syntaxe fonctionne aussi chez moi sous VB2010.

Je croyais que tu avais chargé des DLLs de rétrocompatibilité pour que ça fonctionne, mais
non j'ai testé sans ces DLLs et j'obtiens aussi le même résultat avec l'une ou l'autre des deux
syntaxes.

Étrangement, au bureau l'instruction "IsNumeric" et "MsgBox", n'est plus reconnu sous VB.2010,
avec des classes d'héritage que je n'ai pas conçu, alors je ne puis te dire quelles librairies
ils ont utilisé, puisque ma classe est construite de façon automatique avec un héritage de base.

Par contre, ici à la maison, ça fonctionne ???

Selon Microsoft, on pourrait croire que non, mais !!!
https://docs.microsoft.com/en-us/previous-versions/visualstudio/visual-studio-2008/6cd3f6w1(v=vs.90)?redirectedfrom=MSDN

Néanmoins, je continue de suivre la syntaxe de la Programmation Orientée Objet (POO),
que j'ai apprise avec le livre de :

Deitel et Deitel
Introduction à la conception Orientée Objets avec l'UML.
Troisième Édition
Version française de Deitel & Deitel
Copyright 2001,1998,1994 par Prentice-Hall Inc.
Publié avec l'accord de Prentice Hall Inc., une division de Pearson Education


variable = objet.méthode(paramètre(s))

Je me dis que la pérennité de mon code est plus fiable avec cette syntaxe.

Edit:

J'ai oublié de dire que mon test à été réalisé sous l'OS de Windows XP et
qu' au bureau je code sous l'OS de Windows Serveur 2008.

Je suis en train de virtualiser Windows Vista, le comportement pourrait être
différent selon l'OS. Je me suis laisser dire que Windows 8 inclus son propre
Framework. Mais je n'en suis pas encore là, quand j'aurai fini de virtualisé
Windows Vista, je passerai à Windows 7 et j'essaierai peut-être Windows 8.

Mon OS de base est Linux Open Suse 12.2.

:-)

K
0
Kalissi Messages postés 218 Date d'inscription jeudi 2 mai 2013 Statut Membre Dernière intervention 15 juillet 2019 20
Modifié par Kalissi le 1/02/2014 à 00:48
Bonjour,

Exemple :


Private Sub btn_LireFichier_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_LireFichier.Click

' Déterminer le chemin du répertoire
Dim Chemin As String = Application.ExecutablePath
Dim Position As Int32 = Chemin.LastIndexOf("\")
Dim Dossier As String = Chemin.Substring(0, (Position + 1))

' Variable de travail
Dim Chaine As String = String.Empty
Dim ChaineSplit() As String
Dim Valeur As String = String.Empty

Dim LeResultat As System.IO.StreamWriter = System.IO.File.AppendText(String.Concat(Dossier , "resultat.txt"))
Dim LeFichier As System.IO.StreamReader = System.IO.File.OpenText(String.Concat(Dossier , "sommaire.txt"))

Do Until LeFichier.Peek = -1
Chaine = LeFichier.ReadLine
ChaineSplit = Chaine.Split(";"c)
Valeur = ChaineSplit(2)
If (Valeur.Equals("agence2000")) Then
LeResultat.WriteLine(Chaine)
End If
Loop

LeFichier.Close()
LeResultat.Close()

End Sub


n..b. Il est possible de faire un import en début de classe

Imports System.IO

' Le code devient

'n.b. Pour utiliser l'instruction File.AppendText, le fichier doit exister,
' sinon il faut le créer.

Dim LeResultat As StreamWriter = File.AppendText(String.Concat(Dossier , "resultat.txt"))
Dim LeFichier As StreamReader = File.OpenText(String.Concat(Dossier , "sommaire.txt"))



K
1
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
28 janv. 2014 à 12:38
@flomine

Depuis quand Split() génère un tableau à 2 dimensions ?
0
Je tiens a préciser que je code en VB.net.
:)

0

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

Posez votre question
Un grand merci toi Polux !
Plus qu'a savoir comment creer automatiquement une case a cocher (checkbox) quand une condition est remplis (En indiquant le nom qui doit apparaitre a coté..)
0
flomine Messages postés 274 Date d'inscription vendredi 2 janvier 2009 Statut Membre Dernière intervention 4 décembre 2017 126
28 janv. 2014 à 12:15
Le fonction split génère un tableau en deux dimensions à partir d'une variable. Un exemple:
Dim Séparer() as string

Split (Séparer, ";")


Puis pour récupérer la valeur, simplement Split (n°delachaine) par exemple pour la 1ère ligne ce sera Split (2).
-1