private void WriteItem<T>(StreamWriter sr, T item)
{
string itemString = item.ToString();
if(itemString.IndexOfAny(new char[] { '"', ',', '\n', '\r' }) != -1)//skip test and always escape for different speed/filesize optimisation
{
sr.Write('"');
sr.Write(itemString.Replace("\"", "\"\""));
sr.Write('"');
}
else
sr.Write(itemString);
}
private void WriteLine<T>(StreamWriter sr, IEnumerable<T> line)
{
bool first = true;
foreach(T item in line)
{
if(!first)
sr.Write(',');
first = false;
WriteItem(sr, item);
}
}
private void WriteCSV<T>(StreamWriter sr, IEnumerable<IEnumerable<T>> allLines)
{
bool first = true;
foreach(IEnumerable<T> line in allLines)
{
if(!first)
sr.Write('\n');
first = false;
WriteLine(sr, line);
}
}
private void WriteCSV<T>(HttpResponse response, IEnumerable<IEnumerable<T>> allLines)
{
response.ContentType = "text/csv";
WriteCSV(response.Output, allLines);
}
Bạn cũng có thể gửi tiêu đề bố cục nội dung bằng tên tệp được đề xuất.
Chỉnh sửa: Trong trường hợp cần phải xen kẽ một hành động giữa các mục trong một liệt kê (như dấu phẩy và dòng mới ở trên), tôi thích thay vì giữ một boolean giữ kiểm tra, tôi xử lý điều tra trực tiếp, và sau đó xử lý phần tử đầu tiên tách biệt với phần còn lại. Tôi bắt đầu làm điều này như là một lựa chọn vi trong một đẩy hiệu quả nhưng đã phát triển để chỉ tìm thấy nó một biểu hiện tốt hơn của một con đường mã khác với mục đầu tiên.Như vậy, bây giờ tôi muốn viết ở trên như:
private void WriteLine<T>(StreamWriter sr, IEnumerable<T> line)
{
using(var en = line.GetEnumerator())
if(en.MoveNext())
{
WriteItem(sr, en.Current);
while(en.MoveNext())
{
sr.Write(',');
WriteItem(sr, en.Current);
}
}
private void WriteCSV<T>(StreamWriter sr, IEnumerable<IEnumerable<T>> allLines)
{
using(var en = allLines.GetEnumerator())
if(en.MoveNext())
{
WriteLine(sr, en.Current);
while(en.MoveNext())
{
sr.Write('\n');
WriteLine(sr, en.Current);
}
}
}
Nguồn
2010-08-20 17:28:30
Sau khi đọc xung quanh. Tất cả những gì tôi thực sự cần làm là lặp qua và xuất dữ liệu được phân cách bằng dấu phẩy với/n ở cuối hàng và tiếp tục lặp lại cho đến khi hoàn tất ... lưu tệp dưới dạng .csv và sau đó đóng luồng ... đúng không? – Tom
Bạn cũng cần phải đặt loại nội dung và nếu một biểu đồ có thể chứa ký tự '' ',', 'hoặc dòng mới bạn cần phải thoát khỏi nó. Mã cho câu trả lời của tôi là –