VB6 - Problème fonction Split et virgule...

Résolu
cs_magicgus Messages postés 206 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 14 septembre 2011 - 22 sept. 2009 à 20:23
cs_magicgus Messages postés 206 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 14 septembre 2011 - 24 sept. 2009 à 23:13
Bonjour à tous,

Je suis en train de créer un logiciel de gestion d'entreprise, il charge des fichiers dont certaines zone sont structurés comme des *.csv d'excel, c'est à dire que les données de chaque lignes sont séparés par des point virgules " ; ".

Je découpe donc ma chaine avec la fonction Split avec les " ; " comme séparateur, mon problème est que quand la chaine contient de simples virgules " , " il me créer aussi une séparation à leurs niveaux... Je suis un peut troublé et un peu déçu aussi par ce petit bug (ou ce que je crois en être un)

J'ai essayer tout les modes de comparaison mais rien n'y fait...

Je suis épaté de voir qu'une fonction split est capable de différencier des "CR", "LF" et "CRLF" mais pas des " ; " de " , "...

Voilà alors si quelqu'un à une solution à me proposé je suis tout oui...

Je suis obligé de stoquer des virgules dans mes fichiers car ce sont des chiffre qui me resserviront pour des calcul et vb ne calcule pas sur un " . " et puis en plus je ne veut pas faire de bricolage.

Au pire je vais devoir réinventé la roue : refaire un module avec une fonction Split_No_Bug...

Mais j'ai pas trop le temps pour ce genre de conneries lol

Merci à ceux qui me répondrons.

Bon codage !

Guillaume

14 réponses

jmf0 Messages postés 1566 Date d'inscription mardi 26 décembre 2000 Statut Membre Dernière intervention 5 avril 2013 8
22 sept. 2009 à 21:52
Bonjour,

ouvre ton aide en ligne et intéresse-toi à la différence entre Input et Line Input
3
cs_magicgus Messages postés 206 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 14 septembre 2011
22 sept. 2009 à 21:54
C'est bon j'ai trouvé comment ne pas séparé ma ligne en 2 !!! C'est pourtant con mais j'avoue que je ne m'en été jamais servi....

            Open FileChemin For Input As #1
                While Not EOF(1)
                    Line Input #1, intval
                    varTemp = varTemp & intval & vbCrLf
                Wend
            Close 1



J'ai juste rajouter le mot "line" et tout se passe bien !!!

Guillaume
3
cs_magicgus Messages postés 206 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 14 septembre 2011
22 sept. 2009 à 20:41
Oups !

Je vient de refaire le test suivant dans une autre form et ça marche, je ne comprend pas d'ou vient le problème ...

Private Sub Command1_Click()
    Dim a() As String
    a = Split(Text1.Text, ";")
    For i = 0 To UBound(a)
        List1.AddItem a(i)
    Next i
End Sub


???

Guillaume
0
jmf0 Messages postés 1566 Date d'inscription mardi 26 décembre 2000 Statut Membre Dernière intervention 5 avril 2013 8
22 sept. 2009 à 20:50
Bonsoir,

Ton 1er test (que tu ne nous as pas montré) ou le fichier traité (que tu ne nous as pas montré) n'est/ne sont pas le(s) même(s) que ceux du seul code que tu nous montres.
Aucune autre explication n'est possible
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
22 sept. 2009 à 21:09
"Je suis obligé de stoquer des virgules dans mes fichiers car ce sont des chiffre qui me resserviront pour des calcul et vb ne calcule pas sur un " . " et puis en plus je ne veut pas faire de bricolage. "


NON !

toujours stocker les données en international :

33.45 et non 33,45

etc

et les dates: 2009-09-22

Val et CDate feront la conversion vers les données types.
Format$ et CStr feront la conversion vers ces chaines international.

http://blogs.codes-sources.com/renfield/archive/2009/04/14/param-tres-r-gionnaux-en-g-n-ral-et-avec-vb6.aspx



Renfield - Admin CodeS-SourceS - MVP Visual Basic
0
cs_magicgus Messages postés 206 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 14 septembre 2011
22 sept. 2009 à 21:24
Pas bete, merci Reinfield

Toujours est-il qu'apres quelque recherche dans mon code j'ai trouvé le coupable et en fait ce n'est même pas dutout un split mais bien une ouverture de fichier...

            
'Extraction des doonées
            Open FileChemin For Input As #1
                While Not EOF(1)
                    Input #1, intval
                    varTemp = varTemp & intval & vbCrLf
                Wend
            Close 1


Dés que j'arrive sur une ligne qui contient une virgule il me simule un passage à la ligne...

Mon fichier :
[rgcfile]
Type=initable
About=Fichier client
[parameters_MSFlexGrid]
ColsNames=Code produit;Catégorie;Désignation;Tarif unitaire HT;Pourcentage;Classification;Type
ColsSizes=2175;4215;1140;1140;1140;1140;1140
ColsAlign=0;0;0;0;0;0;0
FixedCols=0
FixedRows=1

[bdd_initype_table_data]
gkfsjgklfjksljkf gsfd
gsdfgfsdgfsdgfsdgdsfgdfs, fdgsdfgsfdg
fsgfs
gfdgsdfgd


Au lieu d'avoir la ligne suivante :
gsdfgfsdgfsdgfsdgdsfgdfs, fdgsdfgsfdg

Il me donne deux ligne :
gsdfgfsdgfsdgfsdgdsfgdfs
fdgsdfgsfdg

Je ne comprend pas plus à vrai dire lol

Mais toujours ouvert à un coups de main car bien que je vais passer dans un format international j'aurais quand même des virgules pour des adresse par exemple...

Guillaume
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
22 sept. 2009 à 21:26
Je dirais même toujours stocker, dans la mesure du possible, les données dans leur type réel.

Dans la mesure du possible, on converti au plus tôt les données et on préfèrera stocker un Double =33.45 plutôt qu'une String="33.45"


[i][b]---- Sevyc64 (alias Casy) ----
[hr]# LE PARTAGE EST NOTRE FORCE #/b/i
0
cs_magicgus Messages postés 206 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 14 septembre 2011
22 sept. 2009 à 21:26
Faites pas gaffe à la gueule du fichier au passage, il me lit dedans comme un ini, pour le reste il coupe en deux pour ne prendre que la partie des données à stoquer dans un flexgrid...

J'aime bien mélanger les genres...


Guillaume
0
cs_magicgus Messages postés 206 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 14 septembre 2011
22 sept. 2009 à 21:27
casy : libre à moi de les reconvertir après, mais dans un fichier comme le miens n'est t'il pas mieux que de tout charger en string et de reconvertir aprs ?

Guillaume
0
cs_magicgus Messages postés 206 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 14 septembre 2011
22 sept. 2009 à 21:55
En meme temps lol

Merci jmf0...

Je vient de le trouver lol

En tout cas merci à tous pour votre rapidité de réponse !

Guillaume
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
22 sept. 2009 à 22:26
pas forcément top en temps de réponse, de lire ligne par ligne: outre les n accès au fichier, vb va chercher les crlf, etc.

du coup, c'est plutot lent.

si tes fichier ont une taille raisonnable, tu dois pouvoir les stocker en mémoire en entier.
te suffira de traiter un tableau de lignes.

Renfield - Admin CodeS-SourceS - MVP Visual Basic
0
cs_magicgus Messages postés 206 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 14 septembre 2011
23 sept. 2009 à 18:57
Renfield : lol

Je ne parler pas de se temps de réponse mais du forum... ;)


Guillaume
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
24 sept. 2009 à 05:02
j'avais saisi ^^

Renfield - Admin CodeS-SourceS - MVP Visual Basic
0
cs_magicgus Messages postés 206 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 14 septembre 2011
24 sept. 2009 à 23:13
;)


Guillaume
0
Rejoignez-nous