cs_abracadabra
Messages postés15Date d'inscriptionjeudi 17 avril 2003StatutMembreDernière intervention14 novembre 2005
-
29 sept. 2005 à 18:36
cboulas
Messages postés2641Date d'inscriptionmercredi 2 juin 2004StatutMembreDernière intervention 8 janvier 2014
-
30 sept. 2005 à 15:14
Salut tout le monde,
J'espère que vous allez tous bien..
j'attaque la lecture des fichiers txt via VB et
j'ai un exercice qui me pose un mega probleme. J'espere que vous pourriez
m'aider, je vais essayer de vous resumer l'exercice :
J'ai un 1er fichier Input structuré de la façon suivante et avec les champs
suivants:
:A1:UNIQUE (Doit etre présent )
:C1:UNIQUE (Doit etre présent )
:Z3:UNIQUE (Doit etre présent )
:C1:MULTIPLE (Doit etre présent au moins une fois)
:T1:MULTIPLE (peut ne pas être présent)
:F1:UNIQUE (Doit etre présent )
Exemple:
:A1:Ingrid
:C1:Neerlandaise
:Z3:28ans
:C1:200
:T1:Fac
:C1:300
:T1:Hotel
:F1:Fin
:A1:Denis
:C1:Canadienne
:Z3:28ans
:C1:400
:T1:bILLET d'avion
:C1:150
:F1:Fin
le code doit transformer ces données dans un autre fichier output de la
façon suivante:
Ingird;Neerlandaise;28ans;200;Fac;Fin
Ingird;Neerlandaise;28ans;300;Hotel;Fin
Denis;Canadienne;28ans;400;bILLET d'avion;Fin
Denis;Canadienne;28ans;150;;Fin
(attention à la dernière ligne comme il ny a pas eu de T1 il la laissé vide ;; )
j'ai tout essayé et ça marche pas je vous serai tres reconnaissante si
vous pouvez m'aider à écrire ce code.
cboulas
Messages postés2641Date d'inscriptionmercredi 2 juin 2004StatutMembreDernière intervention 8 janvier 201416 29 sept. 2005 à 21:00
Salut Abracadabra, et ton soucis sans va :)
Bon j'arrête ma déconne, je pense qu'il faudrait recupérer les infos de tes C1, A1, etc... et les stockés dans une variable tableau style : MesDatas()
Chaque ligne, une fois tout stocké dedant, il te sera super facile d'en faire ce que tu veux ;) je vais essayer de te fair eun script.
cboulas
Messages postés2641Date d'inscriptionmercredi 2 juin 2004StatutMembreDernière intervention 8 janvier 201416 29 sept. 2005 à 21:23
Bien me revoici, alors je t'ai concocté un début de code :
Open "c:\toto.txt" For Input As #1 'Ouverture du fichier pour lecture et de numéro #1
olddata = Input$(LOF(1), #1) 'Stockage du contenu
Close #1 'Fermeture du fichier
Dim NewDatas() As String 'Création d'un tableau de string
NewDatas() = Split(olddata, vbCr) 'On scalpe, découpe comme tu veux, enfin on coupe à chaque fois que l'on trouve un retour à la ligne (VbCr) chaque ligne sera mise dans un tableau
Ensuite il te suffit de faire varier l'index de NewDatas(index) pour obtenir tes infos
cboulas
Messages postés2641Date d'inscriptionmercredi 2 juin 2004StatutMembreDernière intervention 8 janvier 201416 29 sept. 2005 à 21:57
Tiens voici le code complet qui te permet de passer de l'un à l'autre, il y a surement des amélioration à faire mais c'est un début ;)
Dim OldData 'Création de la variable qui contiendra le contenu du fichier source
Open "c:\toto.txt" For Input As #1 'Ouverture du fichier source
OldData = Input$(LOF(1), #1) 'Stockage du contenu dans la variable
Close #1 'Fermeture du fichier source
Dim NewDatas() As String 'Déclaration d'un tableau de String (texte) pour stocker le contenu du fichier trier
NewDatas() = Split(OldData, vbCr) 'Triage du fichier dans le tableau : 1 info par ligne du tableau (VbCr)
Dim LineInfo As String 'Déclaration d'une variable servant à écrire le texte finalisé
Open "c:\NewToto.txt" For Output As #1 'Ouverture du fichier destination en mode écriture
For Each Index In NewDatas() 'Pour chaque ligne du tableau NewDatas() (début de la boucle)
Dim TypeInfo As String 'Déclaration d'une variable Texte pour stocker le type d'info que l'on récolte à parir de la ligne du tableau
Dim PStart As Integer 'Déclaration d'un Entier qui nous servira plus tard dans le repérage des Type d'info et des Données du type
PStart = InStr(Index, ":") + 1 'Recherche de la position du 1er ':' à partir de la ligne du tableau en cours
TypeInfo = Mid(Index, PStart, 2) 'Recolte du Type d'info concerné
PStart = InStr(PStart, Index, ":") + 1 'Recherche du 2nd ':' à partir du 1er ':'
If Len(LineInfo) = 0 Then 'Test si LineInfo est vide (c'est à dire si c'est une nouvelle ligne à écrire
LineInfo = Mid(Index, PStart) 'Si oui alors stockage direct de l'info dans la variable
Else
LineInfo = LineInfo & ";" & Mid(Index, PStart) 'Sinon stockage de l'info à la suite de celle déjà contenu
End If 'Fin de la condition
If TypeInfo = "F1" Then 'Test si on arrive à la fin d'un profil ;)
Print #1, LineInfo 'Si oui alors on écrit la ligne dans le fichier
LineInfo = Empty 'On efface le contenu de LineInfo ce qui nous permettra de savoir que l'on débute une nouvelle ligne
End If 'Fin de la condition
Next 'On passe à la ligne suivante dans le tableau
Close #1 'Le tableau à été scruter, trier, etc... on ferme le fichier car c'est fini
cboulas
Messages postés2641Date d'inscriptionmercredi 2 juin 2004StatutMembreDernière intervention 8 janvier 201416 29 sept. 2005 à 21:59
Amélioration il faut remplacer :
Dim OldData 'Création de la variable qui contiendra le contenu du fichier source
Open "c:\toto.txt" For Input As #1 'Ouverture du fichier source
OldData = Input$(LOF(1), #1) 'Stockage du contenu dans la variable
Close #1 'Fermeture du fichier source
Dim NewDatas() As String 'Déclaration d'un tableau de String (texte) pour stocker le contenu du fichier trier
NewDatas() = Split(OldData, vbCr)
par :
Dim NewDatas() As String
Open "c:\toto.txt" For Input As #1
NewDatas() = Split(Input$(LOF(1), #1), vbCr)
Close #1
cboulas
Messages postés2641Date d'inscriptionmercredi 2 juin 2004StatutMembreDernière intervention 8 janvier 201416 30 sept. 2005 à 12:37
Salut, j'ai un peu avancer ce matin sur ton projet t ai obtenu ceci :
Sub WriteInFile(Prof() As String, F As String, FNum As Integer) 'Fonction de sauvegarde du profil
Print #FNum, Prof(0) & ";" & Prof(1) & ";" & Prof(2) & ";" & Prof(3) & ";" & F 'Ecriture dans le fichier
End Sub
Private Sub Form_Load()
Dim NewDatas() As String 'Déclaration d'un tableau de String (texte) pour stocker le contenu du fichier trier
Open "toto.txt" For Input As #1 'Ouverture du fichier source
NewDatas() = Split(Input$(LOF(1), #1), vbCr) 'Stockage du contenu dans la variable avec découpage
Close #1 'Fermeture du fichier source
Dim Profil(3) As String 'Création d'un profil
Open "NewToto.txt" For Output As #1 'Ouverture du fichier destination en mode écriture
For Each Index In NewDatas() 'Pour chaque ligne du tableau NewDatas() (début de la boucle)
Dim Info As String 'Déclaration d'une variable Texte pour stocker le type d'info que l'on récolte à parir de la ligne du tableau
Dim PType As Integer, PInfo As Integer 'Déclaration d'un Entier qui nous servira plus tard dans le repérage des Type d'info et des Données du type
PType = InStr(Index, ":") + 1 'Recherche de la position du 1er ':' à partir de la ligne du tableau en cours
PInfo = InStr(PType, Index, ":") + 1 'Recherche du 2nd ':' à partir du 1er ':'
Info = Mid(Index, PInfo)
Select Case Mid(Index, PType, 2) 'Recolte du Type d'info concerné
Case "A1"
Profil(0) = Info
Case "C1"
Profil(1) = Info
Case "Z3"
Profil(2) = Info
Case "T1"
Profil(3) = Info
Case "F1"
WriteInFile Profil(), Mid(Index, PInfo), 1
End Select
Next 'On passe à la ligne suivante dans le tableau
Close #1 'Le tableau à été scruter, trier, etc... on ferme le fichier car c'est fini
End Sub
Il faut que je fasse maintenant la gestion de plusieurs lignes mais cela devrait être fait assez rapidement.