Problème Fichier ".csv"

Résolu
Alain92110 Messages postés 11 Date d'inscription vendredi 15 février 2008 Statut Membre Dernière intervention 29 avril 2008 - 29 mars 2008 à 15:01
Alain92110 Messages postés 11 Date d'inscription vendredi 15 février 2008 Statut Membre Dernière intervention 29 avril 2008 - 29 mars 2008 à 18:55
Bonjour,



<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>
 




Je ne suis pas un pro du VB6 (loin de là) mais pour m’amuser j’essaie de développer un petit programme de stats sur les tirages du Loto.


Rien de bien compliqué a priori (erreur…). Il suffit de télécharger le fichier « loto.csv » auprès du site de la Française des jeux, de le lire (ou le charger dans un tableau) quelques boucles et quelques compteurs et le tour est joué.


Il s’agit d’un fichier de 30 colonnes sur 4745 lignes (+ 4 chaque semaine) et lorsqu’on l’ouvre avec le bloc-note il est  avec séparateur « ; »


Le problème commence dès la lecture du fichier loto.csv.


Le code ci-dessous me renvoie deux résultats différents.


En effet, si j’ouvre le fichier « loto.csv » à partir d’Excel et que je l’enregistre sous « .csv » séparateur « ; ». Le programme fonctionne correctement, la variable UBound(TabChamps) me renvoie bien 29 (de 0 à 29) et je récupère normalement tous les champs.


Par contre si je lance ce code avec le fichier tel qu’il est issu du téléchargement, la variable UBound(TabChamps) me renvoie 142350 (30 col x 2745 lignes) et je ne peux pas lire le fichier.




 


Quelqu’un aurait-il une solution, une idée pour que je puisse lire le fichier sans avoir à le réenregistrer sous Excel au préalable, ce qui est peu pratique.



 




Merci d’avance pour votre aide



 










Private Sub Command1_Click()


Dim TabChamps() As String, enreg As String, ligne As String



 




On Error GoTo erreur


compteur = 1



'**





Open "loto.csv" For Input As #1




Do While Not EOF(1)


Line Input #1, enreg                 'lecture d'une ligne dans la variable "Enreg"


compteur = compteur + 1         'Incrément du compteur d'enregistrement


TabChamps() = Split(enreg, ";") 'Nbre de rubriques de l'enregistrement, la ligne est découpée


If compteur > 1 Then            'On traite à partir de la 2e ligne


'**


temp(1) TabChamps(5): temp(2) TabChamps(6): temp(3) = TabChamps(7)


temp(4) TabChamps(8): temp(5) TabChamps(9): temp(6) = TabChamps(10)


'**


‘Print UBound(TabChamps)


List1.AddItem temp(1) '& vbTab & temp(2) & vbTab & temp(3) & vbTab & temp(4) & vbTab & temp(5) & vbTab & temp(6)



End If  'compteur





<?xml:namespace prefix st1 ns "urn:schemas-microsoft-com:office:smarttags" /??>
<st1:place w:st="on">
Loop
</st1:place>








Close #1






 





erreur:



        Select Case Err.Number



        Case 53:       MsgBox "Le fichier est introuvable"



       
Case Else: MsgBox "Erreur numéro " & Err.Number & "  " & Err.Description






        End Select





End Sub

4 réponses

cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
29 mars 2008 à 15:20
Le problème viens du fait, je pense, du séparateur de ligne.

Ton instruction Line Input attent comme séparateur de ligne, le caractère CR, ou le couple de caractère CR+LF.
Hors le fichier a comme séparateur de ligne le caractère LF, ce qui fait que Line Input ne reconnais pas les différentes lignes.

Ce que tu peut faire, c'est faire une première lecture de la totalité du fichier dans une string. Ensuite tu découpe ta string dans un tableau avec comme séparateur le caractère LF (constante vbLF en vb6).

Ensuite tu fais sur chaque ligne du tableau obtenu, le traitement que tu voulais faire sur chacune des lignes du fichier

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #    http://aide-office-vba.monforum.com/index.php
3
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
29 mars 2008 à 17:09
Salut
En complément : "c'est faire une première lecture de la totalité du fichier dans une string" : C'est déjà ce que tu fais avec le premier "Line Input" : Puisque le séparateur n'est pas reconnu, il charge tout le fichier

+ Il faut que tu détermine quel est le symbole utilisé pour la séparation de ligne, surement vbLf seul, oui
+ Méthode rapide de séparation des lignes : un Split sur vbLf

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
3
Alain92110 Messages postés 11 Date d'inscription vendredi 15 février 2008 Statut Membre Dernière intervention 29 avril 2008
29 mars 2008 à 18:55
Merci pour votre aide

a priori ça marche avec nouveau split sur chaque ligne (Tabchamps) et séparateur ";"

A bientôt
3
Alain92110 Messages postés 11 Date d'inscription vendredi 15 février 2008 Statut Membre Dernière intervention 29 avril 2008
29 mars 2008 à 18:08
Merci pour vos réponses

En effet, TabChamps() = Split(enreg, Vblf)  me donne bien le nombre de lignes
et Tabchamps(1) est bien la première ligne.

Mais mainteant si je peux lire les lignes je n'arrive pas à décomposer chaque champs.
0
Rejoignez-nous