VBS 文件读取:将 CR FF 更改为 CR LF

VBS File Read: Change CR FF to CR LF

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

请参阅 this 以了解您不能使用

  1. 将 FileSystemObject 转换为 read/write UTF-8
  2. .ReadLine 如果 EOL 混乱(不是 CrLf 或 Lf)

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

  1. .ReadAll 读取 'bad' 文件
  2. 用 CrLf 替换 CrFF
  3. 拆分 CrLf 以获得行数组
  4. 将这些行与 'good' 文件中的 .ReadLines 进行比较

如果 .ReadAll 不可能,您必须编写自己的 .ReadLine 版本来扫描 CrLf 或 CrFF 以及 returns 这些 EOL 之前的数据。