none
Les expressions régulières RRS feed

  • Question

  • Bonjours,

    Voila j ai un soucis avec les expressions régulières.

    J'ai compris le fonctionnement comme expliqué sur ce site : http://stormimon.developpez.com/dotnet/expressions-regulieres/

    J ai esaayer avec un mot et tout marche, mais... :(

    Voila mon soucis :

    J'ai un fichier .log qui est un fichier texte qui s'actualise toute les seconde. J'ai developper une fenetre wpf qui me lit ce fichier et me l'affiche dans un textBox en l'actualisant toute les secondes. Jusque la pas de soucis.

    Maintenant je voudrais extraire des lignes pour pouvoir les inserer dans une base de données. Mais avant il faut que je décortique chaque ligne pour pouvoir les trier.

    Par exemple :

    Mrs dupond a tué une créature (Atrox Young) d'une valeur de 55 Ped

    Mme Durand a trouvé un gisement ( Iron stone ) d'une valeur de 569 Ped

    Mrs HeureuxGagnant a tué une créature (Proteron Alpha) d'une valeur de 16253 Ped

    Alors j'ai pensé rechercher en expression régulière le mot "créature" pour trouver toute les lignes (a savoir qu il y en a des dizaines) ou le joueur à gagné en chassant, pour pouvoir inserer par créature differente la valeur du gains ainsi que le nom etc.. et faire deumeme pour le deuxième exemple.

    Seulement mon expression me trouve bien le mot créature mais qu une seule fois. Elle ne me trouve pas les autres lignes et ne m affiche pas la ligne complète (dans un autre textBox pour test).

    La je suis devant un problème dont je ne trouve pas la solution .Si quelqu un aurais des information se serais avec bienvenue.

    Peut etre je me trompe aussi sur la méthode pour extraire le fichier pour pouvoir l'inserer dans une base de donné????


    • Modifié adrien67 lundi 23 janvier 2012 20:16
    lundi 23 janvier 2012 20:14

Réponses

  • Etes-vous bien sûr que c'est le chemin des fichiers qui est affiché dans le code que j'ai mis ? 

    J'ai essayé chez moi et ça affiche bien le contenu du fichier texte. 

    Le fichier URLChat contient des URL ou des chemins d'accès vers des fichiers texte, et c'est le contenu de ces fichiers que vous voulez afficher, c'est bien ça ?

    • Marqué comme réponse adrien67 lundi 30 janvier 2012 14:32
    lundi 30 janvier 2012 12:26
  • En effet Yohan et merci de m'avoir mis sur la voie. Il fallait bien que je mette l'adresse réel du fichier.

    Cependant j ai un autre soucis. Il faut que je réactualize la méthode toute les 500 milliseconde car le fichier texte se met a jour sans arret. Pour le code de reactualisation j ai créé un timer. Mais j ai un probleme avec le tableau du string qui me déclenche l'erreur suivante :

    Une exception de type 'System.OutOfMemoryException' a été levée.

    A mon avis le buffer est surchargée et je ne sais comment vider le cache.

    A savoir que le fichier actuel fait 554 Ko et qu il grandit au fur et a mesure que l'on joue.

    Je me penche sur l'effacement du fichier tout les tant et tant de Ko par exemple ou alors il y aurais une autre méthode???

    merci

    • Marqué comme réponse adrien67 lundi 30 janvier 2012 14:32
    lundi 30 janvier 2012 12:46

Toutes les réponses

  • Bonjour Adrien, 

    On pourrait probablement y voir plus clair avec le code que vous utilisez pour l'expression régulière.

    dimanche 29 janvier 2012 16:35
  • Oui c'est vrai dsl je n ai pas mis de code alors voici mon code :

      public partial class EssaiChatLog : Window
        {
            private Classe.TimerLectureChatLog ComptageGlobal;
    
            // Obtenir le nom de l'utilisateur de l'ordinateur
            string Username = System.Windows.Forms.SystemInformation.UserName;
    
            public EssaiChatLog()
            {
                InitializeComponent();
                this.Loaded += new RoutedEventHandler(MiseEnRoute);
                LectLignes();
            }
    
    
         // Méthode pour mettre une remise en route automatique toute  
         //les 500 milliseconde
         // La Classe se trouve sur une autre page
            public void MiseEnRoute(object sender, RoutedEventArgs e)
            {
                ComptageGlobal = new TimerLectureChatLog(TimeSpan.FromMilliseconds(0));
                ComptageGlobal.Comptage += new EventHandler(LectureFichier);
    
                ComptageGlobal.Start();
    
            }
    
     // Lecture du fichier text
            public void LectureFichier(object sender, EventArgs e)
            {
                string URLChat = File.ReadAllText(@"C:\Users\" + Username + @"\Documents\Gestyopia\TXT\URLChat.txt");
                string fileName = @"" + URLChat + "";
                TextReader Lecture;
                // Ouverture du fichier Chat.log et lecture ligne par ligne du fichier
                Lecture = new StreamReader(fileName);
                string lignes = Lecture.ReadToEnd();
                textBoxLectureFichier.Text = lignes;
                
                Lecture.Close();
                Lecture.Dispose();
    
                
                
            }
    
    // Essai de création d'une méthode qui me lira chaque ligne du 
    //début à la fin que je pourrais décortiquer
    // et insérer dans une base de donnée.
    // A savoir que le fichier texte est remis à jour toute les 
    // 500 milliseconde
            public void LectLignes()
            {
                string URLChat = File.ReadAllText(@"C:\Users\" + Username + @"\Documents\Gestyopia\TXT\URLChat.txt");
                string fileName = @"" + URLChat + "";
                string[] lines = File.ReadAllLines(fileName);
                int Compt = lines.Count();
                textBoxLectureLigne.Text = Convert.ToString(Compt);
                for (int i = 0; i < Compt; i++)
                {
                    this.textBoxLectureLigne.Text += lines[i] + "\n";
                }
            }
        }
    

     

    pour la lecture et le raffraichissement du fichier texte je n'ai aucun soucis. Le problème que j ai actuellement c'est pour la lecture Ligne à lignes dans la méthode LectLignes.

    Elle n'est pas actualisé.

    Je vient de poster le code et je me demande si je ne devrais pas aussi faire un comptage automatique un peu plus long que le premier.

     

    Pour infos j ai 2 text box différente. 

    lundi 30 janvier 2012 10:30
  • La méthode File.ReadAllText(string) renvoit une String contenant toutes les lignes du fichier passé en paramètre.

    Or vous utilisez cette String comme chemin de File.ReadAllLines(). 

    Essayez de cette manière :

            public void LectLignes()
            {
                string[] lines = File.ReadAllLines(@"C:\Users\" + Username + @"\Documents\Gestyopia\TXT\URLChat.txt");
                int Compt = lines.Count();
                textBoxLectureLigne.Text = Convert.ToString(Compt);
                for (int i = 0; i < Compt; i++)
                {
                    this.textBoxLectureLigne.Text += lines[i] + "\n";
                }
            }
        }
    


    lundi 30 janvier 2012 11:54
  • j avais deja essayer cette methode mais le probleme c est qu il ne me donne pas le contenu du fichier mais cela m affiche le chemin vers le fichier.
    lundi 30 janvier 2012 11:57
  • bon j ai essayer avec le code suivant et j ai l erreur : Une exception de type 'System.OutOfMemoryException' a été levée.

    voici le code :

    public void LectureFichier(object sender, EventArgs e)
            {
                string URLChat = File.ReadAllText(@"C:\Users\" + Username + @"\Documents\Gestyopia\TXT\URLChat.txt");
                string fileName = @"" + URLChat + "";
                TextReader Lecture;
                // Ouverture du fichier Chat.log et lecture ligne par ligne du fichier
                Lecture = new StreamReader(fileName);
                string lignes = Lecture.ReadToEnd();
                textBoxLectureFichier.Text = lignes;
                string[] lines = File.ReadAllLines(fileName);
                int Compt = lines.Count();
                textBoxLectureLigne.Text = Convert.ToString(Compt);
                for (int i = 0; i < Compt; i++)
                {
                    this.textBoxLectureLigne.Text += lines[i] + "\n";
                }
    
                Lecture.Close();
                Lecture.Dispose();
    
    
            }
    

    en fait ce que j essaye de faire c est d afficher chaque ligne et en fonction de ce qu elle contient l inserer (décortiqué) dans une base de donnée.

    lundi 30 janvier 2012 12:18
  • Etes-vous bien sûr que c'est le chemin des fichiers qui est affiché dans le code que j'ai mis ? 

    J'ai essayé chez moi et ça affiche bien le contenu du fichier texte. 

    Le fichier URLChat contient des URL ou des chemins d'accès vers des fichiers texte, et c'est le contenu de ces fichiers que vous voulez afficher, c'est bien ça ?

    • Marqué comme réponse adrien67 lundi 30 janvier 2012 14:32
    lundi 30 janvier 2012 12:26
  • oui c est bien ca , et il m affiche bien le chemin d'accès au fichier

    le textbox contient le chemin d'accès vers le fichier chat log. Comme vous me dite que vous avez essayer et que ca marche je vais essayer en direct car pour le chemin d'acces il se trouve dans un fichier text lui aussi et je pensse qu alors il lit le contenu de ce fichier. Je pense.

    Je vais essayer.

    lundi 30 janvier 2012 12:32
  • En effet Yohan et merci de m'avoir mis sur la voie. Il fallait bien que je mette l'adresse réel du fichier.

    Cependant j ai un autre soucis. Il faut que je réactualize la méthode toute les 500 milliseconde car le fichier texte se met a jour sans arret. Pour le code de reactualisation j ai créé un timer. Mais j ai un probleme avec le tableau du string qui me déclenche l'erreur suivante :

    Une exception de type 'System.OutOfMemoryException' a été levée.

    A mon avis le buffer est surchargée et je ne sais comment vider le cache.

    A savoir que le fichier actuel fait 554 Ko et qu il grandit au fur et a mesure que l'on joue.

    Je me penche sur l'effacement du fichier tout les tant et tant de Ko par exemple ou alors il y aurais une autre méthode???

    merci

    • Marqué comme réponse adrien67 lundi 30 janvier 2012 14:32
    lundi 30 janvier 2012 12:46
  • Dans la méthode MiseEnRoute() vous avez du faire une erreur à cette ligne :

     ComptageGlobal = new TimerLectureChatLog(TimeSpan.FromMilliseconds(0));
    le compteur est sr 0ms ! Ca devrait résoudre le problème de le mettre à 500.

    lundi 30 janvier 2012 14:31
  • Merci yohan j'ai trouvé l'erreur. En fait le fichier URLChat.txt contient l'URL du fichier a lire.

    En fesant a ma facon il lisais le contenu de ce fichier et non le fichier source.
    Pour ce qui est du code il faut que je le reprenne entierement car le buffer bloque a 9Ko alors que le fichier a lire devient consequent a force de jouer.

    Je suis en train de voir pour entierement refaire le code et en pouvant laisser le fichier d'origine tel quel.

    Mais merci pour ton aide ca ma été bien utile. ;)

    lundi 30 janvier 2012 14:36