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 :

[Débutant]Tri nom de fichiers avec 2 paramètres


Sujet :

C#

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Août 2005
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2005
    Messages : 159
    Points : 77
    Points
    77
    Par défaut [Débutant]Tri nom de fichiers avec 2 paramètres
    Bonjour,

    Voila je me demandais comment je pourrais faire ceci mieux que je le fait moi (via un XSLT).

    Soit une liste de fichier : AG1234567890??????$$$$sta.pdf

    $$$$= une année
    ?????? = un numéro

    comment faire pour trouver celui qui est le plus récent (par rapport a l'année) et qui a le plus grand numéro?

    Au départ j'ai mes fichiers dans un object FileInfo[].

    Moi j'ai fait un xml ou j'extrais mes deux valeurs en attribut puis via un xsl:sort dans un XSLT je les trie et récupére le plus récent.

    Pouvez-vous me donner une piste afin d'obtenir un temps d'éxécution plus bas qu'avec mon XSLT?

    Merci

  2. #2
    Membre expert
    Avatar de hed62
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2007
    Messages
    2 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 029
    Points : 3 134
    Points
    3 134
    Par défaut
    Avec les classe System.IO:

    - Ouvrir le répertoire ( classe Directory )
    - Initialiser une variable de type File avec le premier fichier trouvé
    - Initilaiser deux variable de type int avec la date et le num de ce fichier
    - Pour tous les fichiers :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    int annee = int.Parse (File.Name.Substring(index_debut_annee,index_fin_annee);
    int numero = int.Parse (File.Name.Substring(index_debut_num,index_fin_num);
     
    if(annee > max_annee)
    //mettre à jour les variables max et le File
    elseif( annee == max_annee && num > max_num)
    //mettre à jour les variables max et le File
    Ca devrait aller.

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    700
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2005
    Messages : 700
    Points : 780
    Points
    780
    Par défaut
    Je pense que je définirais un objet avec tes infos :
    - debut du nom de fichier
    - année (en string en ou en vrai Date)
    - numéro
    - fin du fichier
    (- extension?)

    Comme cela je pourrais créer une List<TonObjet> taliste;

    Pour utiliser taliste.Sort( IComparer )
    Ou j'utiliserais un Comparer préalablement définit pour ton objet.

    Comme ca tu récuperes une List triée hyper rapidement, et tu peux implémenter différents Comparers selon le besoin (meme par extension)

    [edit](zut j'ai vu trop grand J'avais pa bien lu qu'il voulait juste le plus récent au plus grand numéro xD )
    [redit] Oui enfin ca dépend du besoin hein^^ La méthode de Hed62 est plus rapide à réaliser si c'est juste une utilisation -_-

  4. #4
    Membre expert
    Avatar de hed62
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2007
    Messages
    2 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 029
    Points : 3 134
    Points
    3 134
    Par défaut
    La réponse de Chubyone est meilleure que la mienne, si tu veux garder une liste triée pour plus tard. Dans mon code tu ne gardes la référence que sur le plus récent.

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Août 2005
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2005
    Messages : 159
    Points : 77
    Points
    77
    Par défaut
    Alors j'ai choisi la version de hed62 car c'est vrai que c'est plus rapidement fait et finalement c'est pas ca qui tourne le plus mais c'est vrai que je gagne un peu de temps et surtout de la taille de l'appli étant donnée que j'ai plus de XSLT.

    voici ma soluce:
    Code C# : 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
     
    string ScanName = "";
    if (files != null && files.Length != 1)
    {
       IXMLDOMDocument2 ScanList = (IXMLDOMDocument2)thisXDocument.CreateDOM();
       ScanList.loadXML("ScanList");
     
         int max_annee = 1900;
         int max_Numero = 0;
     
            foreach (FileInfo file in files)
            {
                 int annee = int.Parse(file.Name.Substring(18,4));
                 int numero = int.Parse(file.Name.Substring(12,6));
                 string filename = file.Name;
     
                 if (annee > max_annee)
                 {
                       max_annee = annee;
                       max_Numero = numero;
                       ScanName = filename;
                 }
                  else if (annee == max_annee && numero > max_Numero)
                {
                      max_annee = annee;
                      max_Numero = numero;
                      ScanName = filename;
                }
         }
    }
    else if (files.Length == 1)
    {
          ScanName = files[0].Name;
    }

    Merci a vous deux pour vos réponse

    ++

  6. #6
    Membre expert
    Avatar de hed62
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2007
    Messages
    2 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 029
    Points : 3 134
    Points
    3 134
    Par défaut
    N'oublie pas le tag .

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

Discussions similaires

  1. [PHPExcel] Load avec nom du fichier passé en paramètre
    Par al1_22 dans le forum Bibliothèques et frameworks
    Réponses: 10
    Dernier message: 04/04/2013, 18h48
  2. [RegExp] Nom de fichier avec $
    Par GLDavid dans le forum Langage
    Réponses: 2
    Dernier message: 05/04/2006, 21h43
  3. Réponses: 7
    Dernier message: 07/01/2006, 15h18
  4. Réponses: 3
    Dernier message: 12/07/2005, 13h33
  5. changement de nom de fichier avec smartupload
    Par bourvil dans le forum ASP
    Réponses: 2
    Dernier message: 24/05/2004, 14h50

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