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

C# Discussion :

Recherche chaîne de caractères dans un .txt


Sujet :

C#

  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2018
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2018
    Messages : 37
    Points : 10
    Points
    10
    Par défaut Recherche chaîne de caractères dans un .txt
    Bonjour à tous,

    Je suis débutant en programmation, et je cherche à faire un petit logiciel avec des instructions bien précises.
    Je dois créer une petite application en C# qui a pour objectifs de :
    - Ouvrir un fichier .txt (log)
    - Le lire dans son entièreté
    - Chercher dans ce fichier la chaîne de caractère "Duration time:time:time"
    - Puis afficher cette chaîne de caractère à l'écran.

    J'ai déjà commencé à ouvrir le fichier, puis l'afficher, mais après de la recherche sur google, je ne trouve pas de bonne solutions pour rechercher une chaîne de caractère dans un fichier .txt et l'afficher.
    Les solutions trouvées ne marchent généralement qu'a moitié et je ne sais pas vraiment comment les utilisés, je ne les comprenais pas très bien. Fin bref voila voila, je suis nouveau aussi sur le forum et j’espérais que quelqu'un puisse me venir en aide pour cela.

    Merci d'avance pour vos futures réponses, bonne journée.

    Max Ursini alias MaxLikeMilf

  2. #2
    Membre chevronné
    Avatar de PixelJuice
    Homme Profil pro
    Ingénieur .NET & Game Designer
    Inscrit en
    Janvier 2014
    Messages
    648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur .NET & Game Designer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2014
    Messages : 648
    Points : 2 170
    Points
    2 170
    Par défaut
    Bonjour,

    Peux-tu poster ton code (avec les balises appropriées) pour qu'on voit un peu les méthodes que t'utilises ? Surtout celle pour lire les fichiers, vu qu'il en existe un paquet pour qu'on puisse te fournir une solution adéquat.

    Si tu utilises par exemple File.ReadAllLines(), tu peux stocker tout ton fichier dans une seule variable string[] et faire bêtement:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
                string[] text = File.ReadAllLines("fichier.txt");
                string mot = "ton mot";
     
                for (int i = 0; i < text.Length;i++)
                {
                    if (text[i].Contains(mot))
                    {
                        Console.WriteLine(text[i]); // Ou afficher seulement la partie qui t'intéresse
     
                        break; // Si tu veux rechercher qu'une seule fois, sinon enlève le break
                    }
                }

  3. #3
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2018
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2018
    Messages : 37
    Points : 10
    Points
    10
    Par défaut
    Très bien, je vous envoie ça demain matin, tout le code se trouve sur l'ordinateur de mon boulot qui est dans mon entreprise. Mais je crois que j'utilise bien la méthode ReadAllLines, Merci beaucoup de votre aide. A très vite.

  4. #4
    Expert confirmé
    Inscrit en
    Avril 2008
    Messages
    2 564
    Détails du profil
    Informations personnelles :
    Âge : 64

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 564
    Points : 4 442
    Points
    4 442
    Par défaut
    bonjour

    Linq peut etre ton ami pour rechercher des mots ou des phrases contenant des groupes de mots !!!(system.ling)

    voici un extrait de MSFN Lib Fr intitulé :
    Comment : rechercher des phrases qui contiennent un groupe de mots spécifié(LINQ)
    La requête fonctionne en fractionnant d'abord le texte en phrases, puis en fractionnant les phrases en un tableau de chaînes qui contient chaque mot. Pour chacun de ces tableaux, la méthode Distinct supprime tous les doublons, puis la requête effectue une opération Intersect sur le tableau de mots et le tableau wordstoMatch. Si le nombre de l'intersection est le même que le nombre du tableau wordsToMatch, tous les mots ont été trouvés dans les mots et la phrase d'origine est retournée.

    Dans l'appel à Split, les signes de ponctuation sont utilisés comme séparateurs pour les supprimer de la chaîne. Si vous ne le faites pas, vous pouvez par exemple obtenir une chaîne « Historically » qui ne correspondrait pas à « Historically » dans le tableau wordsToMatch. Vous devrez peut-être utiliser des séparateurs supplémentaires, en fonction des types de ponctuations trouvés dans le texte source.

    l'extrait de code accompagnant cette requête LINQ :
    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
     
    class FindSentences
    {
        static void Main()
        {
            string text = @"Historically, the world of data and the world of objects " +
            @"have not been well integrated. Programmers work in C# or Visual Basic " +
            @"and also in SQL or XQuery. On the one side are concepts such as classes, " +
            @"objects, fields, inheritance, and .NET Framework APIs. On the other side " +
            @"are tables, columns, rows, nodes, and separate languages for dealing with " +
            @"them. Data types often require translation between the two worlds; there are " +
            @"different standard functions. Because the object world has no notion of query, a " +
            @"query can only be represented as a string without compile-time type checking or " +
            @"IntelliSense support in the IDE. Transferring data from SQL tables or XML trees to " +
            @"objects in memory is often tedious and error-prone.";
     
            // Split the text block into an array of sentences.
            string[] sentences = text.Split(new char[] { '.', '?', '!' });
     
            // Define the search terms. This list could also be dynamically populated at runtime.
            string[] wordsToMatch = { "Historically", "data", "integrated" };
     
            // Find sentences that contain all the terms in the wordsToMatch array.
            // Note that the number of terms to match is not specified at compile time.
            var sentenceQuery = from sentence in sentences
                                let w = sentence.Split(new char[] { '.', '?', '!', ' ', ';', ':', ',' },
                                                        StringSplitOptions.RemoveEmptyEntries)
                                where w.Distinct().Intersect(wordsToMatch).Count() == wordsToMatch.Count()
                                select sentence;
     
            // Execute the query. Note that you can explicitly type
            // the iteration variable here even though sentenceQuery
            // was implicitly typed. 
            foreach (string str in sentenceQuery)
            {
                Console.WriteLine(str);
            }
     
            // Keep the console window open in debug mode.
            Console.WriteLine("Press any key to exit");
            Console.ReadKey();
        }
    }
    /* Output:
    Historically, the world of data and the world of objects have not been well integrated
    */
    un autre extrait de MSFN Lib Fr intitulé :
    Comment : compter les occurrences d'un mot dans une chaîne (LINQ)
    l'extrait de code accompagnant cette requête LINQ :
    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
    34
    35
    36
    37
    38
    39
    40
    41
     
     
    class CountWords
    {
        static void Main()
        {
            string text = @"Historically, the world of data and the world of objects" +
              @" have not been well integrated. Programmers work in C# or Visual Basic" +
              @" and also in SQL or XQuery. On the one side are concepts such as classes," +
              @" objects, fields, inheritance, and .NET Framework APIs. On the other side" +
              @" are tables, columns, rows, nodes, and separate languages for dealing with" +
              @" them. Data types often require translation between the two worlds; there are" +
              @" different standard functions. Because the object world has no notion of query, a" +
              @" query can only be represented as a string without compile-time type checking or" +
              @" IntelliSense support in the IDE. Transferring data from SQL tables or XML trees to" +
              @" objects in memory is often tedious and error-prone.";
     
            string searchTerm = "data";
     
            //Convert the string into an array of words
            string[] source = text.Split(new char[] { '.', '?', '!', ' ', ';', ':', ',' }, StringSplitOptions.RemoveEmptyEntries);
     
            // Create and execute the query. It executes immediately 
            // because a singleton value is produced.
            // Use ToLowerInvariant to match "data" and "Data" 
            var matchQuery = from word in source
                             where word.ToLowerInvariant() == searchTerm.ToLowerInvariant()
                             select word;
     
            // Count the matches.
            int wordCount = matchQuery.Count();
            Console.WriteLine("{0} occurrences(s) of the search term \"{1}\" were found.", wordCount, searchTerm);
     
            // Keep console window open in debug mode
            Console.WriteLine("Press any key to exit");
            Console.ReadKey();
        }
    }
    /* Output:
       3 occurrences(s) of the search term "data" were found.
    */
    bon code...

  5. #5
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2018
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2018
    Messages : 37
    Points : 10
    Points
    10
    Par défaut
    Merci de vos réponses, j'ai utilisé la méthode de PixelJuice et elle fonctionne.
    J'aimerais maintenant convertir en valeur numériques la durée devant le mot duration (dans mon fichier .txt) (exemple: ########## Duration CPS1800 0:00:11) pour pouvoir calculer ces nombres en heures, minutes et secondes. (ce qui ferais dans l'exemple: 0h 0Min 11Sec).

    Voici pour l'instant mon code pour afficher toutes mes chaines de caractères "duration":

    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
     class Program
        {
            static void Main(string[] args)
            {
                // string content = File.ReadAllText(@"C: \Users\maxursin\Desktop\New folder\LOG.log");
     
     
                string[] text = File.ReadAllLines(@"C: \Users\maxursin\Desktop\New folder\LOG.log");
                string mot = "Duration";
     
                for (int i = 0; i < text.Length; i++)
                {
                    if (text[i].Contains(mot))
                    {
                        string duree = text[i];
                        Console.WriteLine(duree);
     
                    }
     
     
                }
                Console.ReadKey();
            }
        }
    }

    Donc voila j'aimerais savoir si il est possible de prendre ce qu'il y a après "duration" puis de mettre ces nombres en heures,minutes,secondes puis afficher.

    Merci beaucoup.

  6. #6
    Membre du Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Octobre 2014
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Antilles Néerlandaises

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Octobre 2014
    Messages : 73
    Points : 62
    Points
    62
    Par défaut
    Tout dépend de ce que tu as après duration.
    tu peux essaye de capturer tes heures minutes secondes en recherchant le motif/pattern voulu en te servant des expressions régulières:

    https://lgmorand.developpez.com/dotnet/regex/

    le pattern regex à utiliser se rapprocherait de ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ^(?:([01]?\d|2[0-3]):([0-5]?\d):)?([0-5]?\d)$
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    ^                   #  Start of string
    (?:                 #  Try to match
    ([01]?\d|2[0-3]):   #  HH:
    ([0-5]?\d):         #  MM:
    )?                  #  (entire group)
    ([0-5]?\d)          #  SS
    $                   #  End of string
    https://stackoverflow.com/questions/...-format-hhmmss

    Après il faut adapter le code de ta regex au motif exacte que tu recherches.

    Tu as des sites qui peuvent t'aider à créer/tester tes regex et à comprendre comment ça marche aussi :
    http://regexstorm.net/tester

Discussions similaires

  1. [XL-2007] Recherche chaîne de caractères dans CaseArray
    Par magikmed dans le forum Excel
    Réponses: 2
    Dernier message: 06/07/2015, 13h20
  2. Réponses: 2
    Dernier message: 14/08/2014, 14h24
  3. [Batch] Modification d'une chaîne de caractères dans un txt zippé
    Par Ristoune dans le forum Scripts/Batch
    Réponses: 2
    Dernier message: 16/03/2014, 19h07
  4. recherche chaîne de caractères dans PDF
    Par KSuupp dans le forum VB.NET
    Réponses: 3
    Dernier message: 23/02/2012, 09h28
  5. [AC-2000] Recherche chaîne de caractères dans une table
    Par tibogaet dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 09/01/2011, 12h38

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