如何最好地生成CSV(逗号分隔的文本文件)以便下载ASP.NET?

前端之家收集整理的这篇文章主要介绍了如何最好地生成CSV(逗号分隔的文本文件)以便下载ASP.NET?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
这就是我所拥有的有用。但是,是否有更简单或更好的方式?

一个ASPX页面,我有下载链接

<asp:HyperLink ID="HyperLinkDownload" runat="server" NavigateUrl="~/Download.aspx">Download as CSV file</asp:HyperLink>

然后我已经下载了.aspx.vb代码

Public Partial Class Download
    Inherits System.Web.UI.Page

    Protected Sub Page_Load(ByVal sender As Object,ByVal e As System.EventArgs) Handles Me.Load
        'set header
        Response.Clear()
        Response.ContentType = "text/csv"
        Dim FileName As String = "books.csv"
        Response.AppendHeader("Content-Disposition","attachment;filename=" + FileName)

        'generate file content
        Dim db As New bookDevelopmentDataContext
        Dim Allbooks = From b In db.books _
                       Order By b.Added _
                       Select b
        Dim CsvFile As New StringBuilder
        CsvFile.AppendLine(CsvHeader())
        For Each b As Book In Allbooks
            CsvFile.AppendLine(bookString(b))
        Next

        'write the file
        Response.Write(CsvFile.ToString)
        Response.End()
    End Sub

    Function CsvHeader() As String
        Dim CsvLine As New StringBuilder
        CsvLine.Append("Published,")
        CsvLine.Append("Title,")
        CsvLine.Append("Author,")
        CsvLine.Append("Price")
        Return CsvLine.ToString
    End Function

    Function bookString(ByVal b As Book) As String
        Dim CsvLine As New StringBuilder
        CsvLine.Append(b.Published.ToShortDateString + ",")
        CsvLine.Append(b.Title.Replace(",","") + ",")
        CsvLine.Append(b.Author.Replace(",")
        CsvLine.Append(Format(b.Price,"c").Replace(",""))
        Return CsvLine.ToString
    End Function

End Class

解决方法

CSV格式有一些问题。你问自己这些问题:

>我的任何数据是否嵌入了逗号?
>我的任何数据是否嵌入双引号?
>我的任何数据有没有换行?
>我需要支持Unicode字符串吗?

我在上面的代码中看到了几个问题。逗号首先是你取消逗号:

CsvLine.Append(Format(b.Price,""))

为什么?在CSV中,您应该围绕任何带有逗号的引号:

CsvLine.Append(String.Format("\"{0:c}\"",b.Price))

(或类似的东西…我的VB不是很好)。如果您不确定是否有逗号,但是会引用引号。如果字符串中有引号,则需要将它们翻倍。 “变成”“。

b.Title.Replace("\"","\"\"")

如果你想要的话,用引号括起来。如果您的字符串中有换行符,则需要使用引号将字符串环绕。是的,CSV文件中允许使用文字换行符。这对人类来说看起来很奇怪,但这一切都很好。

一个好的CSV作者需要一些想法。一个好的CSV读取器(解析器)只是很难(而不是,正则表达式不足以解析CSV …它只会让你约95%的方式)。

然后有Unicode …或更一般的I18N(国际化)问题。例如,您正在以格式化的价格取消逗号。但是,假设价格是按照您在美国预期的格式。在法国,数字格式是相反的(使用的是句点,而不是逗号,反之亦然)。底线,尽可能使用与文化无关的格式。

虽然这里的问题是生成CSV,但您不可避免地需要解析CSV。在.NET中,我发现(免费)的最好的解析器是0700在CodeProject.我实际上使用它在生产代码,它真的很快,很容易使用!

猜你在找的asp.Net相关文章