Récupérer le texte entre ; d'un fichier texte

Fermé
sommaille Messages postés 63 Date d'inscription mardi 21 décembre 2010 Statut Membre Dernière intervention 16 avril 2016 - 12 avril 2016 à 19:43
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 - 13 avril 2016 à 07:20
Bonjour,

Je suis actuellement en train de rédiger un programme en VB (via VB express 2016) et j'aimerai savoir comment récupérer chaque argument d'un fichier texte se trouvant entre les ; et les stocker dans une nouvelle variable chaque ligne à ligne.

Explications :

Fichier texte : Toto;toto@gmail.com;totoVille
Titi;titi@gmail.com;titiVille

J'aimerai envoyer un mail au second argument de la ligne, en remplaçant dans mon texte %nom par le premier argument de la ligne et le %localisation par le dernier argument de la ligne.

Avec l'exemple de la première ligne ça donnerait Bonjour Toto, depuis totoVille et un mail envoyé à l'adresse mail de la ligne, et ce pour n lignes d'un fichier texte.

Je souhaite, en clair, récupérer chaque string entre deux ; ; pour les stocker dans une variable, puis passer à la ligne suivante etc..

Merci :) !
A voir également:

2 réponses

Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 931
Modifié par Whismeril le 12/04/2016 à 20:23
Bonjour

tout d'abord, je te conseille d'utiliser Visual Studio Commuty plutôt que Visual Studio Express, les 2 sont gratuits et Community est plus complet.

Commence par écrire une classe dont chaque champ correspond à une "colonne" de ton csv.

Public Class Donnees
    Public Property Nom() As String

    Public Property Email() As String

    Public Property Lieu() As String

End Class


Il faut maintenant savoir initialiser une instance de cette classe avec les données d'une ligne.
J'ai tendance à "prôner" qu'une classe doit savoir se deserialisée elle -même.

On peut utiliser un constructeur ou une méthode de classe.
Je te montre avec un constructeur
    Public Sub New(Ligne As String)
        Dim donnees As String() = Ligne.Split(";"c) 'split découpe un string en fonction d'un ou plusieur séparateurs
        Nom = donnees(0)
        Email = donnees(1)
        Lieu = donnees(2)
    End Sub


On peut même écrire une propriété qui retournera le corps du message.
    Public ReadOnly Property Corps() As String
        Get
            Return String.Format("Bonjour {0}, de {1}", Nom, Lieu)
        End Get
    End Property


Maintenant que nous savons faire l'import d'une ligne dans une instance d'un objet bien pratique, il faut lire le fichier et créer une collection d'instances de notre classe Donnees

Cette fois, je te propose une méthode de classe.
On va faire une requête Linq sur File.ReadAllLines, cela nécessite l'import de System.IO
    Public Shared Function LireFichier(ByVal Filename As String) As List(Of Donnees)
        Return (
            From ligne In File.ReadAllLines(Filename)
            Select New Donnees(ligne)).ToList()
    End Function



Il ne te reste plus, de l'endroit ou tu veux lire ce fichier qu'à faire
Dim mesDonnees As List(Of Donnees) = Donnees.LireFichier(Chemin)


Quand j'étais petit, la mer Morte n'était que malade.
George Burns
1
sommaille Messages postés 63 Date d'inscription mardi 21 décembre 2010 Statut Membre Dernière intervention 16 avril 2016
12 avril 2016 à 23:11
Bonjour,

Premièrement effectivement j'utilise bel et bien VStudio community :)
Deuxièmement, effectivement je cherche à faire cela sous forme structuré csv mais avec intégration de variable au cas par cas :

Mettre toto dans la variable locale Nom
Mettre toto@gmail.com dans la var locale Email
Mettre totoVille dans la var local Ville

Remplacer %nom, %email et %ville par les champs respectifs dans un textbox multiline; envoyer le mail à 'Email' avec les champs % modifiés, ensuite recommencer, pour chaque ligne du fichier.

En clair : Envoyer un sample identique avec 3 variables qui diffèrent : Nom, Email et Ville, permettant d'envoyer un email avec ces champs personnalisés et un texte qui reste identique.

En tapant le code au dessus de Public class Accueil :

Public Class Donnees
Public Property Nom() As String
Public Property Email() As String
Public Property Lieu() As String
End Class


Ainsi que celui ci dessous dans Public class Accueil :
    
Public Sub New(Ligne As String)
Dim donnees As String() = Ligne.Split(";"c) 'split découpe un string en fonction d'un ou plusieur séparateurs
Nom = donnees(0)
Email = donnees(1)
Lieu = donnees(2)
End Sub

Public Shared Function LireFichier(ByVal Filename As String) As List(Of Donnees)
Return (
From ligne In File.ReadAllLines(Filename)
Select New Donnees(ligne)).ToList()
End Function


j'obtiens sur
Select New Donnees(ligne)).ToList()
une erreur sur 'ligne' avec comme explications : Too many arguments to 'Public Sub New()'

Quant à Nom, Email et Lieu, ils sont dit comme non défini, ce qui est le cas, je dois les définir en tant que Public au préalable, en tant que string ?


Merci de votre soutien,

Amicalement,
0
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 931
13 avril 2016 à 07:20
Bonjour

je t'ai écrit de créer une classe, pas d'essayer de l'imbriquer dans une classe existante.

Je te conseille de suivre ce cours https://plasserre.developpez.com/cours/vb-net/ avant de te remettre à ton projet.
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728
12 avril 2016 à 19:57
0
sommaille Messages postés 63 Date d'inscription mardi 21 décembre 2010 Statut Membre Dernière intervention 16 avril 2016
12 avril 2016 à 20:01
Merci pour 'string split', c'est le mot clé que je recherchais. Un grand merci, bonne soirée à vous.

Amicalement,
0