'--voila c'est ici -- si vouz trouvez pour faire une boucle de remplissage - merci
Open Res4 For Output As #2
Print #2, Tab6
Close #2
MsgBox "Ecriture fichier terminée !"
Ce code fonctionne, j'arrive a extraire certaine partie de mon fichier séparé par un ";" puis à l'insérer dans un ordre différent dans un nouveau fichier, mais au remplissage je n'ai que la première ligne du texte de mon textbox, au lieu d'avoir toutes les lignes !. Quelqu'un peut t'il m'aider à finir .. je suis novice, et là je rame un peu.. merci
cs_CanisLupus
Messages postés3757Date d'inscriptionmardi 23 septembre 2003StatutMembreDernière intervention13 mars 200621 15 févr. 2005 à 16:11
Ok, je vois dans ce cas il y a plus simple :
Dim buf As String
Dim t() As String
' Si tu veux conserver l'affichage
Open nomfich For Input As #1
RichTextBox2 = Input(LOF(1), #1)
Close #1
' Pour recopier tout le fichier en le modifiant
Open nomfich For Input As #1
Open "Nouveau.txt" For Output As #2
Do While Not EOF(1)
Line Input #1, buf
t = Split(buf, ";")
Print #2, t(3) & " - " & t(1) & " - " & t(2)
Loop
Close #1
Close #2
Split est une fonction de VB et je crois que c'est mieux que la fonction Element et plus rapide.
A savoir, un tableau rempli avec un split commence toujours à 0, ainsi tes tab1 à tab5 deviennent t(0) à t(4).
' Pour rajouter l'année, insère ce bout de code dans la boucle de remplissage avant le print si tu veux l'écrire dans le nouveau fichier. Mais attention s'il y a du 01 et 02 pour 2004 aussi et ça, on ne peut pas le deviner.
If CInt(Right$(t(0), 2)) > Month(Date) Then
t(0) = t(0) & "2004"
Else
t(0) = t(0) & "2005"
End If
Si tu prog en VB6, ça devrait marcher, si c du VB.NET, il y aurait une modif à faire :
A la place de
If CInt(Right$(t(0), 2)) > Month(Date) Then
il faudrait coder
If CInt(Mid(t(0),Len(t(0))-2, 2)) > Month(Date) Then
cs_CanisLupus
Messages postés3757Date d'inscriptionmardi 23 septembre 2003StatutMembreDernière intervention13 mars 200621 14 févr. 2005 à 21:00
Salut, ton code doit être incomplet car je ne vois pas les relations entre FichierEntier, RichTextBox2.Text, Element, ....
D'autre part, à la place de :
Open NameFich For Input As #1
Do
Line Input #1, Ligne
FichierEntier = FichierEntier & Ligne
Loop Until EOF(1)
Close #1
tu peux coder :
Open NameFich For Input As #1
FichierEntier = Input(LOF(1), #1)
Close #1
Ca te permettrait de charger ton fichier texte en une seule fois.
phenrent76
Messages postés13Date d'inscriptionmardi 16 mars 2004StatutMembreDernière intervention 3 mars 2005 14 févr. 2005 à 22:20
Effectivement CanisLupus a force de chercher, et en particulier par incrémentation ligne, mon code
était un peu encombré, le voici, mais as tu un tuyau pour mon problème ... cordialement
Open nomfich For Input As #1
RichTextBox2 = Input(LOF(1), #1)
Close #1
cs_CanisLupus
Messages postés3757Date d'inscriptionmardi 23 septembre 2003StatutMembreDernière intervention13 mars 200621 15 févr. 2005 à 09:54
Je suppose que Element(....) est une fonction a toi pour découper la chaine ?
De toutes façons, tel que, ton code ne prend que les 5 premiers éléments (la 1ère ligne ?)
D'autre part, quelle est la structure de ton fichier ? Un tit exemple de quelques lignes ....
Loup Gris
Vous n’avez pas trouvé la réponse que vous recherchez ?
phenrent76
Messages postés13Date d'inscriptionmardi 16 mars 2004StatutMembreDernière intervention 3 mars 2005 15 févr. 2005 à 13:30
Effectivement élément vient d'une fonction trouvée me semble t'il sur ce site la voici :
Public Function Element(ByVal Texte As String, _
ByVal Numero As Integer, _
ByVal Séparateur As String) As String
Dim Debut As Integer, r As Integer, No As Integer
If Right(Texte, Len(Séparateur)) <> Séparateur Then Texte = Texte & Séparateur
Debut = 1
No = 1
Element = ""
Element_0:
r = InStr(Debut, Texte, Séparateur)
If r = 0 Then GoTo Element_Fin
If Numero = No Then GoTo Element_10
No = No + 1
Debut = r + Len(Séparateur)
If r >= Len(Texte) Then GoTo Element_Fin
DoEvents
GoTo Element_0
Element_10:
Element = Mid(Texte, Debut, r - Debut)
Element_Fin:
End Function
concernant le fichier, voici quelques lignes
02/12;21:12:26;0126358859;75;STE DELAMNIE;PARIS;DURIEUX SERGE
02/12;21:12:27.0214685595;76;STE MALUITRE;HAUTOT;PHANNI PATRICIA
02/12;21:31:56;0423512566;34;STE DUPUIS;VENDARGUES;PANIS MAURICE
Etc
Le code n'extrait effectivement que 5 éléments du fichier, c'était juste pour étude, sachant que je veux exporter dans un nouveau fichier que quelques informations par ligne et pas dans le même ordre, que le contenu initial.
cordialement.
En plus, si jamais t'as une petite idée supplémentaire, la premiere colonne contient une information de adte, mais celle ci est incomplète, et après ce problème de lignes, je souhaiterais compléter ce champ avec une date complète style 00/00/2005, sachant que
certains fichiers peuvent contenir des données à cheval sur deux années, .... je me pose la question.
merci
phenrent76
Messages postés13Date d'inscriptionmardi 16 mars 2004StatutMembreDernière intervention 3 mars 2005 15 févr. 2005 à 19:39
Merci pour tout Loup Gris
Rapide et efficace, ça fait vraiment plaisir .....
Tout marche nickel, et effectivement le split est beaucoup plus rapide.
Si je peux encore t'ennuyer deux secondes, peux tu me donner un peu plus d'expliq sur
If CInt(Right$(t(0), 2)) > Month(Date) Then
t(0) = t(0) & "2004"
Else
t(0) = t(0) & "2005"
End If
ca marche nickel, mais à quoi correspond le '2'
Encore un grand merci
cordialement -philippe
cs_CanisLupus
Messages postés3757Date d'inscriptionmardi 23 septembre 2003StatutMembreDernière intervention13 mars 200621 15 févr. 2005 à 20:14
Comme tes enregs commencent par "02/12", j'ai supposé que c'était du format "dd/mm".
Donc avec right$(t(0),2) j'extrais les 2 caractères de droite correspondant au mois. Si c'est du format anglais ("mm/dd") tu remplaces right$ par left$.
Ensuite, je convertis en integer pour comparer avec le mois en cours.
Si c'est > (de 3 à 12) on peut penser que c'est 2004, sinon c'est 2005.
Quoiqu'il faut se méfier si tu as des dates 02/02 par exemple qui devraient faire partie de 2004.