Comment mette un fichier SQL dans un Tableau ?

Résolu
davidmaillard Messages postés 20 Date d'inscription dimanche 4 janvier 2004 Statut Membre Dernière intervention 28 juin 2011 - 24 janv. 2006 à 13:46
davidmaillard Messages postés 20 Date d'inscription dimanche 4 janvier 2004 Statut Membre Dernière intervention 28 juin 2011 - 24 janv. 2006 à 17:58
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

econs Messages postés 4030 Date d'inscription mardi 13 mai 2003 Statut Membre Dernière intervention 23 décembre 2008 24
24 janv. 2006 à 16:45
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
davidmaillard Messages postés 20 Date d'inscription dimanche 4 janvier 2004 Statut Membre Dernière intervention 28 juin 2011
24 janv. 2006 à 17:58
Je te remercie
3
econs Messages postés 4030 Date d'inscription mardi 13 mai 2003 Statut Membre Dernière intervention 23 décembre 2008 24
24 janv. 2006 à 14:06
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.
0
davidmaillard Messages postés 20 Date d'inscription dimanche 4 janvier 2004 Statut Membre Dernière intervention 28 juin 2011
24 janv. 2006 à 15:54
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
0
Rejoignez-nous