0

我有一个 TXT 文件,需要通过应用程序导入,但由于某种原因,我需要先在写字板中打开它,然后在导入之前保存它。我猜这与换行符有关。因为如果我先在记事本中打开它,则没有换行符,但如果我用写字板打开它,则行是分开的。

有谁知道为什么会发生这种情况以及我如何避免手动打开文件并使用写字板保存它?该应用程序是用 vb 6 (Yikes!) 编写的。

谢谢你的帮助

4

3 回答 3

2

这是一个行尾问题。您的代码(和记事本)希望看到回车(CR)/换行(LF)对,这可能是仅 CR(Macintosh)或仅 LF(Unix)文件。写字板更宽容,并且在保存时显然(尚未测试)为您保存 CR/LF 对。

您可以更改应用程序中的代码以查找任何结尾并轻松处理它们:只需停止将 vbCrLf 作为一对查找并查找其中之一作为行尾。我自己的策略是扫描 CR 或 LF 并消耗所有随后的 CR/LF 字符:这也会清除空白行。

于 2009-05-22T17:12:24.310 回答
0

该文件可能在每行的末尾只有一个回车 (CR) 或换行 (LF) 字符。

在 Windows 中,每行的末尾都需要一个 CR 和 LF 字符。这可以通过使用常量 vbCRLF 在 VB6 中轻松完成。

另一方面,如果您是读取文件的人,您可以在读取文件时确定缺少哪个文件并手动添加(即,使用替换功能将 CR 转换为 CRLF 或将 LF 转换为 CRLF)。

于 2009-05-22T17:12:29.550 回答
0

除非这些文件非常大并且性能很关键,否则可以通过 ADODB.Stream 对象轻松完成逐行读取它们。

这不仅可以处理多个行分隔符(Stream.LineSeparator = adCR、adCRLF 或 adLF),它还可以用于处理包含 Unicode (UTF-16)、UTF-8、系统代码页 ANSI 和替代“ANSI”编码的文件对于其他语言环境。

例如,如果您有一个包含来自俄语语言环境的“ANSI”的文本文件,您可以设置 Stream.Charset = "koi8-r" 并通过正确翻译成 VB6 Unicode (UTF-16) 来读取数据:

Dim Stm As ADODB.Stream
Dim Line As String
Dim Counter As Long
Set Stm = New ADODB.Stream
With Stm
    .Open
    .LoadFromFile "russian.txt"
    .Type = adTypeText
    .Charset = "koi8-r"
    .LineSeparator = adLF
    Do Until .EOS
        Line = .ReadText(adReadLine) 'Text is in Unicode now.
        Counter = Counter + 1
    Loop
    .Close
End With

Charset 默认值为“unicode”(UTF-16),但要使用默认代码页读取或写入 ANSI 流,您可以将其设置为“ascii”。

HKCR\MIME\Database\Charset 包含可用值。

于 2009-05-28T13:31:46.640 回答