CSV解析无法识别换行符(ASP)

CSV解析无法识别换行符(ASP),csv,vbscript,asp-classic,Csv,Vbscript,Asp Classic,我正在使用VBScript解析CSV数据并将其显示在表上。我已经设置了CSV,当我在Sublime文本中打开它时,标题和内容在不同的行上(除了标题之外只有一行内容)。它在崇高的文本中显示了两行 标题在行的末尾没有逗号,因此它不会将行拆分,基本上只是将第二行的第一个条目附加到标题行的最后一个条目上,因为从技术上讲,它没有被逗号分隔 我使用的代码是: <html> <head> </head> <body> <%@language="vbscri

我正在使用VBScript解析CSV数据并将其显示在表上。我已经设置了CSV,当我在Sublime文本中打开它时,标题和内容在不同的行上(除了标题之外只有一行内容)。它在崇高的文本中显示了两行

标题在行的末尾没有逗号,因此它不会将行拆分,基本上只是将第二行的第一个条目附加到标题行的最后一个条目上,因为从技术上讲,它没有被逗号分隔

我使用的代码是:

<html>
<head>
</head>
<body>
<%@language="vbscript"%>
<table border="1">
<%
dim csv_to_read, fso, act
csv_to_read="sample.csv"
set fso = createobject("scripting.filesystemobject")
set act = fso.opentextfile(server.mappath(csv_to_read))
'Read the first line of the csv, typically these are colum headings
Response.Write "<tr><th>" & replace(act.readline,",","</th><th>") & "</th></tr>" & vbCrLf
'Read the rest of the csv
Response.Write "<tr><td>" & replace(replace(act.readall,vbCrLf,"</td></tr>"&vbCrLf&"<tr><td>"),",","</td><td>") & "</td></tr>"
%>
<caption>Total Number of Records: <%=act.Line-1%></caption>
</table>
</body>
</html>

记录总数:
为什么它不能识别换行符


谢谢你的帮助

只需快速浏览一下,就会发现您正在编写格式不正确的HTML

Response.Write "<tr><td>" & replace(replace(act.readall,vbCrLf,"</td></tr>"&vbCrLf&"<tr><td>"),",","</td><td>") & "</td></tr>"
Response.Write”“&replace(replace(act.readall,vbCrLf,“&vbCrLf&”),,,,,)&“
我将内部replace理解为用结束表单元格/表行替换每个回车框 外部替换是用闭合单元格/打开单元格替换逗号 然后追加另一个结束单元格/结束行

在我看来,行循环,无论是否更高效,都更容易阅读和调试。如果这适用于你的情况,请考虑这样的事情:


I我认为您的问题是由于文件没有vbCrLf的EOL标记(但可能是crLf)造成的。证据:

s = "1,2,3" & vbLf & "4,5,6"
h = "<tr><td>" & replace(replace(s,vbCrLf,"</td></tr>" & vbCrLf & "<tr><td>"),",","</td><td>") & "</td></tr>"
WScript.Echo "vbLf"
WScript.Echo h
s = "1,2,3" & vbCrLf & "4,5,6"
h = "<tr><td>" & replace(replace(s,vbCrLf,"</td></tr>" & vbCrLf & "<tr><td>"),",","</td><td>") & "</td></tr>"
WScript.Echo "vbCrLf"
WScript.Echo h
s=“1,2,3”&vbLf和“4,5,6”
h=“”&replace(替换(s、vbCrLf、“&vbCrLf&”)、“、”、“)&”
WScript.Echo“vbLf”
Echo.h
s=“1,2,3”和vbCrLf&“4,5,6”
h=“”&replace(替换(s、vbCrLf、“&vbCrLf&”)、“、”、“)&”
WScript.Echo“vbCrLf”
Echo.h
输出:

cscript 23072652.vbs
vbLf
<tr><td>1</td><td>2</td><td>3
4</td><td>5</td><td>6</td></tr>
vbCrLf
<tr><td>1</td><td>2</td><td>3</td></tr>
<tr><td>4</td><td>5</td><td>6</td></tr>
cscript 23072652.vbs
.ReadAll() (faked):
1,2,3
4,5,6
step 1 - EOL handling:
1,2,3</td></tr>
<tr><td>4,5,6
step 2 - comma handling:
1</td><td>2</td><td>3</td></tr>
<tr><td>4</td><td>5</td><td>6
step 3 - head & tail I:
<tr><td>1</td><td>2</td><td>3</td></tr>
<tr><td>4</td><td>5</td><td>6</td></tr>
step 4 - head & tail II:
<!DOCTYPE html><html><head><title>replace demo</title></head><body><table>
<tr><td>1</td><td>2</td><td>3</td></tr>
<tr><td>4</td><td>5</td><td>6</td></tr>
</table></body></html>
cscript 23072652.vbs
vbLf
123
456
换行字符
123
456
(我希望输出将向循环倡导者证明双替换生成有效的HTML)

更新wrt注释:

此版本的脚本:

s = "1,2,3" & vbCrLf & "4,5,6"
WScript.Echo ".ReadAll() (faked):"
WScript.Echo s

' h = "<tr><td>" & replace(replace(s,vbCrLf,"</td></tr>" & vbCrLf & "<tr><td>"),",","</td><td>") & "</td></tr>"
' step by step

h = replace(s,vbCrLf,"</td></tr>" & vbCrLf & "<tr><td>")
WScript.Echo "step 1 - EOL handling:"
WScript.Echo h
h = replace(h,",","</td><td>")
WScript.Echo "step 2 - comma handling:"
WScript.Echo h
h = "<tr><td>" & h & "</td></tr>"
WScript.Echo "step 3 - head & tail I:"
WScript.Echo h
h = "<!DOCTYPE html><html><head><title>replace demo</title></head><body><table>" & vbCrLf & h & vbCrLf & "</table></body></html>"
WScript.Echo "step 4 - head & tail II:"
WScript.Echo h
s=“1,2,3”&vbCrLf和“4,5,6”
WScript.Echo.ReadAll()(伪造):
回音
“h=”“&replace(替换(s,vbCrLf,”&vbCrLf&“),”,“,”)&”
"一步一步,
h=替换(s、vbCrLf、“&vbCrLf&”)
WScript.Echo“步骤1-下线处理:”
Echo.h
h=替换(h,,,“”)
Echo“步骤2-逗号处理:”
Echo.h
h=“&h&”
Echo“步骤3-头和尾I:
Echo.h
h=“替换演示”&vbCrLf&h&vbCrLf&“
Echo“步骤4-头部和尾部II:
Echo.h
输出:

cscript 23072652.vbs
vbLf
<tr><td>1</td><td>2</td><td>3
4</td><td>5</td><td>6</td></tr>
vbCrLf
<tr><td>1</td><td>2</td><td>3</td></tr>
<tr><td>4</td><td>5</td><td>6</td></tr>
cscript 23072652.vbs
.ReadAll() (faked):
1,2,3
4,5,6
step 1 - EOL handling:
1,2,3</td></tr>
<tr><td>4,5,6
step 2 - comma handling:
1</td><td>2</td><td>3</td></tr>
<tr><td>4</td><td>5</td><td>6
step 3 - head & tail I:
<tr><td>1</td><td>2</td><td>3</td></tr>
<tr><td>4</td><td>5</td><td>6</td></tr>
step 4 - head & tail II:
<!DOCTYPE html><html><head><title>replace demo</title></head><body><table>
<tr><td>1</td><td>2</td><td>3</td></tr>
<tr><td>4</td><td>5</td><td>6</td></tr>
</table></body></html>
cscript 23072652.vbs
.ReadAll()(伪造):
1,2,3
4,5,6
步骤1-下线处理:
1,2,3
4,5,6
步骤2-逗号处理:
123
456
步骤3-头部和尾部I:
123
456
步骤4-头部和尾部II:
替换演示
123
456

应使双重替换的工作方式和所有零件都很重要。

@John不需要时为什么循环?我和Ekkhard在这件事上是一致的。我和你是一致的。你能解释一下为什么你会把这个s,vbCrLf,“&vbCrLf&”“而不仅仅是:s,vbCrLf,”?只是为了视觉效果???实际上,这是不需要的。只是字符串中的额外垃圾。@AllBlond-你说得对,HTML不需要换行符。但我不会叫它们“垃圾”。MxmastaMills可能已将其包括在内进行目视检查(在询问验证者之前);我认为它们很重要,因为昂斯基怀疑碎片的有效性。比如说:不要把它们放在生产代码中。