Comment mette un fichier SQL dans un Tableau ?

Résolu
Signaler
Messages postés
20
Date d'inscription
dimanche 4 janvier 2004
Statut
Membre
Dernière intervention
28 juin 2011
-
Messages postés
20
Date d'inscription
dimanche 4 janvier 2004
Statut
Membre
Dernière intervention
28 juin 2011
-
Bonjour

Voila j'ai un fichier Map.sql et je voudrais mettre son contenu dans Tableau.

Le fichier se presente comme sa :

INSERT INTO `x_world` VALUES (3579,250,250,3,29124,'Residence à Rome',9347,'hezekiel',492,'Tget',117);

Avec une ligne comme sa je n'ai pas de soucis tous ce fait bien a chaque virgule il crée une ligne dans le Tableau
Ce qui donne
INSERT INTO `x_world` VALUES (3579
250
250
3
29124
'Residence à Rome'
9347
'hezekiel'
492
'Tget'
117);

Par contre j'ai un soucis avec une ligne comme ca
INSERT INTO `x_world` VALUES (38103,-42,182,1,27090,'Zaak,shire',27093,'Zaak',0,'dff',335);

Parce qu'il me coupe en deux cette partie 'Zaak,shire' parce qu'il y a une virgule dans le nom
Il me fait les ligne de gaucheet il me faudrais celle de droite

INSERT INTO `x_world` VALUES (38103 INSERT INTO `x_world` VALUES (38103
-42 -42
182 182
1 1
27090 27090
'Zaak 'Zaak,shire'
shire' 27093
27093 'Zaak'
'Zaak' 0
0 'dff'
'dff' 335);
335);

voici le code que j'utilise :
Dim Tableau() As String
Dim Nbr
Nbr = 1
Open App.Path & "\txt\map.sql" For Input As #1
Do While Not EOF(1)
Input #1, machaîne
ReDim Preserve Tableau(Nbr)
Tableau(Nbr) = machaîne
Nbr = Nbr + 1


Loop
Close #1

Si quelqu'un pouvais m'aider ce serais simpas

Merci

4 réponses

Messages postés
4030
Date d'inscription
mardi 13 mai 2003
Statut
Modérateur
Dernière intervention
23 décembre 2008
22
Split ne prend qu'un seul séparateur pour découper une chaine. Si tu en veux deux, il faut créer une fonction perso.







Private Function monSplit(sString As String, sSep1 As String, sSep2 As String) As String()

Dim t() As String

Dim ll As Long

Dim lOldIndex As Long

Dim newWord As String

Dim maxIndex As Long

Dim sTemp As String



maxIndex = 0

ReDim t(0)

For ll = 1 To Len(sString)

sTemp = Mid$(sString, ll, 1)

Select Case sTemp

Case sSep1, sSep2:


newWord = Mid$(sString, lOldIndex + 1, ll - lOldIndex - 1)

lOldIndex = ll

maxIndex = maxIndex + 1

ReDim Preserve t(maxIndex)

t(maxIndex) = newWord

End Select

Next ll

If ll = Len(sString) + 1 Then

newWord = Mid$(sString, lOldIndex + 1, ll - lOldIndex - 1)

lOldIndex = ll

maxIndex = maxIndex + 1

ReDim Preserve t(maxIndex)

t(maxIndex) = newWord

End If



monSplit = t

End Function







' Procedure pour tester le résultat de monSplit :



Private Sub toto()

Dim tablo() As String

Dim s As String



s = "qsdfqds,fdsfdsf;dsf,dsfq;sdfq;sdfsdf,ze"

tablo = monSplit(s, ",", ";")



For ll = LBound(tablo) To UBound(tablo)

sTemp = sTemp & tablo(ll) & " "

Next ll

MsgBox sTemp



End Sub








Manu
-------------------------------------------
Une question bien posée, c'est une chance de réponse bien adaptée.
3
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 109 internautes nous ont dit merci ce mois-ci

Messages postés
20
Date d'inscription
dimanche 4 janvier 2004
Statut
Membre
Dernière intervention
28 juin 2011

Je te remercie
3
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 109 internautes nous ont dit merci ce mois-ci

Messages postés
4030
Date d'inscription
mardi 13 mai 2003
Statut
Modérateur
Dernière intervention
23 décembre 2008
22
Salut,







Il faut parcourir la chaine de caractères de départ, caractère par caractère.

Dès que tu rencontres une apostrophe, tu considères que tu es dans une
chaine de caractère. Dès que tu en rencontres une autre, tu considères
que tu es sorti de ta chaine de caractères.

Il doit toujours y avoir un nombre pair d'apostrophes dans ta syntaxe SQL.



Dim isInsideString As Boolean

Dim bModif As Boolean



isInsideString=False

bModif = False

sChaine ="INSERT INTO `x_world` VALUES (38103,-42,182,1,27090,'Zaak,shire',27093,'Zaak',0,'dff',335);"

For ll=1 to Len(sChaine)

sTemp = Mid$(sChaine,ll,1)

Select Case sTemp

Case "'":

isInsideString = Not(isInsideString)

Case ",":

If isInsideString Then

'
On remplace cette virgule par autre chose. Par ex : "@"

sChaine =
Left$(sChaine,ll-1) & "@" & Right$(sChaine,Len(sChaine)-ll)

bModif = True

End If

End Select

Next ll



A la sortie, ta chaine vaut :

INSERT INTO `x_world` VALUES (38103,-42,182,1,27090,'Zaak@shire',27093,'Zaak',0,'dff',335);



Tu fais le split qui va bien avec la virgule.

Tu obtiens alors le tableau suivant :

INSERT INTO `x_world` VALUES (38103

-42

182

1

27090

'Zaak@shire'

27093

'Zaak'

0

'df'

335);



Si bModif = True, alors il y a au moins un champ qui a été transformé. Y'a plus qu'à transformer le @ en virgule.





Tu peux utiliser autre chose que l'@ si tes champs sont censés en contenir ... ( T'as le choix : # , % , µ , § , ? , ... )




Manu
-------------------------------------------
Une question bien posée, c'est une chance de réponse bien adaptée.
Messages postés
20
Date d'inscription
dimanche 4 janvier 2004
Statut
Membre
Dernière intervention
28 juin 2011

Je te remercie de ta reponce

Pourrait tu me dire comment je peut faire pour faire un Split avec deux choix de separateur


Car je doit slipter la virgule mais aussi le point virgule


Merci