2009-06-07 32 views
8

Tôi phải in ra một số tệp PDF cho một dự án tại nơi làm việc. Có cách nào để cung cấp đệm năng động, IE. không sử dụng mã được mã hóa cứng trong chuỗi định dạng. Nhưng thay vào đó dựa trên số lượng Danh sách.định dạng chuỗi động bằng cách sử dụng string.format và Danh sách <T> .Count()

Ví dụ:

Nếu danh sách của tôi có chiều dài 1000 yếu tố, tôi muốn có điều này:

Part_0001_Filename.pdf ... Part_1000_Filename.pdf

Và nếu danh sách của tôi là nói dài 500 yếu tố, tôi muốn có này định dạng:

Part_001_Filename.pdf ... Part_500_Filename.PDF

lý do của việc này là như thế nào Windows lệnh tên tập tin. Nó sắp xếp chúng theo thứ tự chữ cái từ trái sang phải hoặc từ phải sang trái, Vì vậy, tôi phải sử dụng số 0 đứng đầu, nếu không thứ tự trong thư mục sẽ bị sai lệch.

+0

Trong thực tế, Explorer thực sự sử dụng tự nhiên thứ tự số sẽ sắp xếp các số theo thứ tự đúng ngay cả khi không có số 0 đứng đầu. – Joey

+1

@Johannes: Có lẽ điều này là đúng trong Vista/7, nhưng tôi rất chắc chắn nó không hoạt động theo cách đó trong XP. Tôi có thể sai, nhưng tôi nhớ khi tôi liệt kê các tập tin, chúng theo một thứ tự khác so với Explorer cho thấy chúng. – Chris

Trả lời

8

Cách đơn giản nhất có lẽ là để xây dựng chuỗi định dạng tự động quá:

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

Điều này có thể được thực hiện một chút đơn giản hơn với LINQ nếu bạn thích:

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: Cảm ơn rất nhiều vì sự giúp đỡ của bạn. Tôi đã sử dụng triển khai LINQ của bạn để lưu trữ chuỗi định dạng cho từng tệp trong danh sách mà tôi đã tạo. – Chris

Các vấn đề liên quan