Zac*_*son 18 vb.net csv asp.net file-io
这就是我所拥有的.有用.但是,有更简单或更好的方法吗?
一个ASPX页面,我有下载链接...
<asp:HyperLink ID="HyperLinkDownload" runat="server" NavigateUrl="~/Download.aspx">Download as CSV file</asp:HyperLink>
Run Code Online (Sandbox Code Playgroud)
然后我得到了Download.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
Run Code Online (Sandbox Code Playgroud)
Sim*_*bee 22
CSV格式有一些问题.你问过自己这些问题:
我在上面的代码中看到了几个问题.首先是逗号的东西......你正在删除逗号:
CsvLine.Append(Format(b.Price, "c").Replace(",", ""))
Run Code Online (Sandbox Code Playgroud)
为什么?在CSV中,您应该包含任何带引号的逗号:
CsvLine.Append(String.Format("\"{0:c}\"", b.Price))
Run Code Online (Sandbox Code Playgroud)
(或类似的东西......我的VB不是很好).如果你不确定是否有逗号,但在它周围加上引号.如果字符串中有引号,则需要通过加倍来转义它们."成为"".
b.Title.Replace("\"", "\"\"")
Run Code Online (Sandbox Code Playgroud)
如果你愿意,可以用引号括起来.如果字符串中有换行符,则需要用引号括住该字符串...是的,CSV文件中允许使用文字换行符.对人类来说看起来很奇怪,但这一切都很好.
一个好的CSV编写器需要一些思考.一个好的CSV阅读器(解析器)只是很难(并且没有,正则表达式不足以解析CSV ...它只会让你大约95%的方式).
然后是Unicode ...或更普遍的I18N(国际化)问题.例如,您正在从格式化价格中删除逗号.但这是假设价格的格式符合您在美国的预期.在法国,数字格式是相反的(使用句号代替逗号,反之亦然).最重要的是,尽可能使用与文化无关的格式.
虽然这里的问题是生成 CSV,但您不可避免地需要解析CSV.在.NET中,我找到的最好的解析器(免费)是CodeProject上的Fast CSV Reader.我实际上在生产代码中使用它,它真的非常快,而且非常容易使用!
我通过以下函数传递所有CSV数据:
Function PrepForCSV(ByVal value As String) As String
return String.Format("""{0}""", Value.Replace("""", """"""))
End Function
Run Code Online (Sandbox Code Playgroud)
此外,如果你没有提供HTML,你可能需要一个http处理程序(.as h x文件)而不是一个完整的网页.如果你在Visual Studio中创建一个新的处理程序,你很可能只是将你现有的代码复制到main方法中,它只会起作用,你的工作会有很小的性能提升.