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

时间:2017-11-10 16:49:41

标签: vbscript hp-uft fso

我每行都要读取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再跳过一行,似乎也是如此。

1 个答案:

答案 0 :(得分:2)

请参阅this question了解您无法使用

  1. FileSystemObject读/写UTF-8
  2. .ReadLine,如果EOL混乱(不是CrLf或Lf)
  3. 如果您的文件是ANSI / UTF-16而且不是很大,您可以使用

    1. 。读到所有可能会让人感到不舒服。文件
    2. 用CrLf替换CrFF
    3. 拆分CrLf以获取行数
    4. 将这些行与“好”中的.ReadLines进行比较。文件
    5. 如果无法使用.ReadAll,则必须编写自己的.ReadLine版本,扫描CrLf或CrFF并在这些EOL之前返回数据。