【问题标题】:VBS File Read: Change CR FF to CR LFVBS 文件读取:将 CR FF 更改为 CR LF
【发布时间】: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的定义)

标签: vbscript hp-uft fso


【解决方案1】:

this了解不能用

  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 之前返回数据。

【讨论】:

  • 文件是 UTF-8,它们的大小从几 KB 到几十 MB 不等...(((顺便说一下,FSO 可以很好地读取任何没有弄乱 EOL 的文件,与大小)
  • @Salek 如果您使用 FSO 读取 UTF-8 文件,那是您的问题。虽然它可能“看起来”正确阅读,但你最终得到的是编码不匹配,它会反过来咬你。您需要停止假设自己最了解并听取所提供的建议。
  • @Salek - 我的答案包含指向文档的链接(链),这些文档明确指出对于 UFT-8,FSO NOT。所以你就像一个从高楼跳下来的人,经过 5 楼时仍然咧着嘴笑——更糟糕的是,你邀请其他人跟着你跳。
  • 无法更改原始文件中的任何内容,但使用 ReadAll 将 FF 替换为 LF 并使用 ANSI 保存为新文件。现在,ReadLine 工作))
  • @Salek 使用 ADODB.StreamCharset = “UTF-8”。见stackoverflow.com/a/13855268/692942
猜你喜欢
  • 2010-12-04
  • 2011-03-07
  • 1970-01-01
  • 1970-01-01
  • 2011-03-07
  • 1970-01-01
  • 1970-01-01
  • 2019-08-06
  • 1970-01-01
相关资源
最近更新 更多