【发布时间】:2017-11-10 16:49:41
【问题描述】:
我有 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 之后的内容进行比较。
更新 尝试跳线:
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 (print "F1: "&FileStr & VBNewLine & "F2: "&File2str) 给出了以下内容:
F1: 2|8122|TX|...
F2: 4|8123|FG|...
似乎即使ln+h 是 'ln' 而 'h' 是 0,但 fso 又跳过了一行。
【问题讨论】:
-
我在 Notepad++ 中打开它,还打印了 UFT 读取的内容。对于那些行(就像 65 行中的 1 行),如下所示:
...Line 64 Text CR-LFLine 65 Text CRFF Text CR-LFLine 67 Text CR-LF... -
它说的是 UTF-8。试图转换为 ANSI;它在
CR之后添加了LF。问题是,理想情况下,我不能也无权重新定义编码或将文件另存为具有原始其他编码的新文件(( -
您的文件编码有问题,这是肯定的。十六进制编辑器显示什么?您可以在两个文件的问题中包含它吗?同时显示读取文件的代码(
FileRead的定义)