IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

[2003] comparaison dans un fichier texte


Sujet :

VB.NET

  1. #1
    Membre habitué Avatar de souaddemaroc
    Inscrit en
    Novembre 2005
    Messages
    194
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 194
    Points : 143
    Points
    143
    Par défaut [2003] comparaison dans un fichier texte
    Salut
    j'ai une application qui ouvre un fichier texte des emails et qui affiche dans un textbox le contenu de ce fichier.
    J'ai un bouton filtrer qui doit éliminer les doublons et les emails contenant des caractéres spéciaux comme(é,è,à,...)alors je sais plus comment faire l'opération de comparaison des enregistements
    La vie semble à un pont et le meilleur de nous c'est ce lui qui le traversent

  2. #2
    Membre habitué Avatar de souaddemaroc
    Inscrit en
    Novembre 2005
    Messages
    194
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 194
    Points : 143
    Points
    143
    Par défaut
    Citation Envoyé par souaddemaroc
    Salut
    j'ai une application qui ouvre un fichier texte des emails et qui affiche dans un textbox le contenu de ce fichier.
    J'ai un bouton filtrer qui doit éliminer les doublons et les emails contenant des caractéres accentués comme(é,è,à,...)alors je sais plus comment faire pour effacer les emails qui contient ces caractéres
    La vie semble à un pont et le meilleur de nous c'est ce lui qui le traversent

  3. #3
    Membre actif Avatar de DarkMolo
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    207
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Maroc

    Informations forums :
    Inscription : Juillet 2006
    Messages : 207
    Points : 277
    Points
    277
    Par défaut
    Salut,
    Ces emails contenus dans le fichier sont délimités par quoi, chaque email sur une ligne peut-être??
    Certified SCJP 5.0 / SCWCD 5.0 / SCEA 5.0
    C'est une grande folie de vouloir être sage tout seul.
    Duc de La Rochefoucauld

  4. #4
    Membre habitué Avatar de souaddemaroc
    Inscrit en
    Novembre 2005
    Messages
    194
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 194
    Points : 143
    Points
    143
    Par défaut
    Salut DarkMolo
    Certainement les emails sont délimités par le retour à la ligne
    La vie semble à un pont et le meilleur de nous c'est ce lui qui le traversent

  5. #5
    Membre habitué Avatar de souaddemaroc
    Inscrit en
    Novembre 2005
    Messages
    194
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 194
    Points : 143
    Points
    143
    Par défaut
    salut
    Aidez moi svp, je suis bloqué totalement
    Je vais vous reexpliquer :
    Jai un fichier texte qui contient les emails délimité par le retour à la ligne,je parcours mon fichier je l'ouvre. Dans ce fichier il y des emails qui se répète et des emails éronés(qui contient les lettres accentués comme é,à) ce que je vous c'est élimer les occurences et les emails éronés et récupérer les emails correctes dans un autre fichier
    Merçi
    La vie semble à un pont et le meilleur de nous c'est ce lui qui le traversent

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    110
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2006
    Messages : 110
    Points : 140
    Points
    140
    Par défaut
    J'ai du mal à apprehender le principe d'un caractère de retour à la ligne pour comme séparateur d'Email, en effet les E-mail ont de grosse chance de contenir eux même des retour à la ligne...

    De plus tu as plusieurs contraintes, les caractères incompatibles et le dedoublement des Emails à gerer, il faut donc prendre chacun des cas de façon isolé.

    Ton premier travail sera evidemment de pouvoir delimiter chacun de ces Emails et de les injecter dans une structure / objet adequate pour la suite de tes opérations.

    Ensuite developpe des outils qui te permettrons d'effectuer les deux operations de nettoyage que tu as besoin de faire.

    Ici on peut t'aider sur un problème concret, pas developper une application à ta place surtout avec le si peu de spécification que tu nous donne.

  7. #7
    Membre actif Avatar de DarkMolo
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    207
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Maroc

    Informations forums :
    Inscription : Juillet 2006
    Messages : 207
    Points : 277
    Points
    277
    Par défaut
    Salut,
    Tnopy dit:
    J'ai du mal à apprehender le principe d'un caractère de retour à la ligne pour comme séparateur d'Email, en effet les E-mail ont de grosse chance de contenir eux même des retour à la ligne...
    , y'a une confusion, moi je croiais que souaddemaroc voulait parler adresse email, zzzz@zzzzzzz.zzz, si c'est le cas, moi bossant principalement avec l'ADO .Net, c'est sûr que c'est pas la meilleure soluce, mais bon:

    On instancie un DataTable qui nous facilitera le filtrage, On lit les lignes une à une, on vérifie si la ligne récupérée ne comporte pas de lettres acentuées, puis on vérifie cette même ligne n'existe pas dans le DataTable, si c'est le cas on la rajoute. On a plus qu'à lire les enregistrements contenus dans le DataTable et les rajouter à l'autre fichier.

    Code VB.NET : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     Dim fsr As New IO.StringReader("Chemin\Fichier")
            Dim dtFiltre As New DataTable("AdresseMail")
            Dim buf As String
            Const ARetirer As String = "éàèêâù"
            dtFiltre.Columns.Add("AdresseEmail", GetType(String))
            buf = fsr.ReadLine
            While (Not buf Is Nothing)
                If buf.IndexOfAny(ARetirer.ToCharArray()) = -1 Then
                    If dtFiltre.Compute("COUNT(AdresseEmail)", "AdresseEmail='" & buf.ToString().Replace("'", "''") & "'") = 0 Then
                        dtFiltre.Rows.Add(New String() {buf}).AcceptChanges()
                    End If
                End If
                buf = fsr.ReadLine
            End While
            fsr.Close()
     
            Dim fsw As New IO.StreamWriter("Chemin\Fichier")
            For i As Integer = 0 To dtFiltre.Rows.Count - 1
                fsw.WriteLine(dtFiltre.Rows(i)("AdresseEMail").ToString())
            Next i
            fsw.Close()
    dtFiltre.Dispose()
    Certified SCJP 5.0 / SCWCD 5.0 / SCEA 5.0
    C'est une grande folie de vouloir être sage tout seul.
    Duc de La Rochefoucauld

  8. #8
    Membre habitué Avatar de souaddemaroc
    Inscrit en
    Novembre 2005
    Messages
    194
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 194
    Points : 143
    Points
    143
    Par défaut
    Merci bien darkmolo
    j'ai essai ton code mais cela ne marche pas à la ligne
    If dtFiltre.Compute("COUNT(AdresseEmail)", "AdresseEmail='" & buf.ToString().Replace("'", "''") & "'") = 0 Then
    Je serais ravissante si tu me explique un peu ce qui se passe dans ce code et merçi bien
    La vie semble à un pont et le meilleur de nous c'est ce lui qui le traversent

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    110
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2006
    Messages : 110
    Points : 140
    Points
    140
    Par défaut
    Citation Envoyé par DarkMolo
    , y'a une confusion, moi je croiais que souaddemaroc voulait parler adresse email, zzzz@zzzzzzz.zzz, si c'est le cas, moi bossant principalement avec l'ADO .Net, c'est sûr que c'est pas la meilleure soluce, mais bon:
    Je crois que c'est moi qui ai mal interpreté son message
    Ca à plus de sens avec ta comprehension ^^.

  10. #10
    Membre actif Avatar de DarkMolo
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    207
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Maroc

    Informations forums :
    Inscription : Juillet 2006
    Messages : 207
    Points : 277
    Points
    277
    Par défaut
    souaddemaroc dit:
    Je serais ravissante si tu me explique un peu ce qui se passe dans ce code et merçi bien
    Vraiement désolé, je vais essayer de commenter un peu:

    Code VB.NET : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
     
    Dim fsr As New IO.StringReader("Chemin\Fichier")
            Dim dtFiltre As New DataTable("AdresseMail")
            Dim buf As String
            'Enumére ici tous les caractères que tu souhaite banir
            Const ARetirer As String = "éàèêâù"
            'On crée une colonne de type string dans notre DataTable qui stockera nos Adresses Email
            dtFiltre.Columns.Add("AdresseEmail", GetType(String))
     
            'La classique boucle pour lire les lignes d'un fichier une à une
            buf = fsr.ReadLine
            While (Not buf Is Nothing)
                'On contrôle si la ligne lue(l'adresse Email) ne comporte pas de caractères accentuées
                If buf.IndexOfAny(ARetirer.ToCharArray()) = -1 Then
                    'On compte le nombre d'enregistrement présents dans le DataTable qui aurait comme valeur de champ AdresseEmail l'adresse contenu dans la ligne en cours de lecture, c'est seuleument s'il y'en a aucun qu'on l'ajoute à la DataTable(Controle de doublan)
                    If dtFiltre.Compute("COUNT(AdresseEmail)", "AdresseEmail='" & buf.ToString().Replace("'", "''") & "'") = 0 Then
                        'On ajoute la ligne au DataTable
                        dtFiltre.Rows.Add(New String() {buf}).AcceptChanges()
                    End If
                End If
                buf = fsr.ReadLine
            End While
            fsr.Close()
     
            Dim fsw As New IO.StreamWriter("Chemin\Fichier")
            'Maintenant qu'on est sûre que le DataTable ne comporte que des lignes sans doublans et pas de lettres accentuées, on l'a parcourt et on ecrit le tout délimité encore par des retour à la ligne.
            For i As Integer = 0 To dtFiltre.Rows.Count - 1
                fsw.WriteLine(dtFiltre.Rows(i)("AdresseEMail").ToString())
            Next i
            fsw.Close()
    dtFiltre.Dispose()

    souaddemaroc dit:
    j'ai essai ton code mais cela ne marche pas à la ligne
    If dtFiltre.Compute("COUNT(AdresseEmail)", "AdresseEmail='" & buf.ToString().Replace("'", "''") & "'") = 0 Then
    Je comprends pas pourquoi ça poserait problème, essaye en la remplaçant par cette ligne:
    Code VB.NET : Sélectionner tout - Visualiser dans une fenêtre à part
    If dtclient.Select("AdresseEmail LIKE '" & buf.Replace("'","''") & "'").Length=0 Then
    Certified SCJP 5.0 / SCWCD 5.0 / SCEA 5.0
    C'est une grande folie de vouloir être sage tout seul.
    Duc de La Rochefoucauld

  11. #11
    Membre habitué Avatar de souaddemaroc
    Inscrit en
    Novembre 2005
    Messages
    194
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 194
    Points : 143
    Points
    143
    Par défaut
    Le code passe tres bien mais rien ne s'afficher
    je veux affecter le resultat a un controle ritchtextbox ou un autre controle
    La vie semble à un pont et le meilleur de nous c'est ce lui qui le traversent

  12. #12
    Membre actif Avatar de DarkMolo
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    207
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Maroc

    Informations forums :
    Inscription : Juillet 2006
    Messages : 207
    Points : 277
    Points
    277
    Par défaut
    souaddemaroc avait dit:
    ...ce que je vous c'est élimer les occurences et les emails éronés et récupérer les emails correctes dans un autre fichier
    souaddemaroc dit maintenant:
    je veux affecter le resultat a un controle ritchtextbox ou un autre controle
    , est-ce que c'est la même personne !!

    Lol, tu n'as qu'à faire à la place de:
    Code VB.NET : Sélectionner tout - Visualiser dans une fenêtre à part
    fsw.WriteLine(dtFiltre.Rows(i)("AdresseEMail").ToString())

    Code VB.NET : Sélectionner tout - Visualiser dans une fenêtre à part
    MonRichBoxText.Text &= dtFiltre.Rows(i)("AdresseEMail").ToString() & Environment.NewLine
    Certified SCJP 5.0 / SCWCD 5.0 / SCEA 5.0
    C'est une grande folie de vouloir être sage tout seul.
    Duc de La Rochefoucauld

  13. #13
    Membre habitué Avatar de souaddemaroc
    Inscrit en
    Novembre 2005
    Messages
    194
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 194
    Points : 143
    Points
    143
    Par défaut
    Salut

    Lorsque je clique sur le bouton filter ce n'est pas le contenu du fichier qui s'affiche mais c'est le chemin complet du fichier alors quoi faire
    La vie semble à un pont et le meilleur de nous c'est ce lui qui le traversent

  14. #14
    Membre habitué Avatar de souaddemaroc
    Inscrit en
    Novembre 2005
    Messages
    194
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 194
    Points : 143
    Points
    143
    Par défaut
    Salut
    Je vais vous reexpliquer le truc comme il faut et voici l'interface de mon application
    LE bouton parcourir me permet de rechercher le fichier à ouvrir. Le contenu de ce fichier va s'afficher dans le controle Richtextbox qui porte le nom TResFichier
    et voiçi le code que j'ai pour importer ce fichier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
    'creation de l'objet  boite de dialogue ouvrir
            Dim InstOpenFile As New OpenFileDialog
            '***Parametrage boite de dialgoque ouvrir****'
            'Le path de l'ouverture de la boite de dialogue
            InstOpenFile.InitialDirectory = "c:\"
            'le filtre pour les fichiers
            InstOpenFile.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*"
            InstOpenFile.FilterIndex = 1
            'restauration du répertoire inial apres la fermeture de la boite de dialogue
            InstOpenFile.RestoreDirectory = True
            '****Affiche la boite de dialogue****'
            If InstOpenFile.ShowDialog() = DialogResult.OK Then
                TcheminFichier.Text = InstOpenFile.FileName
                debloque_bouton()
                f = File.OpenRead(TcheminFichier.Text)
                enreg = New StreamReader(f, System.Text.Encoding.ASCII)
                enreg.BaseStream.Seek(0, SeekOrigin.Begin)
                '.peek defini le caractere suivant, si =-1 c'est qu'il n'y a plus de caractere
                'donc la fin du fichier est atteinte
                compteur = 0
                While enreg.Peek() > -1
                    Dim rep As String = enreg.Peek
                    TResFichier.Text = TResFichier.Text + enreg.ReadLine() + vbNewLine
                    compteur = compteur + 1
                End While
                enreg.Close()
                'affiche les infos du fichier
                infoFichier(TcheminFichier.Text)
            Else
                TcheminFichier.Text = "Veuillez choisir un fichier   --->"
            End If
            Me.nbrenreg.Text = "Nombre d'enregistrements :" & compteur
    Avec infofichier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Private Sub infoFichier(ByVal cheminfichier As String)
            Me.lbltaile.Text = "Taille : " & Format((FileLen(cheminfichier) / 1024), "##,##0.00") & " ko"
            Me.lblmodifer.Text = "Modifié le : " & FileDateTime(cheminfichier)
        End Sub
    ET j'ai le bouton filter qui me permet d'éliminier les doublons et les emails erronés à partir du richtextbox(TResFichier )afin d'afficher le resultat dans un autre richtextbox
    Images attachées Images attachées  
    La vie semble à un pont et le meilleur de nous c'est ce lui qui le traversent

  15. #15
    Membre habitué Avatar de souaddemaroc
    Inscrit en
    Novembre 2005
    Messages
    194
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 194
    Points : 143
    Points
    143
    Par défaut
    salut mes soeurs et fréres développeurs(euse)
    J'ai tellement besoin à votre aide
    La vie semble à un pont et le meilleur de nous c'est ce lui qui le traversent

Discussions similaires

  1. Comparaison de ligne dans un fichier texte
    Par babynewton dans le forum MATLAB
    Réponses: 21
    Dernier message: 13/02/2012, 19h09
  2. Réponses: 4
    Dernier message: 16/12/2005, 17h43
  3. Réponses: 3
    Dernier message: 22/02/2004, 20h09
  4. [LG]rechercher dans un fichier texte
    Par BadFox dans le forum Langage
    Réponses: 11
    Dernier message: 01/12/2003, 15h57
  5. recherche de doublons dans un fichier texte
    Par portu dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 07/10/2003, 14h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo