2009-06-07 7 views
8

私は仕事中のプロジェクトのためにいくつかのPDFを印刷しなければなりません。動的パッディング、IEを提供する方法はありますか?書式文字列にハードコードされたコードを使用しないでください。しかし、代わりにリストのカウントに基づいています。string.formatとListを使用した動的な文字列書式<T> .Count()

Ex。

私のリストは、1000個の要素長い場合、私はこれが欲しい:

Part_0001_Filename.pdf ... Part_1000_Filename.pdf

をそして、私のリストが長い500個の要素を言うのであれば、私はこれが欲しいですフォーマット:

Part_001_Filename.pdf ... Part_500_Filename.PDF

は、この理由は、Windowsの受注はファイル名をどのようにです。それはアルファベット順に左から右または右から左にソートされます。したがって、先行ゼロを使用する必要があります。そうでない場合、フォルダ内の順序が乱れます。

+0

実際には、エクスプローラは、実際に自然使用しています先頭のゼロを付けずに正しい順序で数値をソートする数値の順序付け。 – Joey

+1

@Johannes:おそらくこれはVista/7でも当てはまりますが、XPではそれがうまくいかないと確信しています。私は間違っている可能性がありますが、ファイルを列挙すると、Explorerとは異なる順序で表示されていました。 – Chris

答えて

8

最も簡単な方法は、あまりにもダイナミックにフォーマット文字列を構築するために、おそらくです:

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

あなたが好きな場合、これはLINQでもう少し簡単に行うことができます。

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

@ジョン:ご協力いただきありがとうございます。 LINQの実装を使って、作成したリストの各ファイルの書式文字列を格納しました。 – Chris

関連する問題