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 以了解您不能使用
- 将 FileSystemObject 转换为 read/write UTF-8
- .ReadLine 如果 EOL 混乱(不是 CrLf 或 Lf)
如果您的文件 ANSI/UTF-16 并且不大,您可以使用
- .ReadAll 读取 'bad' 文件
- 用 CrLf 替换 CrFF
- 拆分 CrLf 以获得行数组
- 将这些行与 'good' 文件中的 .ReadLines 进行比较
如果 .ReadAll 不可能,您必须编写自己的 .ReadLine 版本来扫描 CrLf 或 CrFF 以及 returns 这些 EOL 之前的数据。
我有 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 以了解您不能使用
- 将 FileSystemObject 转换为 read/write UTF-8
- .ReadLine 如果 EOL 混乱(不是 CrLf 或 Lf)
如果您的文件 ANSI/UTF-16 并且不大,您可以使用
- .ReadAll 读取 'bad' 文件
- 用 CrLf 替换 CrFF
- 拆分 CrLf 以获得行数组
- 将这些行与 'good' 文件中的 .ReadLines 进行比较
如果 .ReadAll 不可能,您必须编写自己的 .ReadLine 版本来扫描 CrLf 或 CrFF 以及 returns 这些 EOL 之前的数据。