Soyez le premier à donner votre avis sur cette source.
Snippet vu 7 978 fois - Téléchargée 39 fois
Public Function GetLignCSV(ByVal Ligne As String, ByRef ptrElements() As String, Optional ByVal EscapeChar As String = "\", Optional ByVal Delimitor As String = "", Optional ByVal Separator As String = ";") As Long On Error GoTo erreur Dim Getting, EscapeMode As Boolean Dim strBuffer, uChar As String Dim i, nElement As Long 'Sortie si parametres invalides If Len(Ligne) = 0 Or Len(EscapeChar) <> 1 Or (Len(Delimitor) <> 1 And Len(Separator) <> 1) Then GetLignCSV = -1 Exit Function End If If Len(Delimitor) <> 1 And Len(Separator) = 1 Then Getting = True End If 'Traitement de la ligne For i = 1 To Len(Ligne) Step 1 uChar = Mid$(Ligne, i, 1) If EscapeMode And Getting Then strBuffer = strBuffer & uChar EscapeMode = False ElseIf Getting Then Select Case uChar Case Delimitor ReDim Preserve ptrElements(nElement): ptrElements(nElement) = strBuffer nElement = nElement + 1: strBuffer = "": Getting = False Case Separator If Len(Delimitor) = 0 Then ReDim Preserve ptrElements(nElement): ptrElements(nElement) = strBuffer nElement = nElement + 1: strBuffer = "" Else GetLignCSV = -1 Exit Function End If Case EscapeChar EscapeMode = True Case Else strBuffer = strBuffer & uChar End Select ElseIf uChar = Delimitor Then Getting = True End If Next i 'Recuperation du dernier element si necessaire If Len(strBuffer) > 0 And Len(Delimitor) <> 1 And Len(Separator) = 1 Then ReDim Preserve ptrElements(nElement): ptrElements(nElement) = strBuffer nElement = nElement + 1: strBuffer = "" End If GetLignCSV = nElement - 1 Exit Function erreur: MsgBox "Une erreur est inopinément survenue !" & vbCrLf & "Code erreur : " & CStr(Err.Number) & vbCrLf & Err.description End Function
Utilisation :
Dim Valeurs() As String
Dim NbElement As Long
NbElement = GetLignCSV("a, b, ""c"", ""d1,d2"", e", Valeurs, ",", """")
Retour :
Valeurs = [a; b; c; d1,d2; e]
Voici le code modifié :
Public Function GetLignCSV(ByVal Ligne As String, ByRef ptrElements() As String, Optional ByVal Separator As String ",", Optional ByVal StringDelimitor As String """", Optional ByVal EscapeChar As String = "") As Long
On Error GoTo erreur
Dim Getting, EscapeMode, InString As Boolean
Dim strBuffer, uChar As String
Dim i, nElement As Long
'Sortie si parametres invalides
If Len(Ligne) = 0 Or Len(EscapeChar) <> 1 Or (Len(StringDelimitor) <> 1 And Len(Separator) <> 1) Then
GetLignCSV = -1
Exit Function
End If
'Traitement de la ligne
For i = 1 To Len(Ligne) Step 1
uChar = Mid$(Ligne, i, 1)
If EscapeMode And Getting Then
strBuffer = strBuffer & uChar
EscapeMode = False
Else 'If Getting Then
Select Case uChar
Case StringDelimitor
If InString Then
InString = False
Else
InString = True
End If
Case Separator
If InString Then
strBuffer = strBuffer & uChar
Else
ReDim Preserve ptrElements(nElement): ptrElements(nElement) = Trim$(strBuffer)
nElement nElement + 1: strBuffer ""
End If
Case EscapeChar
EscapeMode = True
Case Else
strBuffer = strBuffer & uChar
End Select
End If
Next i
'Recuperation du dernier element si necessaire
If Len(strBuffer) > 0 And Len(Separator) = 1 Then
ReDim Preserve ptrElements(nElement): ptrElements(nElement) = Trim$(strBuffer)
nElement nElement + 1: strBuffer ""
End If
GetLignCSV = nElement
Exit Function
erreur:
MsgBox "Une erreur est inopinément survenue !" & vbCrLf & "Code erreur : " & CStr(Err.Number) & vbCrLf & Err.Description
End Function
Si j'envoie la chaine |2;";";""";"""|
Je devrais logiquement obtenir un tableau contenant :
2|;|";"
Or j'obtiens :
2|"|"|"""|"""
En plus, je ne comprends pas non plus ce qu'es "EscapeChar".
Je n'aime pas donnée de mauvais note je ne note donc pas ;)
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.