2009-06-07 7 views
8

Devo stampare alcuni PDF per un progetto al lavoro. C'è modo di fornire un riempimento dinamico, IE. non usare un codice codificato nella stringa di formato. Ma invece basato sul conteggio di una lista.formattazione di stringhe dinamiche utilizzando string.format ed Elenco <T> .Count()

Es.

Se il mio elenco è lungo 1000 elementi, voglio avere questo:

Part_0001_Filename.pdf ... Part_1000_Filename.pdf

E se la mia lista è lunga dire 500 elementi, voglio avere questo formattazione:

Part_001_Filename.pdf ... Part_500_Filename.PDF

La ragione di questo è come un file di Windows ordini nomi. Li ordina alfabeticamente da sinistra a destra o da destra a sinistra, quindi devo usare lo zero iniziale, altrimenti l'ordine nella cartella è incasinato.

+0

Infatti, Explorer utilizza in realtà naturale ordinamento numerico che ordinerà i numeri nell'ordine corretto anche senza zeri iniziali. – Joey

+1

@Johannes: Forse questo è vero in Vista/7, ma sono sicuro che non funziona in questo modo in XP. Potrei sbagliarmi, ma ricordo quando ho elencato i file, erano in un ordine diverso da quello mostrato da Explorer. – Chris

risposta

8

Il modo più semplice è probabilmente per costruire la stringa di formato troppo dinamico:

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; 
} 

Ciò potrebbe essere fatto un po 'più semplice con LINQ Se ti piace:

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: Grazie mille per il tuo aiuto. Ho usato la tua implementazione LINQ per memorizzare la stringa di formato per ogni file nell'elenco che ho creato. – Chris

Problemi correlati