Asp classic vbscript skipline和cr行结束符
由于某种原因,当我使用objFile.ReadLine方法读取文本文件时,整个文件作为一个长行返回。我正在打开的文件使用CR行结尾,而不是CRLF或LF行结尾。如果ReadLine无法识别CR行结尾,有人知道如何在vbscript中逐行读取此文件吗?代码如下:Asp classic vbscript skipline和cr行结束符,asp-classic,vbscript,filesystemobject,Asp Classic,Vbscript,Filesystemobject,由于某种原因,当我使用objFile.ReadLine方法读取文本文件时,整个文件作为一个长行返回。我正在打开的文件使用CR行结尾,而不是CRLF或LF行结尾。如果ReadLine无法识别CR行结尾,有人知道如何在vbscript中逐行读取此文件吗?代码如下: Set objFSO = CreateObject("Scripting.FileSystemObject") Set txsInput = objFSO.OpenTextFile("C:\Path\To\My\File.csv",1)
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set txsInput = objFSO.OpenTextFile("C:\Path\To\My\File.csv",1)
'Read lines one by one
Do While txsInput.AtEndOfStream <> True
strTemp = txsInput.ReadLine
msgbox strTemp
Loop
Set objFSO=CreateObject(“Scripting.FileSystemObject”)
设置txsInput=objFSO.OpenTextFile(“C:\Path\To\My\File.csv”,1)
"逐行读,
当txsInput.AtEndOfStream为True时执行
strTemp=txsInput.ReadLine
msgbox strTemp
环
我得到的不是每行的警报,而是整个文件的警报。感谢您的帮助。也许不是最好的主意(也没有经过测试),但试试这个
Do Until txsInput.AtEndOfStream
strTemp = ""
Do
strChar = txsInput.Read(1)
If strChar <> vbCr Then
strTemp = strTemp & strChar
Else
Exit Do
End If
Loop
If Len(strTemp) Then MsgBox strTemp
Loop
Do直到txsInput.AtEndOfStream
strTemp=“”
做
strChar=txsInput.Read(1)
如果是strChar vbCr,则
strTemp=strTemp&strChar
其他的
退出Do
如果结束
环
如果为Len(strTemp),则为MsgBox strTemp
环
也许不是最好的主意(也没有经过测试),但试试这个
Do Until txsInput.AtEndOfStream
strTemp = ""
Do
strChar = txsInput.Read(1)
If strChar <> vbCr Then
strTemp = strTemp & strChar
Else
Exit Do
End If
Loop
If Len(strTemp) Then MsgBox strTemp
Loop
Do直到txsInput.AtEndOfStream
strTemp=“”
做
strChar=txsInput.Read(1)
如果是strChar vbCr,则
strTemp=strTemp&strChar
其他的
退出Do
如果结束
环
如果为Len(strTemp),则为MsgBox strTemp
环
.ReadLine
在您的情况下不起作用,因为它取决于vbLf
字符的存在。如果不想对换行符进行重新编码,可以执行建议的操作(如果文件较大),或者读取整个文件并在vbCr
处拆分(如果文件不太大):
可以按如下方式对文件进行重新编码:
Set fso = CreateObject("Scripting.FileSystemObject")
filename = "C:\path\to\your.csv"
Set infile = fso.OpenTextFile(filename)
Set outfile = fso.OpenTextFile(filename & ".tmp", 2)
Do Until infile.AtEndOfStream
c = infile.Read(1)
If c = vbCr Then
outfile.Write vbCrLf
Else
outfile.Write c
End If
Loop
infile.Close
outfile.Close
fso.DeleteFile filename, True
fso.MoveFile filename & ".tmp", filename
或者你可以用类似的东西来转换。大多数文本编辑器(例如,…)也可以进行这种转换。
.ReadLine
在您的情况下不起作用,因为它取决于vbLf
字符的存在。如果不想对换行符进行重新编码,可以执行建议的操作(如果文件较大),或者读取整个文件并在vbCr
处拆分(如果文件不太大):
可以按如下方式对文件进行重新编码:
Set fso = CreateObject("Scripting.FileSystemObject")
filename = "C:\path\to\your.csv"
Set infile = fso.OpenTextFile(filename)
Set outfile = fso.OpenTextFile(filename & ".tmp", 2)
Do Until infile.AtEndOfStream
c = infile.Read(1)
If c = vbCr Then
outfile.Write vbCrLf
Else
outfile.Write c
End If
Loop
infile.Close
outfile.Close
fso.DeleteFile filename, True
fso.MoveFile filename & ".tmp", filename
或者你可以用类似的东西来转换。大多数文本编辑器(例如,,…)也可以进行这种转换。标记为重复。看看这里:标记为重复。看看这里:我会删除
Else
分支并检查循环底部的条件:循环直到strChar=vbCr或txsInput.AtEndOfStream
。它比使用Exit Do
更干净。我会放弃Else
分支,检查循环底部的条件:循环,直到strChar=vbCr或txsInput.AtEndOfStream
。它比使用退出操作更干净。谢谢!我一次读完了整个文件,因为文件不会太大,然后将其拆分以计算文件中的行数。谢谢!我一次读取了整个文件,因为文件不会很大,然后将其拆分以计算文件中的行数。