2009-06-07 4 views
8

Je dois imprimer certains fichiers PDF pour un projet au travail. Est-il possible de fournir un remplissage dynamique, IE. n'utilisant pas un code codé en dur dans la chaîne de format. Mais plutôt basé sur le compte d'une liste.Mise en forme de chaîne dynamique à l'aide de string.format et List <T> .Count()

Ex.

Si ma liste est de 1000 éléments à long, je veux avoir ceci:

Part_0001_Filename.pdf ... Part_1000_Filename.pdf

Et si ma liste est dire 500 éléments long, je veux avoir ce mise en forme:

Part_001_Filename.pdf ... Part_500_Filename.PDF

La raison est la façon dont les noms de fichier des commandes Windows. Il les trie par ordre alphabétique de gauche à droite ou de droite à gauche, donc je dois utiliser le zéro initial, sinon la commande dans le dossier est foirée.

+0

En fait, Explorer utilise en fait naturel ordre numérique qui va trier les numéros dans le bon ordre, même sans zéros de tête. – Joey

+1

@Johannes: C'est peut-être vrai dans Vista/7, mais je suis sûr que ça ne fonctionne pas de cette façon dans XP. Je peux me tromper, mais je me souviens quand j'ai énuméré les fichiers, ils étaient dans un ordre différent de celui qu'Exploreur leur a montré. – Chris

Répondre

8

La façon la plus simple est sans doute de construire la chaîne de format dynamique aussi:

static List<string> FormatFileNames(List<string> files) 
{ 
    int width = (files.Count+1).ToString("d").Length; 

    string formatString = "Part_{0:D" + width + "}_{1}.pdf"; 

    List<string> result = new List<string>(); 

    for (int i=0; i < files.Count; i++) 
    { 
     result.Add(string.Format(formatString, i+1, files[i])); 
    } 
    return result; 
} 

Cela pourrait se faire un peu plus simplement avec LINQ si vous aimez:

static List<string> FormatFileNames(List<string> files) 
{ 
    int width = (files.Count+1).ToString("d").Length;   
    string formatString = "Part_{0:D" + width + "}_{1}.pdf"; 

    return files.Select((file, index) => 
          string.Format(formatString, index+1, file)) 
       .ToList(); 
} 
+0

@Jon: Merci beaucoup pour votre aide. J'ai utilisé votre implémentation LINQ pour stocker la chaîne de format pour chaque fichier dans la liste que j'ai créée. – Chris