Découpage de chaîne

Résolu
elisabeth_nov Messages postés 103 Date d'inscription jeudi 2 mars 2006 Statut Membre Dernière intervention 4 février 2009 - 22 mars 2006 à 09:44
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 - 22 mars 2006 à 13:44
bonjour,
mon pb= je possede un fichier dont voici une ligne:
0032-1DM ;SUPPORT MOULEUSE 1DM ;SUPPORT ;
;UN;N; 7509.8900; 4688.8428; 0;00-XXX-0000;
; ;20-FEB-1998;26-FEB-1992;UN; 1.000000;UN; 1.000000;SU;NOME;ME
dans mon code vb6, jai declarer un type personnalise pour pouvoir lire ce fichier et integrer
chaque donnees dans des colonnes dans une table de ma BD
:
Private Type article
codeArticle As String * 15 'correspond au premier champs
pt As String * 1 'permet de contenir le point virgule
designationArticle As String * 35
pt1 As String * 1
designationAnglaise As String * 35
pt2 As String * 1
designation2 As String * 35
pt3 As String * 1
unité_de_mesure As String * 2
pt4 As String * 1
codeSource As String * 1
pt5 As String * 1
prixVente As String * 14
pt6 As String * 1
coutUnitaireStandart As String * 14
pt7 As String * 1
cycleDappro As String * 4
pt8 As String * 1
dateModifEdition As String * 11
pt9 As String * 1
edition As String * 4
pt10 As String * 1
FormatPlan As String * 1
pt11 As String * 1
dateDernMAJ As String * 11
pt12 As String * 1
dateCreation As String * 11
pt13 As String * 1
unitéAchat As String * 2
pt14 As String * 1
coeff As String * 13
pt15 As String * 1
unitedeVente As String * 2
pt16 As String * 1
coeffUV As String * 13
pt17 As String * 1
codeFamilleProduit As String * 2
pt18 As String * 1
codeFamilleArticle As String * 4
pt19 As String * 1
groupeProduction As String * 2
caractere1 As String * 2
End Type


le champs codeFamilleArticle est soit vide donc inexistant, soit il comprend 4 caracteres.
ce que je voudrais faire c remplir toutes les zones entre points virgules correspondant
a ce champs codeFamilleArticle avec 4 caracteres blanc lorsquil ny en a pas.
pourriez vous maider? (jespere que mon explication est assez precise!)
merci davance pour ceux qui essaieront.

20 réponses

jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
22 mars 2006 à 10:46
re,

Regarde si le code peut t'aider.

Le resultat est un tableau de type Article (attention le dernier element du tableau est vide)
C:\1.txt est mon fichier source alors il te faudras le remplacer par le tien

Private Type article
codeArticle As String * 15 'correspond au premier champs
designationArticle As String * 35
designationAnglaise As String * 35
designation2 As String * 35
unité_de_mesure As String * 2
codeSource As String * 1
prixVente As String * 14
coutUnitaireStandart As String * 14
cycleDappro As String * 4
dateModifEdition As String * 11
edition As String * 4
FormatPlan As String * 1
dateDernMAJ As String * 11
dateCreation As String * 11
unitéAchat As String * 2
coeff As String * 13
unitedeVente As String * 2
coeffUV As String * 13
codeFamilleProduit As String * 2
codeFamilleArticle As String * 4
groupeProduction As String * 2
caractere1 As String * 2
End Type


Private Sub form_Load()
Dim LaLigne As String
Dim LesArticles() As article
ReDim LesArticles(0)
Open "C:\1.txt" For Input As #1


While Not EOF(1)
Line Input #1, LaLigne
LesArticles(UBound(LesArticles)) = FillArticles(LaLigne)
ReDim Preserve LesArticles(UBound(LesArticles) + 1)
Wend


Close #1


End Sub



Private Function FillArticles(LaLigne As String) As article
Dim TesDonnees() As String
Dim TmpArticle As article


TesDonnees = Split(LaLigne, ";")


With TmpArticle
.codeArticle = TesDonnees(0)
.designationArticle = TesDonnees(1)
.designationAnglaise = TesDonnees(2)
.designation2 = TesDonnees(3)
.unité_de_mesure = TesDonnees(4)
.codeSource = TesDonnees(5)
.prixVente = TesDonnees(6)
.coutUnitaireStandart = TesDonnees(7)
.cycleDappro = TesDonnees(8)
.dateModifEdition = TesDonnees(9)
.edition = TesDonnees(10)
.FormatPlan = TesDonnees(11)
.dateDernMAJ = TesDonnees(12)
.dateCreation = TesDonnees(13)
.unitéAchat = TesDonnees(14)
.coeff = TesDonnees(15)
.unitedeVente = TesDonnees(16)
.coeffUV = TesDonnees(17)
.codeFamilleProduit = TesDonnees(18)
.codeFamilleArticle = TesDonnees(19)
.groupeProduction = TesDonnees(20)
'.caractere1 = TesDonnees(21)
End With
FillArticles = TmpArticle
End Function



@+, Julien
Pensez: Moteur de Recherche, Réponse Acceptée
3
elisabeth_nov Messages postés 103 Date d'inscription jeudi 2 mars 2006 Statut Membre Dernière intervention 4 février 2009
22 mars 2006 à 13:27
merci a toi Julien car tu ma bcp aider. voici le code final, au cas ou quelquun aurai le meme pb:

Dim record As New adodb.Recordset
'CONNEXION A LA BASE DE DONNÉS
Dim Conn As New adodb.Connection 'Connecteur à la base
Dim Chaine As String 'Chaîne de connexion à ODBC



Private Type article
codeArticle As String * 15 'correspond au premier champs
designationArticle As String * 35
designationAnglaise As String * 35
designation2 As String * 35
unité_de_mesure As String * 2
codeSource As String * 1
prixVente As String * 14
coutUnitaireStandart As String * 14
cycleDappro As String * 4
dateModifEdition As String * 11
edition As String * 4
FormatPlan As String * 1
dateDernMAJ As String * 11
dateCreation As String * 11
unitéAchat As String * 2
coeff As String * 13
unitedeVente As String * 2
coeffUV As String * 13
codeFamilleProduit As String * 2
codeFamilleArticle As String * 4
groupeProduction As String * 2
caractere1 As String * 2
End Type




Private Function FillArticles(LaLigne As String) As article
Dim TesDonnees() As String
Dim TmpArticle As article


TesDonnees = Split(LaLigne, ";")


With TmpArticle
.codeArticle = TesDonnees(0)
.designationArticle = TesDonnees(1)
.designationAnglaise = TesDonnees(2)
.designation2 = TesDonnees(3)
.unité_de_mesure = TesDonnees(4)
.codeSource = TesDonnees(5)
.prixVente = TesDonnees(6)
.coutUnitaireStandart = TesDonnees(7)
.cycleDappro = TesDonnees(8)
.dateModifEdition = TesDonnees(9)
.edition = TesDonnees(10)
.FormatPlan = TesDonnees(11)
.dateDernMAJ = TesDonnees(12)
.dateCreation = TesDonnees(13)
.unitéAchat = TesDonnees(14)
.coeff = TesDonnees(15)
.unitedeVente = TesDonnees(16)
.coeffUV = TesDonnees(17)
.codeFamilleProduit = TesDonnees(18)
.codeFamilleArticle = TesDonnees(19)
.groupeProduction = TesDonnees(20)
'.caractere1 = TesDonnees(21)
End With
FillArticles = TmpArticle


With TmpArticle
'On crée la requête
req2 = "INSERT INTO article VALUES ('" _
& Replace(Trim(.codeArticle), "'", "\'") & "','" _
& Replace(Trim(.designationArticle), "'", "\'") & "','" _
& Replace(Trim(.designationAnglaise), "'", "\'") & "','" _
& Replace(Trim(.unité_de_mesure), "'", "\'") & "','" _
& Replace(Trim(.codeSource), "'", "\'") & "','" _
& Replace(Trim(.edition), "'", "\'") & "','" _
& Replace(Trim(.FormatPlan), "'", "\'") & "');"


End With
'On met à jour la base
If Asc(TmpArticle.codeArticle) <> 0 Then
With record
.ActiveConnection = Conn
.Source = req2
.Open
End With
End If


End Function





Private Sub form_Load()


'Initialisation
Chaine = "driver={MySQL ODBC 3.51 Driver};" _
& "database=ordre_de_fabrication;" _
& "server=localhost;" _
& "uid=root;" _
& "pwd=123456;" _
& "port=;" _
& "option=;" _
& "stmt=;"


'Connexion à MySQL
With Conn
.ConnectionString = Chaine
.Open
End With



Dim LaLigne As String
Dim LesArticles() As article
ReDim LesArticles(0)
Open "C:\Documents and Settings\elisabeth.novello\Bureau\Files ALPHA1\ARTICLE_WEB_OF.TXT" For Input As #1


While Not EOF(1)
Line Input #1, LaLigne
LesArticles(UBound(LesArticles)) = FillArticles(LaLigne)
ReDim Preserve LesArticles(UBound(LesArticles) + 1)
Wend


Close #1


End Sub
3
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
22 mars 2006 à 09:58
Bonjour

Tu peux regarder comment faire après un split.

Il est plus facile de batiser kk1 que de la convertir. (surtout en programmation)
Une question se pose sur le forum, pas en privé
NHenry (VB6, VBA excel, VB.NET, C++, C#.Net)
0
cs_jperre Messages postés 268 Date d'inscription lundi 9 janvier 2006 Statut Membre Dernière intervention 19 janvier 2017 2
22 mars 2006 à 10:08
Tout celà est bien compliqué, pour ma part, j'aurais fait une analyse de la chaîne de la ligne du fichier csv comme suit:

Sub ExtractCSV(sFileCSV As String, rsTableBD As Recordset)
Dim lFile as Long, sLine as String, sField As String, n As Byte, m As Byte
lFile=FreeFile
Open sFileCSV For Input As #lFile
Do
Line Input #lFile, sLine
m=0
rsTableBD.AddNew
For n=1 To Len(sLine)
If Mid(sLine,n,1)<>";" Then 'Lecture des données
sField=sField & Mid(sLine,n,1)
Else 'Enregistrement du champ
If sField<>"" Then rsTableDB.Fields(m)=sField
sField=""
m=m+1
End If
'Je suppose qu'il n'y a pas de ";" en fin de ligne
If n=Len(sLine) Then
If sField<>"" Then rsTableDB.Fields(m)=sField
End If
Next n
rsTableBD.Update
Loop Until EOF(lFile)
Close #lFile
End Sub
Bon courage!...
0

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

Posez votre question
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
22 mars 2006 à 10:15
Bonjour

Après un split, tu as toutes les données dans un tableau, tu peux donc voir tous les items de la ligne et les traités sans utuiliser de Recordset (d'ailleur je n'en n'ai jamais utiliser).

Il est plus facile de batiser kk1 que de la convertir. (surtout en programmation)
Une question se pose sur le forum, pas en privé
NHenry (VB6, VBA excel, VB.NET, C++, C#.Net)
0
elisabeth_nov Messages postés 103 Date d'inscription jeudi 2 mars 2006 Statut Membre Dernière intervention 4 février 2009
22 mars 2006 à 10:19
le probleme c que je dois utliser le recordset. et je nai jamais utiliser un split donc je ne sais pas comment il faut faire! merci de ton aide NHenry
0
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
22 mars 2006 à 10:22
salut,

Il est vrai que la fonction Split t'irais parfaitement.

As tu vraiment besoin de garder les ";"

Sinon essaie de voir:

Option Explicit
Private Type article
codeArticle As String * 15 'correspond au premier champs
designationArticle As String * 35
designationAnglaise As String * 35
designation2 As String * 35
unité_de_mesure As String * 2
codeSource As String * 1
prixVente As String * 14
coutUnitaireStandart As String * 14
cycleDappro As String * 4
dateModifEdition As String * 11
edition As String * 4
FormatPlan As String * 1
dateDernMAJ As String * 11
dateCreation As String * 11
unitéAchat As String * 2
coeff As String * 13
unitedeVente As String * 2
coeffUV As String * 13
codeFamilleProduit As String * 2
codeFamilleArticle As String * 4
groupeProduction As String * 2
caractere1 As String * 2
End Type


Private Sub form_Load()



Dim TaLigne As String
Dim TesDonnees() As String
Dim TmpArticle As article
TaLigne = "0032-1DM ;SUPPORT MOULEUSE 1DM ;SUPPORT ;" & _
" ;UN;N; 7509.8900; 4688.8428; 0;00-XXX-0000;" & _
" ; ;20-FEB-1998;26-FEB-1992;UN; 1.000000;UN; 1.000000;SU;NOME;ME"
TesDonnees = Split(TaLigne, ";")


With TmpArticle
.codeArticle = TesDonnees(0)
.designationArticle = TesDonnees(1)
.designationAnglaise = TesDonnees(2)
.designation2 = TesDonnees(3)
.unité_de_mesure = TesDonnees(4)
.codeSource = TesDonnees(5)
.prixVente = TesDonnees(6)
.coutUnitaireStandart = TesDonnees(7)
.cycleDappro = TesDonnees(8)
.dateModifEdition = TesDonnees(9)
.edition = TesDonnees(10)
.FormatPlan = TesDonnees(11)
.dateDernMAJ = TesDonnees(12)
.dateCreation = TesDonnees(13)
.unitéAchat = TesDonnees(14)
.coeff = TesDonnees(15)
.unitedeVente = TesDonnees(16)
.coeffUV = TesDonnees(17)
.codeFamilleProduit = TesDonnees(18)
.codeFamilleArticle = TesDonnees(19)
.groupeProduction = TesDonnees(20)
.caractere1 = TesDonnees(21)
End With
End Sub

@+, Julien
Pensez: Moteur de Recherche, Réponse Acceptée
0
elisabeth_nov Messages postés 103 Date d'inscription jeudi 2 mars 2006 Statut Membre Dernière intervention 4 février 2009
22 mars 2006 à 10:24
peux tu mexpliquer comment on fait dans mon cas avec un split? peut etre que cela pourrait maider. merci NHenry
0
elisabeth_nov Messages postés 103 Date d'inscription jeudi 2 mars 2006 Statut Membre Dernière intervention 4 février 2009
22 mars 2006 à 10:27
salut Julien,
je nai pas besoin de garder les";" mais il faut bien les stocker quelque part non?
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
22 mars 2006 à 10:27
Bonjour

[auteurdetail.aspx?ID=89254 jrivet]
te donne une exemple fonctionnel, à toi de voir si cela te convient.

Il est plus facile de batiser kk1 que de la convertir. (surtout en programmation)
Une question se pose sur le forum, pas en privé
NHenry (VB6, VBA excel, VB.NET, C++, C#.Net)
0
elisabeth_nov Messages postés 103 Date d'inscription jeudi 2 mars 2006 Statut Membre Dernière intervention 4 février 2009
22 mars 2006 à 10:30
le pb avec ton code Julien c que tu pars du principe que je nai quune ligne alors que en realite jen ai 160 000. et dans ce cas comment je fais?
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
22 mars 2006 à 10:32
Bonjour

Tu lis ton fichier ligne par ligne, avec LINE INPUT par exemple.

Il est plus facile de batiser kk1 que de la convertir. (surtout en programmation)
Une question se pose sur le forum, pas en privé
NHenry (VB6, VBA excel, VB.NET, C++, C#.Net)
0
elisabeth_nov Messages postés 103 Date d'inscription jeudi 2 mars 2006 Statut Membre Dernière intervention 4 février 2009
22 mars 2006 à 11:35
et ensuite je voudrais y integrer ce code mais je ny parviens pas:
'REMPLISSAGE TABLE ARTICLE
' 'On lit le fichier des articles
' Fichart = FreeFile
'
' Open "C:\Documents and Settings\elisabeth.novello\Bureau\Files ALPHA1\ARTICLE_WEB_OF.TXT" For Random Access Read As #Fichart Len = Len(art)
'
' While Not EOF(Fichart)
' Get #Fichart, , art
'
' With art
' 'On crée la requête
' req2 = "INSERT INTO article VALUES ('" _
' & Replace(Trim(.codeArticle), "'", "\'") & "','" _
' & Replace(Trim(.designationArticle), "'", "\'") & "','" _
' & Replace(Trim(.designationAnglaise), "'", "\'") & "','" _
' & Replace(Trim(.unité_de_mesure), "'", "\'") & "','" _
' & Replace(Trim(.codeSource), "'", "\'") & "','" _
' & Replace(Trim(.edition), "'", "\'") & "','" _
' & Replace(Trim(.FormatPlan), "'", "\'") & "');"
'
' End With
' 'On met à jour la base
' If Asc(art.codeArticle) <> 0 Then
' With record
' .ActiveConnection = Conn
' .Source = req2
' .Open
' End With
' End If
'
' Wend
' Close #Fichart

comment je fais?
0
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
22 mars 2006 à 11:40
re, ou est ce que ca coince?
Que fais cette ligne exactement Get #Fichart, , art

les get rempli ta structure tout seul???

@+, Julien
Pensez: Moteur de Recherche, Réponse Acceptée
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
22 mars 2006 à 11:44
oui... les joies du mode Random....

Renfield
Admin CodeS-SourceS - MVP Visual Basic
0
elisabeth_nov Messages postés 103 Date d'inscription jeudi 2 mars 2006 Statut Membre Dernière intervention 4 février 2009
22 mars 2006 à 11:47
c le code que jutilise pour remplir ma table article car le but de la manip est de remplir une table et g voulu adapter ce code mais je ny suis pas parvenue! voila pour lexplication.
0
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
22 mars 2006 à 11:51
Re,

Et tu ne peux pas essayer la "fonction" que je t'ai proposee?

En l'adaptant a ta sauce.

@+, Julien
Pensez: Moteur de Recherche, Réponse Acceptée
0
elisabeth_nov Messages postés 103 Date d'inscription jeudi 2 mars 2006 Statut Membre Dernière intervention 4 février 2009
22 mars 2006 à 11:52
deja fait , mais pas sans erreur
0
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
22 mars 2006 à 11:59
Re,

Le truc c est que j ai lu a partir d un fichier ou:
-Une Ligne = Un article

Peu etre que ton fichier source n est pas fait comme ca.
@+, Julien
Pensez: Moteur de Recherche, Réponse Acceptée
0
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
22 mars 2006 à 13:44
Re,

Ravi d'avoir pu t'aider

@+, Julien
Pensez: Moteur de Recherche, Réponse Acceptée
0
Rejoignez-nous