我有一个TXT文件,我需要通过应用程序导入,但由于某种原因,我需要先在wordpad中打开它,然后在导入之前保存它。我猜这与Line Breaks有关。因为如果我先在记事本中打开它,没有换行符,但是如果我用wordpad打开它,那么这些行是分开的。
有谁知道为什么会发生这种情况以及如何避免手动打开文件并使用wordpad保存? 该应用程序是用vb 6编写的(Yikes!)。
感谢您的帮助
答案 0 :(得分:2)
这是一个行结束问题。您的代码(和记事本)想要查看回车(CR)/换行(LF)对,这可能只是CR(Macintosh)或仅LF(Unix)文件。写字板更宽容,保存显然(尚未测试)为您节省CR / LF对。
您可以在应用程序中更改代码以查找任何结尾并轻松处理它们:只需停止查找vbCrLf作为一对并查找任一行作为行尾。我自己的策略是扫描CR或LF并消耗后面的所有CR / LF字符:这也清除了空白行。
答案 1 :(得分:0)
该文件可能在每行末尾只有一个回车符(CR)或换行符(LF)字符。
在Windows中,每行末尾都需要CR和LF字符。这可以通过使用常量vbCRLF在VB6中轻松完成。
另一方面,如果您是阅读文件的人,您可以确定哪个文件丢失并在阅读文件时手动添加(即使用替换功能将CR转换为CRLF或LF转换为CRLF )。
答案 2 :(得分:0)
除非这些文件非常大并且性能至关重要,否则可以通过ADODB.Stream对象轻松地逐行读取它们。
这不仅可以处理多个行分隔符(Stream.LineSeparator = adCR,adCRLF或adLF),它还可以用于处理包含Unicode(UTF-16),UTF-8,系统代码页ANSI和替代“的文件” ANSI“其他语言环境的编码。
例如,如果您的文本文件包含来自俄语语言环境的“ANSI”,则可以设置Stream.Charset =“koi8-r”并将数据正确翻译为VB6 Unicode(UTF-16):< / p>
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包含可用值。