是否有一种方法可以使用与VBA'不同的分隔符一次读取一行文件;s默认值(vbCr/vbCrLf)?
我正在尝试读取一个多行.csv文件,并将每个令牌放在Excel中自己的单元格中。问题是我无法控制传入的.csv文件 它们在列数方面都是相同的(虽然行数可变,但这很容易解释)。但是,无论出于何种原因,.csv文件的源有时会在标题行的末尾放一个是否有一种方法可以使用与VBA'不同的分隔符一次读取一行文件;s默认值(vbCr/vbCrLf)?,vba,excel,csv,Vba,Excel,Csv,我正在尝试读取一个多行.csv文件,并将每个令牌放在Excel中自己的单元格中。问题是我无法控制传入的.csv文件 它们在列数方面都是相同的(虽然行数可变,但这很容易解释)。但是,无论出于何种原因,.csv文件的源有时会在标题行的末尾放一个CRLF,有时只放一个LF。同样,我无法控制这一点,因此我必须围绕可变性进行编码 据我所知,VBA行行输入#1,strLine使用CR或CRLF来分隔行,这是有意义的。我试图将整个.csv文件的内容放在一个字符串中,然后使用替换strFileContents,
CRLF
,有时只放一个LF
。同样,我无法控制这一点,因此我必须围绕可变性进行编码
据我所知,VBA行行输入#1,strLine
使用CR
或CRLF
来分隔行,这是有意义的。我试图将整个.csv文件的内容放在一个字符串中,然后使用替换strFileContents,vbCr,“
来消除所有CR
字符,但这似乎也消除了以后出现的CRLF
的所有内容,并让我从哪里开始
那么,有没有一种方法可以让我一次接受一行,使用line Input#1,strLine
而不是LF
分隔符?或者,是否有其他方法可以操作字符串的全部内容(即仅删除CR
,而不删除CRLF
)和Split()
字符串
以下是我的代码的简化版本:
Dim Column, Row As Integer 'used Sheets().Input(Row, Column).Value to insert strings
Open strFilePath For Input Access Read As #1
Do Until EOF(1)
Line Input #1, strLine
strLine = Split(strLine, vbLf)(1)
arr = Split(strLine, ",")
For Column = 1 to 8
'insert stuff
Next Column
Row = Row + 1
Loop
然而,这对我来说不太管用,我相信如果它管用了,我仍然需要处理额外的CR
字符
多谢各位
asc(vbLF)=10
asc(vbCR)=13
asc(vbCRLF)=13
因此,仅替换vbLF
范例
Sub test()
Dim strTest As String
strTest = "First Line " & vbLf & "Second Line" & vbCrLf & "Third Line" & vbCr & "Fourth Line"
strTest = Replace(strTest, vbCrLf, vbCr) '/ Gets rid of double line breaks caused by next replacement
strTest = Replace(strTest, vbLf, vbCr)
MsgBox strTest
End Sub
我试图。。。替换strFileContents,vbCr“”,以消除所有CR字符
-良好;现在添加第二步,将所有LF
替换为CRLF
。啊,这很有意义。我将立即尝试并更新。感谢您提供的示例,我目前正在代码中实现此方法,并将尽快更新问题。我相信这肯定对我有用。@JonasZebari不要更新问题,改为阅读=)