我有一个程序,该程序将带有" n"字符的文本文件写入。我将其写入一个.csv文件,以便我可以获取这些信息并将其导入访问数据库。我遇到的问题是Microsoft Access VBA和Notepad并未识别文件中的线路断路。WordPad,访问内置的导入和excel do 识别线路断裂。如果我在Excel或WordPad中打开.CSV文件,请不进行更改,然后将文件保存为.csv文件,然后将其正确显示。
在记事本中打开的文件
在Excel中打开的文件
访问中导入的文件
我有一个VBA脚本可以从文件导入数据,因为将数据反复添加到主表中。我希望它从.CSV文件中获取每行,如果ID尚未存在或更新现有行(如果有(,则将其插入为新行。这是对文件进行测试和工作的,其中它们公然在不同的行上(在记事本以不同的行显示(,但它只是我程序生成的文件(使用 n作为新行(。
另一个程序构建在C#...所以,我想我的问题是:在存在换行符时,在C#中使用更好的换行字符或序列,以使其更普遍地认可?p>对于后代,这是我的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
newline控制字符:
-
n
= " line feed" (lf(= ascii代码10
= vba常数:vbLf
-
r
= "马车返回" (cr(= ascii code13
= vba常数:vbCr
或Windows更喜欢两者的组合:
-
rn
= " CR LF" = ASCII代码13
10
= VBA Constant:vbCrLf
由于您有现有的LF
,因此有多种简单的方法将其更改为CRLF
s。我想不出任何方法是一个问题。
最好的计划是更改创建文件的源应用程序,因此请使用两个字符而不是一个字符。
如果您的主要关注点是您正在使用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
更多信息:
wikipedia:在不同字符的编码规范中的newline表示
msdn:替换功能(VBA(
msdn:其他常数
堆栈溢出: CR LF,LF和CR线路断路类型之间的区别?
wikipedia: ascii
newline字符的历史
您没有提及具有CSV文件的访问链接。
如果内置的访问'内置会识别生产线的本地断裂 - 那么依赖链接方法将比基于VBA的导入更容易。