Asp classic vbscript skipline和cr行结束符

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)

由于某种原因,当我使用objFile.ReadLine方法读取文本文件时,整个文件作为一个长行返回。我正在打开的文件使用CR行结尾,而不是CRLF或LF行结尾。如果ReadLine无法识别CR行结尾,有人知道如何在vbscript中逐行读取此文件吗?代码如下:

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
。它比使用退出操作更干净。谢谢!我一次读完了整个文件,因为文件不会太大,然后将其拆分以计算文件中的行数。谢谢!我一次读取了整个文件,因为文件不会很大,然后将其拆分以计算文件中的行数。