-1

我有 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...

我试图将FileStrRas 数组分开:

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跳过了一行。

4

1 回答 1

2

看到这个就知道你不能用

  1. 读取/写入 UTF-8 的 FileSystemObject
  2. .ReadLine 如果 EOL 搞砸了(不是 CrLf 或 Lf)

如果您的文件是 ANSI/UTF-16 且不大,您可以使用

  1. .ReadAll 啜饮“坏”文件
  2. 将 CrFF 替换为 CrLf
  3. 在 CrLf 上拆分以获取行数组
  4. 这些行与“好”文件中的 .ReadLines 进行比较

如果 .ReadAll 不可行,您必须编写自己的 .ReadLine 版本来扫描 CrLf 或 CrFF 并在这些 EOL 之前返回数据。

于 2017-11-10T19:10:26.083 回答