Alain92110
Messages postés11Date d'inscriptionvendredi 15 février 2008StatutMembreDernière intervention29 avril 2008
-
29 mars 2008 à 15:01
Alain92110
Messages postés11Date d'inscriptionvendredi 15 février 2008StatutMembreDernière intervention29 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
cs_casy
Messages postés7741Date d'inscriptionmercredi 1 septembre 2004StatutMembreDernière intervention24 septembre 201440 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
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 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)