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 :

Que fait ce code ?


Sujet :

C#

  1. #1
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 972
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 972
    Par défaut Que fait ce code ?
    Bonjour,

    Je reprends le développement de l'une de mes anciennes collègues (aujourd'hui partie de la société).
    Et je suis tombé sur un bout de code que je ne suis pas certain de bien comprendre.

    Ligne 44
    indexLine = newlines.FindIndex(newline.Contains);

    La routine complète :
    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
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
     
    private static void parseJsFile(FilePath filePath, Boolean isPathSupp, StreamWriter logwriter, List<string> newlines)
          {
              try
              {
                  if (System.IO.File.Exists(filePath.pathfilename))
                  {
                      using (System.IO.StreamReader file = new System.IO.StreamReader(filePath.pathfilename, System.Text.Encoding.UTF8))
                      {
                          try
                          {
                              // Extraction du contenu XML présent dans le csh.js :
                              // gXMLBuffer ="<?xml version=\"1.0\" encoding=\"utf-8\" ?><csh-info><item ...
                              String xmlBuffer = file.ReadToEnd();
                              xmlBuffer = xmlBuffer.Remove(0, 13);
                              xmlBuffer = xmlBuffer.Remove(xmlBuffer.Length-2, 2);
                              xmlBuffer = xmlBuffer.Replace("\\\"", "\"");
                              //System.IO.File.WriteAllText(@"c:\temp\test.xml", xmlBuffer);
     
                              XmlDocument xmlDoc = new XmlDocument();
                              xmlDoc.LoadXml(xmlBuffer);
     
                              XmlNode root = xmlDoc.DocumentElement;
                              XmlNodeList nodeList = root.SelectNodes("/csh-info/item");
                              foreach (XmlNode node in nodeList)
                              {
                                  /*exemple de ligne traitée
                                  <item topicurl="Utilisateurs_Acces/GroupesdeTravail.htm" mapnum="400000063" mapid="GroupesdeTravail"/> 
                                   */
                                  string newline;
                                  if (isPathSupp)
                                  {
                                      newline = node.Attributes["mapnum"].Value + ";" + filePath.pathSuppname + @"/topic.htm#t=" + node.Attributes["topicurl"].Value;
                                  }
                                  else
                                  {
                                      newline = node.Attributes["mapnum"].Value + ";topic.htm#t=" + node.Attributes["topicurl"].Value;
                                  }
     
                                  if (!string.IsNullOrEmpty(newline))
                                  {
                                      int indexLine = -1;
                                      if (newlines.Count > 0)
                                          indexLine = newlines.FindIndex(newline.Contains);
                                      if (indexLine < 0)
                                          newlines.Add(newline);
                                  }
     
                              }
     
                          }
                          catch (Exception ex)
                          {
                              logwriter.WriteLine("Erreur lors de la lecture du fichier: " + filePath.pathfilename);
                              logwriter.WriteLine(ex.Message);
                          }
                      }
                  }
              }
              catch (Exception ex)
              {
                  logwriter.WriteLine("Impossible de lire le fichier: " + filePath.pathfilename);
                  throw new Exception("Erreur lors de la lecture du fichier, " + filePath.pathfilename + " : " + ex.Message);
              }
          }
    Merci.

  2. #2
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 972
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 972
    Par défaut
    Je me réponds à moi même.
    J'ai mis ce code dans une application console et simulé les données en entrée et je pense avoir trouvé la solution.

    FindIndex va boucler et appeler la méthode Contains() et lui fournir le paramètre value avec le contenu de la liste à cet index.
    Cela revient à faire :
    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
    int i = 0;
    bool found = false;
    while (i < newlines.Count && !found)
    {
        String value = newlines[i];
        if (newline.Contains(value))
        {
            found = true;
        }
        else
        {
            i++;
        }
    }
     
    if (found) return i;
    else return -1;
    Edit :
    Cela revient à faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    newlines.FindIndex(it => newline.Contains(it))
    La syntaxe ressemble beaucoup, je m'en rends compte.
    Je ne sais pas pourquoi, mais je trouve celle-ci plus explicite.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Que fait ce code ?
    Par vieuxmonsieur dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 19/09/2012, 13h17
  2. Que fait ce code ?
    Par teol91 dans le forum x86 32-bits / 64-bits
    Réponses: 9
    Dernier message: 24/10/2011, 10h38
  3. que fait ce code
    Par improcess dans le forum Images
    Réponses: 4
    Dernier message: 02/10/2011, 14h39
  4. que fait ce code !
    Par guitariste dans le forum C++
    Réponses: 11
    Dernier message: 01/05/2008, 15h29
  5. que fait ce code (et surtout pourquoi??)
    Par elekis dans le forum C++
    Réponses: 3
    Dernier message: 13/09/2005, 10h47

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