Partage
  • Partager sur Facebook
  • Partager sur Twitter

[VB.NET] Tri dans un fichier (supression de mots)

Sujet résolu
    7 mars 2011 à 19:07:07

    Bonjour,

    j'essaie de réaliser une sorte de "trieur". Enfaite j'ai un fichier dico.txt, il contient un peu plus de 252000 lignes.

    et il est de la forme :

    difficile                 Adjectif 
    drôle                 Adjectif 
    étrange                 Adjectif 
    facile                 Adjectif 
    grave                 Adjectif 
    impossible                 Adjectif 
    jeune                 Adjectif 
    juste                 Adjectif 
    libre                 Adjectif 
    malade                 Adjectif 
    même                 Adjectif 
    pauvre                 Adjectif 
    possible                 Adjectif 
    propre                 Adjectif 
    rouge                 Adjectif 
    sale                 Adjectif 
    simple                 Adjectif 
    tranquille                 Adjectif 
    triste                 Adjectif 
    vide                 Adjectif 
    bonne                 Adjectif féminin 
    toute                 Adjectif féminin 
    doux                 Adjectif masculin
    faux                 Adjectif masculin


    Le but de ce tri est d'enlever tout ce qui se trouve après le premier mot de chaque ligne, c'est à dire garder ceci :
    difficile                 
    drôle                 
    étrange                 
    facile                 
    grave                 
    impossible                 
    jeune                 
    juste                 
    libre                 
    malade                 
    même                 
    pauvre         
    possible
    propre        
    rouge
    sale
    simple
    tranquille
    triste
    vide
    bonne
    toute
    doux
    faux


    J'ai actuellement fait ce code :

    Imports System.IO
    Module Module1
    
        Sub Main()
            Dim MonFichier As String = "dico.txt"
            For Each mot In File.ReadLines(MonFichier)
                If Not mot = "Adjectif" Then
                    File.AppendAllText("dico2.txt", mot & Chr(13))
                End If
            Next
        End Sub
    End Module
    


    Donc, ça ne tri rien et en plus le chr(13) ne semble pas marcher.
    Comment faire donc pour "trier" ces mots et ne garder que le premier de chaque ligne ?

    Merci d'avance :)
    • Partager sur Facebook
    • Partager sur Twitter
      7 mars 2011 à 20:03:32

      bonjour,

      Un truc du genre

      Streamreader sr = new StreamReader(new FileStream("dico'txt", FileMode.Open));
      StreamWriter sw = new StreamWriter(new FileStream("dico2.txt", FileMode.OpenOrCreate));
      
      string str =  sr.ReadLine();
      
      while (str != null)
      {
          string[] str2 = str.Split(' '); //Ou le caratere tab
          sw.WriteLine(str2[0]);
          str = sr.ReadLine();
      }
      


      Normalement ca devrait le faire :)

      Bonne journee

      Doum
      • Partager sur Facebook
      • Partager sur Twitter
        7 mars 2011 à 21:30:07

        Re, alors ça commence à venir, ton code m'a donné des idées. Merci :)

        Il me reste encore un problème d'encodage, si quelqu'un peut m'aider.
        Le code que j'utilise est celui-ci :

        Imports System.IO
        Module Module1
        
            Sub Main()
                Dim FichierBase As String = "C:\Users\Tufanik\Documents\Document OOo\dico.txt"
                For Each line As String In File.ReadLines(FichierBase)
                    Dim mot As String() = line.Split(" ")
                    File.AppendAllText("C:\Users\Tufanik\Documents\Document OOo\dico2.txt", mot(0) & Environment.NewLine)
                    Console.WriteLine(mot(0))
                Next line
                Console.Read()
            End Sub
        
        End Module
        


        Et j'obtiens ceci (les accents ne sont pas gérés on dirait) :
        bleu
        super
        autre
        bizarre
        difficile        
        dr�le        
        �trange        
        facile        
        grave        
        impossible        
        jeune        
        juste        
        libre        
        malade        
        m�me


        Edit : D'après ce que j'ai vue, le fichier d'origine est encodé en ANSI et le second en UTF-8, comment mettre le second en ANSI pendant qu'il est traité ? (Si je le mets après, les accents ne reviennent pas, ils sont remplacés par ?)
        • Partager sur Facebook
        • Partager sur Twitter
          7 mars 2011 à 22:50:25

          Avec le classe Encoding tu devrait pouvoir le faire :)

          • Partager sur Facebook
          • Partager sur Twitter
            8 mars 2011 à 9:20:39

            Salut,

            Désolé mais je n'arrive pas à me servir de cette classe, pourrais-tu me donner un exemple ?

            Edit : D'après ce que j'ai cru comprednre, ce n'est pas à l'écriture qu'il y a un problème d'encodage mais à la lecture. En effet, si je fais console.write("é è à"), tout va bien mais si je met c'est lettre dans un fichier et que je lui fait lire et ensuite afficher, j'ai que des "? ? ?".

            Edit 2 : Voilà ce que j'ai aussi essayé :

            Imports System.IO
            
            Module Module1
            
                Sub Main()
                    Dim fichier As String = "C:\Users\Tufanik\Documents\Document OOo"
                    Dim monStreamReader As StreamReader = New StreamReader(fichier & "\dico.txt", System.Text.Encoding.Default)
                    Dim ligne As String = monStreamReader.ReadLine()
                    Dim monStreamWriter As StreamWriter = New StreamWriter(fichier & "\dico2.txt", True, System.Text.Encoding.Default)
                    While Not ligne Is Nothing
                        Dim mot As String() = ligne.Split(" ")
                        Console.WriteLine(mot(0))
                        monStreamWriter.WriteLine(mot(0))
                        ligne = monStreamReader.ReadLine()
                    End While
                    Console.Read()
                End Sub
            
            End Module
            


            Les accents sont maintenant bien gérés mais il reste un problème, le programme arrête d'écrire dans le fichier à un certain moment, alors que tous les mots s'affichent dans la console. Je voudrais donc savoir pourquoi il n'écrit pas tout :euh:

            Edit 3 : C'est résolu, voici mon code, il semble fonctionner parfaitement (accents bien gérés, fichier traité en intégralité) :

            Imports System.IO
            
            Module Module1
            
                Sub Main()
                    Dim chemin As String = "C:\Users\Tufanik\Documents\Document OOo"
                    Dim monStreamReader As StreamReader = New StreamReader(chemin & "\dico.txt", System.Text.Encoding.Default)
                    Dim ligne As String = monStreamReader.ReadLine()
                    While Not ligne Is Nothing
                        Dim mot As String() = ligne.Split(" ")
                        Console.WriteLine(mot(0))
                        File.AppendAllText(chemin & "\dico2.txt", mot(0) & Environment.NewLine)
                        ligne = monStreamReader.ReadLine()
                    End While
                    monStreamReader.Close()
                    Console.ForegroundColor = ConsoleColor.Green
                    Console.WriteLine(Environment.NewLine & "Exécution terminée")
                    Console.Read()
                End Sub
            
            End Module
            


            Merci pour les idée que tu m'as donné cindoum :D
            • Partager sur Facebook
            • Partager sur Twitter
              8 mars 2011 à 14:37:19

              Passe le sujet en resulu si tout est ok :)
              • Partager sur Facebook
              • Partager sur Twitter
                8 mars 2011 à 15:20:23

                Pardon, j'avais oublié :-°
                • Partager sur Facebook
                • Partager sur Twitter

                [VB.NET] Tri dans un fichier (supression de mots)

                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                • Editeur
                • Markdown