Accueil > > > TRAITER UNE LIGNE CSV
TRAITER UNE LIGNE CSV
Information sur la source
Description
Voici donc une fonction à utiliser sur une ligne CSV (à vous d'implémenter la lecture du fichier CSV).
Le code fonctionne sans verifier la syntaxe CSV et peut donc aussi fonctionner avec une syntaxe 'batarde'.
Source
- 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
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
Conclusion
Exemple :
dim myLigne = "toto;cool;super;56;is;WAAAAAAAAAAAAAZZZZZZAAAAAAA AAAAAAAAAA"
dim ret as integer
dim ptrCSV() as string
ret = GetLignCSV(myLigne, ptrCSV, "\", "", ";")
'Maintenant on un un tableau ptrCSV avec les donnees de la ligne
'L'interet de la fonction par rapport à split de vb est qu'elle gere les caractères d'echappement & les delimiteurs.
N'hésistez pas a me contacter pour commenter la source. Elle est tiré d'un module écris par moi même me facilitant la vie avec MySQL. Si vous êtes interessé, postez moi un petit message.
Sources du même auteur
Sources de la même categorie
Commentaires et avis
|
Derniers Blogs
TECHDAYS PARIS 2012 : WINDOWS SERVER "8" QUOI DE 9 !TECHDAYS PARIS 2012 : WINDOWS SERVER "8" QUOI DE 9 ! par ROMELARD Fabrice
Speakers: Fabrice Meillon et Stanislas Quastana Cette session est basée entièrement sur celle donnée lors de la BUILD cet hiver. Il n'y a pas d'ajout d'information en rapport avec cet évènement passé. Windows 8 Server sera intégralem...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice [HTML5] AUTOUR DU W3C : NOUVEAUX STANDARDS ET WEB MOBILE (LILLE)[HTML5] AUTOUR DU W3C : NOUVEAUX STANDARDS ET WEB MOBILE (LILLE) par Gio
Je m'y prends un peu tard je sais, mais bon je suis développeur web et donc hyper fainéant ! Toujours dans le cadre des technologies émergentes, ici HTML5, parce qu'on aime HTML5 chez Wyg , nous seront présent, le vieux ( Aurélien V.) et moi, pour pr...
Cliquez pour lire la suite de l'article par Gio [WP7] DYNAMICALLY CHANGE STARTUP PAGE[WP7] DYNAMICALLY CHANGE STARTUP PAGE par KooKiz
Let's say that you want to allow the user to customize the startup page of your application. You can easily change the startup page by editing the 'NavigationPage' attribute in the manifest file. But the manifest cannot be modified once the applicatio...
Cliquez pour lire la suite de l'article par KooKiz SESSION SILVERLIGHT 5 3D : SLIDES ET DEMOSSESSION SILVERLIGHT 5 3D : SLIDES ET DEMOS par Groc
Durant les techdays, j'ai eu le plaisir d'animer une session sur Silverlight 5 et la 3D avec Simon Ferquel. Comme promis, voici nos slides et mes démos (celles avec le viper BSG) ici et là. Pour mémoire, les démos utilisent toutes le viper BSG...
Cliquez pour lire la suite de l'article par Groc
Logiciels
DocTranslate (V3.1.0.0)DOCTRANSLATE (V3.1.0.0)DocTranslate est un traducteur de document Microsoft Word, PowerPoint et Excel. Il permet d'autom... Cliquez pour télécharger DocTranslate Tribler (2012)TRIBLER (2012)Tribler est un client pair à pair (P2P/Peer-to-Peer) open source avec la capacité de regarder des... Cliquez pour télécharger Tribler OneSwarm (2012)ONESWARM (2012)Le peer-to-peer qui protège votre vie privée, c'est OneSwarm.
Ce logiciel de peer-to-peer crypté... Cliquez pour télécharger OneSwarm PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System
|