我有一个程序用" \ n"写入文本文件。字符。我把它写入.csv文件,以便我可以获取该信息并将其导入Access数据库。我遇到的问题是Microsoft Access VBA和记事本无法识别文件中的换行符。 Wordpad,Access内置导入,Excel DO 识别换行符。如果我在Excel或写字板中打开.csv文件,不做任何更改,并再次将文件另存为.csv文件,那么它将显示正确。
我有一个VBA脚本可以从文件中导入数据,因为数据会重复添加到主工作表中。我希望它从.csv文件中获取每一行,如果ID已经存在,则将其作为新行插入,如果有,则更新现有行。这是测试和工作的文件,他们公然在不同的行(在记事本中显示为不同的行),但它只是我的程序生成的文件(使用\ n作为新行)。
另一个程序是用C#构建的...所以,我想我的问题是:是否有一个更好的换行符或序列在C#中使用,以便在换行时更普遍地识别?
对于后代,这是我的VBA脚本正在使用的代码,它将文件作为一行读取并缺少换行符:
'Now read the file
Open csvLoc For Input As #1
Do While Not EOF(1)
Line Input #1, csvLine
Debug.Print csvLine
lineArray = Split(csvLine, ",")
<-- Code handling the now split line array -->
Loop
Close #1
答案 0 :(得分:0)
\n
= “换行”(LF)= ASCII代码10
= VBA常量:vbLf
\r
= “回车”(CR)= ASCII码13
= VBA常数:vbCr
或Windows更喜欢两者的组合:
\r\n
= “CR + LF” = ASCII码13
+ 10
= VBA常量: vbCrLf
由于您已经存在LF
,因此有许多简单的方法可以将它们更改为CRLF
。我想不出任何附加角色会成为问题的方式。
最好的计划是更改创建文件的源应用程序,因此请使用两个字符而不是一个。
如果您主要关注的是使用VBA导入的数据,则可以对代码进行少量更改,以替换字符:
Open csvLoc For Input As #1
Do While Not EOF(1)
Line Input #1, csvLine
csvLine = Replace(csvLine, vbLf, vbCrLf)
Debug.Print csvLine
lineArray = Split(csvLine, ",")
<-- Code handling the now split line array -->
Loop
Close #1
答案 1 :(得分:0)
您没有提及CSV文件的Access链接。
如果访问&#39;内置导入可以原生地识别换行符 - 然后依赖链接的方法比基于vba的导入更容易。