我每行都要读取txt和csv文件。一行以CR-LF
结尾。
但在某些文件中,有CR
而没有LF
;相反,下一个物理行以FF
开头。 UFT 12将它们一起读取,就好像它是一行一样。
我使用fso读取文件:
Dim FileRead : Set FileRead = fso.OpenTextFile(file1)
Dim file2Read : Set file2Read = fso.OpenTextFile(file2)
FileStrR = FileRead.ReadLine
File2StrR = FileRead.ReadLine
我需要将这些文件的每一行与另一个文本文件进行比较:
if FileStrR = File2Str Then...
我尝试将FileStrR
分隔为数组:
FileStrA = REPLACE(FileStrR, ChrW(12),"**")
strarray = split(FileStrA,"**")
For h = 0 to UBound(strarray)
FileStr = strarray(h)
if FileStr = File2Str Then...
...
但是在这里我坚持从File2读取下一行以与FF
之后的任何内容进行比较。
更新 试过SkipLine:
Do Until fileRead.AtEndOfStream
ln=ln+1
FileStrA = REPLACE(FileStrR, ChrW(12),"**")
strarray = split(FileStrA,"**")
For h = 0 to UBound(strarray)
FileStr = strarray(h)
For s=1 to (ln+h)-1
File2Read.SkipLine
Next
print ln&"-"&ln+h&"-"&h
File2Str = File2Read.ReadLine
if FileStr1 = File2Str Then...
print "F1: "&FileStr
print "F2: "&File2str
Next
Loop
在这段代码中,行print ln&"-"&ln+h&"-"&h
打印正确的数字(ln应该是当前读取的行号)。但是字符串打印(print "F1: "&FileStr & VBNewLine & "F2: "&File2str
)给出了以下内容:
F1:2 | 8122 | TX | ...
F2:4 | 8123 | FG | ...
即使ln+h
为'ln'而'h'为0,但fso
再跳过一行,似乎也是如此。
答案 0 :(得分:2)
请参阅this question了解您无法使用
如果您的文件是ANSI / UTF-16而且不是很大,您可以使用
如果无法使用.ReadAll,则必须编写自己的.ReadLine版本,扫描CrLf或CrFF并在这些EOL之前返回数据。