vbNewline vs Chr(10) as linebreak delimiter in Windows vs. Mac OSX

∥☆過路亽.° 提交于 2019-11-29 16:00:50

If you need to support multiple OS (or different versions on the same OS) you can look in to conditional compilation statements.

You can refer to this list of built-in compiler constants:

http://www.utteraccess.com/wiki/index.php/Conditional_Compilation#Built_In_Compiler_Constants

Define your delimiter variable as a string and assign it the result of a function.

Dim dlmt as String

dlmt = newLine()

fullArray = Split(CSV, dlmt)

The function then uses the conditional compilation constant to check the OS:

Function newLine() As String

#If Win32 Or Win64 Then
    ret = Chr(10)
#ElseIf Mac Then
    ret = vbNewLine
#End If

newLine = ret

End Function

Frankly now that I do this I remember it's not strictly necessary to use conditional compile here unless you have methods/properties that won't compile in some versions. You could use the more simple property of Application.OperatingSystem:

Function newLine() As String

Select Case Application.OperatingSystem
    Case Like "Windows*" 
        ret = Chr(10)
    Case Else
        ret = vbNewLine
End Select

End Function

As John mentioned in the comments, the two operating systems have different NewLine character.

And hence before you split it, check for which character is present and then split it. For example

newL = InStr(1, CSV, vbNewLine)
vbChrTen = InStr(1, CSV, Chr(10))

If newL > 0 And vbChrTen > 0 Then
    MsgBox "The string contains both. How would you like to handle it?"
    '
    '~~> Rest of the code
    '
ElseIf newL > 0 Then
    fullArray = Split(CSV, vbNewLine)
ElseIf vbChrTen > 0 Then
    fullArray = Split(CSV, Chr(10))
Else
    MsgBox "The string doesn't contain either of the de-limiters. How would you like to handle it?"
    '
    '~~> Rest of the code
    '
End If
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!