none
recherche valeur numérique RRS feed

  • Question

  • bonjour,

    existe-il une méthode pour rechercher les chaines de caracteres numériques dans un fichier sachant que je ne connais pas par avance la valeur de cette chaine numérique.

    mon but est de chercher les chaines qui sont entourées par des caracteres. ex : je cherche "(4100;" pour le remplacer par "(410000;"

    une idée pour parvenir à faire cela ?


    "Un bon technicien n'est pas un technicien qui pense tout savoir" Lallemand Sébastien MCITP EA Windows Server 2008 R2 Apprenti développeur C# EF

    mercredi 18 septembre 2013 10:35

Réponses

  • Bonjour,

    Voici votre code corrigé :

    Regex reg = new Regex(@"\(([0-9]{4})\!");
    Match m = reg.Match("(4000!");
    if (m.Success)
    {
        string result = reg.Replace(rtb.Text, "${1}00");
        Console.WriteLine(result);
    }

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte logiciel/Consultant/Formateur Freelance
    Blog : http://gilles.tourreau.fr
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5/4.0
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5/4.0

    mercredi 18 septembre 2013 21:29
    Modérateur

Toutes les réponses

  • ma seconde part vers les expressions régulieres mais là je maitrise pas du tout !!

    public void lecture()
            {
                RichTextBox rtb = new RichTextBox();
                rtb.LoadFile(@"d:\Attestation annuelle.rtf");
             
                Regex reg = new Regex("\\({1}\\[0-9]+\\!{1}");
                
                reg.Replace(rtb.Text, "00");
                rtb.SaveFile(@"d:\Attestation annuelle2.rtf");
    }

    mais ca ne fonctionne pas...

    mon but est de rajouter "00" à l'expression comprise entre "(" et "!"


    "Un bon technicien n'est pas un technicien qui pense tout savoir" Lallemand Sébastien MCITP EA Windows Server 2008 R2 Apprenti développeur C# EF

    mercredi 18 septembre 2013 13:52
  • avec un peu d'avancement ca donne ca pour le moment...

     Regex reg = new Regex("\\({1}\\[0-9]{4}\\!{1}");
                Match m = reg.Match("(4000!");
                if (m.Success)
                {
                    reg.Replace(rtb.Text, rtb.Text + "00");    
                }

    mais pas de Success...


    "Un bon technicien n'est pas un technicien qui pense tout savoir" Lallemand Sébastien MCITP EA Windows Server 2008 R2 Apprenti développeur C# EF

    mercredi 18 septembre 2013 14:28
  • Bonjour,

    Voici votre code corrigé :

    Regex reg = new Regex(@"\(([0-9]{4})\!");
    Match m = reg.Match("(4000!");
    if (m.Success)
    {
        string result = reg.Replace(rtb.Text, "${1}00");
        Console.WriteLine(result);
    }

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte logiciel/Consultant/Formateur Freelance
    Blog : http://gilles.tourreau.fr
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5/4.0
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5/4.0

    mercredi 18 septembre 2013 21:29
    Modérateur
  • Merci Gilles,

    je vais le tester dans la journée.

    juste une petite question, peux tu m'expliquer cela STP ?

    rtb.Text, "${1}00"

    "Un bon technicien n'est pas un technicien qui pense tout savoir" Lallemand Sébastien MCITP EA Windows Server 2008 R2 Apprenti développeur C# EF

    jeudi 19 septembre 2013 07:41
  • Bonjour,

    Dans une expression régulière, les parenthèses permettent de faire des "captures" de groupements :

    ([0-9]*)-toto-([a-z]*)

    Ici on a 2 groupes qui sont capturés, l'un pour un nombre avant "-toto-" et l'autre pour une chaîne de caractères en minuscules.
    Le "$" permet pendant le remplacement de récupérer le contenu du groupe. Ces groupes sont numérotés de 0 à n en fonction de leur apparition dans l'expression régulière de gauche à droite. Imaginons maintenant que je nous avons cette expression de remplacement :

    "Nombre=$1 et Chaîne=$2"

    Et la chaîne suivante à analyser :

    1664-toto-abcd

    On aura au final :

    "Nombre=1664 et Chaîne=abcd"

    Dans ma réponse précédente le ${1} permet de lever l'ambiguïté sur le numéro du groupe. En effet si vous écrivez $100 au lieu de ${1}00 le .NET Framework va penser que vous voulez récupérer le groupe n°100 et non le n°1.

    Est-ce plus clair pour vous ?

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte logiciel/Consultant/Formateur Freelance
    Blog : http://gilles.tourreau.fr
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5/4.0
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5/4.0

    jeudi 19 septembre 2013 07:59
    Modérateur
  • ah oui ok merci pour l'explication. c'est la première fois que je travaille sur les expressions régulières.

    pour aller jusqu'au bout, le but du bout de programme est de lire un fichier RTF, chercher toutes les chaines qui s'ecrivent comment ca : "(Nombre!" et de rajouter "00" au Nombre. (je ne connais pas le Nombre)

    actuellement j'arrive à lire le fichier RTF dans une RichTextBox et à trouver ma chaine. je vais tester la correction du code en espérant que ça modifie toutes les chaines du chose et pas seulement la première trouvée...

    en tout cas merci !


    "Un bon technicien n'est pas un technicien qui pense tout savoir" Lallemand Sébastien MCITP EA Windows Server 2008 R2 Apprenti développeur C# EF


    jeudi 19 septembre 2013 08:05
  • Je viens de tester la solution. 

    en fait elle ne fonctionne que si j'ai ça dans mon Match : 

    Match m = reg.Match("(4000!");

    dans mon cas, je dois avoir :

    RichTextBox rtb = new RichTextBox();

    rtb.LoadFile(@"d:\Attestation annuelle.rtf");

    Regex reg = new Regex(@"\(([0-9]{4})\!"); Match m = reg.Match(rtb.Text); if (m.Success) { string result = reg.Replace(rtb.Text, "${1}00"); Console.WriteLine(result); //ici on voit que la mise à jour du String recherché ne se fait pas }

    rtb.SaveFile(@"d:\Attestation annuelle2.rtf");


    "Un bon technicien n'est pas un technicien qui pense tout savoir" Lallemand Sébastien MCITP EA Windows Server 2008 R2 Apprenti développeur C# EF

    jeudi 19 septembre 2013 09:36
  • bon, ça avance dans le bon sens. j'ai enfin pu faire ma modif dans tout le document. seul gros problème maintenant, c'est que je perd la mise en page du fichier RTF...

    mon code qui marche :

    ichTextBox rtb = new RichTextBox();

    rtb.LoadFile(@"d:\Attestation annuelle.rtf");

    Regex reg = new Regex(@"\(([0-9]{4})\!"); Match m = reg.Match(rtb.Text); if (m.Success) { rtb.Text = reg.Replace(rtb.Text, "${1}00"); }

    rtb.SaveFile(@"d:\Attestation annuelle2.rtf", RichTextBoxStramType.RichText);

    cela fonctionne pour rajouter "00" à tous mes String. mais pourquoi mon Text s'aligne à gauche et se met en gras ??


    "Un bon technicien n'est pas un technicien qui pense tout savoir" Lallemand Sébastien MCITP EA Windows Server 2008 R2 Apprenti développeur C# EF

    jeudi 19 septembre 2013 15:06