Remettre un fichier au début (BOF) [Résolu]

Signaler
Messages postés
152
Date d'inscription
mardi 4 novembre 2008
Statut
Membre
Dernière intervention
10 avril 2017
-
Messages postés
152
Date d'inscription
mardi 4 novembre 2008
Statut
Membre
Dernière intervention
10 avril 2017
-
Bonjour tout le monde,

J'ai ce code qui calcule le nombre de lignes dans mon fichier txt :

Dim Fichier As Variant, Ligne As String, c As Integer, Champs As Variant
    Fichier = FreeFile
    Open NomFichier For Input Access Read Lock Write As #Fichier
    Line Input #Fichier, Ligne
    While Not EOF(Fichier)
    Line Input #Fichier, Ligne
        NC = NC + 1
    Wend

J'ai par exemple 197 lignes

Je redimensionne un tableau avec le résultat de NC :

ReDim NomsDesCrus(1 To NC)

Je me demandais comment je pouvais remettre le fichier au début ?

J'ai essayé BOF mais ça ne fonctionne pas.

Si je le laisse telle quelle, j' ai ce message d'erreur :

L'entrée dépasse la fin du fichier

Voici le code qui pose problème :

    For c = 1 To NC
        Line Input #Fichier, Ligne
        Champs = Split(Ligne)
        If Champs(0) = "" Then
            MsgBox "Nom d'oenologue invalide"
            Exit Function
        End If
        If Rechercher(NomsDesCrus, Champs(0)) Then GoTo ErreurLecture
        NomsDesCrus(c) = Champs(1)
    Next c
    Close #Fichier

Merci d'avance pour l'aide.

beegees

10 réponses

Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
67
ca m'importe correctement les 198 références...


Option Explicit

Private Type Wine
Cru As String
Quantite As Single
End Type

Private Sub Form_Load()
Dim xtWines() As Wine
Dim nCount As Long
Dim i As Long
Me.Show
DoEvents

nCount = ReadWineFile("C:\a.txt", xtWines)
If nCount Then
For i = 0 To nCount - 1
Me.Print xtWines(i).Cru & " en stock: " & FormatNumber(xtWines(i).Quantite, 2)
Next i
Else
MsgBox "Aucun vin trouvé. Le fichier est vide ou non conforme.", vbExclamation
End If
End Sub

Private Function ReadWineFile(ByRef vsFilePath As String, ByRef vxtWines() As Wine) As Long
Dim sBuffer As String
Dim iFile As Integer
Dim oMatch As Object
Dim oMatches As Object
Dim i As Long
iFile = FreeFile
Open vsFilePath For Input As #iFile
sBuffer = Input(LOF(iFile), #iFile)
Close #iFile

With CreateObject("VbScript.Regexp")
.Pattern = "^([\wéèë\-' âôî]+),?.+ ([\d.]+)$"
.Global = True
.MultiLine = True
.IgnoreCase = True
Set oMatches = .Execute(sBuffer)
ReadWineFile = oMatches.Count

If ReadWineFile Then
ReDim vxtWines(ReadWineFile - 1)
For Each oMatch In oMatches
vxtWines(i).Cru = oMatch.submatches(0)
vxtWines(i).Quantite = Val(oMatch.submatches(1))
i = i + 1
Next oMatch
End If
End With
End Function
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
67
Seek

mais deux passes sont inutiles, ici...

a quoi ressemble ton fichier ? (donne nous quelques lignes)
que souhaites tu faire sur ces données ?
Messages postés
152
Date d'inscription
mardi 4 novembre 2008
Statut
Membre
Dernière intervention
10 avril 2017
1
Salut,

Merci pour ta réponse.

mais deux passes sont inutiles, ici...

Que veux-tu dire par là ?

Voici les données de mon fichier :

Gentil 1996, Huguel et Fils    32
Pinot Blanc 1998, F.E. Trimbach    27
Riesling 1999, Huguel et Fils    32
Bordeaux 1998, Château Doisy-Daëne, Famille Dubourdieu    53
Entre-Deux-Mers 2000, Château Bonnet    27
Graves 1999, Château Roquetaillade La Grange, P.Guignard    28
Graves 2000, Château Roquetaillade La Grange, P.Guignard    28
Premières Côtes de Blaye 1998, Château Haut Bertinerie, Bantegnies & Fils    40
Bourgogne Aligoté 1999, J.M. Brocard    27
Bourgogne Blanc 1999, Chardonnay, Chartron et Trébuchet    32
Chablis 2000, Joseph Drouhin    34
Chablis 1998, La Chablisienne, Cuvée L.L., Louis Roche    37
Chablis 1999, Champs Royaux, W. Fèvre    39
Chablis 2000, Bichot    43
Meurseault 1997, H. De Villamont    75
Vin de Pays des Côtes de Gascogne 2000, La Gascogne, Alain Brumont    25
Jurançon 1998, Cuvée Marie, Charles Hours    40
Muscadet Sèvre-et-Maine 2000, sur Lies, Château du Cléray, Sauvion et Fils    25
Muscadet Sèvre-et-Maine 1999, Cardinal Richard, Sauvion et Fils    24
Sancerre 2000, Domaine de la Moussière, A. Mellot    35
Sancerre 2000, Château de Sancerre, Marnier-Lapostolle    38
Côtes du Rhône 1999, E. Guigal    35
Croze-Hermitage 1999, Les Meysonniers, M.Chapoutier    44
Chardonnay 2000, Fleur du Cap, Athberghelder, Stellenbosch    25
Marsanne 1997, Château Tahblik, Victoria    36
Sauvignon Blanc 2000, Rosmont Estates    43
L'Orpailleur 2000, Vignoble de l'Orpailleur, Dunham, Québec    25
Chardonnay 2000, Inniskillin, Niagara, Ontario Peninsula    30
Chardonnay 1999, sur Lies, Henry of Pelham, Niagara, Ontario Peninsula    35
Gewurztraminer 1999, Vinland Estates, Niagara, Ontario Peninsula    35
Sauvignon Blanc 1998, Caymus Vinerards, Napa Valley    75
Conundrum 1998, Caymus Vineyards, Napa Valley    85
Chardonnay 1995, Sterling Vineyard, Carneros, Californie (1.5 litres)    105
Chardonnay 1998, Far Niente, Nickel et Nickel, Nappa Valley    145
Bianco di Torgiano 1998, Torre di Giano, Lungarotti, D.O.C.    25
Orvieto Classico 2000, Casasole, Antinori, Ombrie D.O.C.    25
Toscane 1997, Belcaro, San Félice, I.G.T.    36
Bordeaux Supérieur 1999, Château de Timberlay    30
Premières Côtes de Bordeaux 1998 , Château Grange Clinet, Michel Haury    32
Côtes de Bourg 1997, Château Bujan    30
Côtes de Bourg 1995, Cuvée Réservée, Château de Tayac    42
Graves 1996, Château Chantegrive (1.5 Litres)    150
Fronsac 1996, Château de la Rivière (3 Litres)    240
Margaux 1999, Initial de Desmirail, D. Lurton    55
Margaux 1995, Château La Tour de Mons (1.5 Litres)    200
Médoc 1998, Château Tour Haut Caussan, Cru Bourgeois    75
Médoc 1985, Château Patache d'Aux, Cru Bourgeois (3 Litres)    500
Haut-Médoc 1997, Sociando Mallet (1.5 Litres)    250
Moulis en Médoc 1996, Château Malmaison, Baronne Nadine Rothschild    50
Moulis en Médoc 1990, Château Haut-Franquet, Le Grand Poujeaux    65
Pauillac 1996, Château Pey La Rose, Denis Jugla    75
Pessac-Léognan 1997, Château Haut-Brion, 1er Cru Classé    500
Pomerol 1995, J.P. Moueix (1.5 litres)    150
Saint-Émilion Grand Cru 1993, Château Viramière (1.5 Litres)    125
Saint-Émilion Grand Cru 1995, Château Cantin (1.5 Litres)    150
Bourgogne 1998, J. Faiveley    37
Bourgogne 1998, Couvent des Jacobins, Louis Jadot    42
Chambolle-Musigny 1ER Cru 1997, H. De Villamont    80
Hautes Côtes de Nuit 1999, Bouchard Père et Fils    43
Mercurey 1999, Domaine Michel Juillot    51
Vosne-Romanée 1994, Bruno Claire    95
Vosne-Romanée 1988, Pierre Guyon    105
Brouilly 2000, G. Duboeuf    38
Morgon 2000, Château De Pizay    35
Coteaux du Languedoc 1999, Les Ruffes, Château Sauvageonne    25
Corbières 2000, Château Moulin Saint-Jean, Jean-Noël Bousquet    25
Corbières 1999, Cuvée Arnaud de Berre, Château de Lastours    25
Corbières 1998, Château Grand Moulin, J.N. Bousquet    35
Costières de Nîmes 2000, Château de Nages, M. Gassier    26
Côtes du Roussillon 2000, Canon du Maréchal, Domaine Cazes    25
Côtes du Roussillon 1998, Cuvée Marie-Gabrielle, Domaine Cazes    35
Côtes du Roussillon 1996, Le Crédo, Domaine Cazes    50
Cahors 1996, Château Les Hauts d'Aglan    35
Cahors 1998, Château Lagrezette, A.D. Perrin    47
Côtes de Provence 2000, Château La Tour de L'Évêque    32
Madiran 1995, Château Montus, Alain Brumont    62
Châteauneuf-du-Pape 1998, Château de la Gardine    70
Côtes du Rhône 1999, E. Guigal    35
Côtes-Du-Rhône Villages Rasteau 98, Benjamin Brunel, Château de la Gardine    43
Crozes-Hermitage 1998, Cuvée Gaby, Domaine du Colombier    52
Hermitage 1998, Domaine du Colombier    110
Cabernet Sauvignon 1997, Le Bonheur, Sinomsberg-Stellenbosch    50
Merlot 1999, Fleur du Cap, Bergkelder Limited, Coastal Region    27
Pinotage 1997, Kanonkop, Simonsberg Stellenbosch    70
Trempanillo 1997, Mendoza, Familia Zuccardi    40
Cabernet Sauvignon 1999, Bin 444, Wyndham Estate    36
Shiraz 1998, Bin 28, Kalimna Penfolds    60
L'Orpailleur 2000, Vignoble de l'Orpailleur, Dunham, Québec    25
Baco Noir 1999, Henry Of Pelham, Niagara, Ontario Peninsula    33
Cabernet-Franc 2000, Inniskillin, Niagara, Ontario Peninsula    30
Pinot Noir 1998, Inniskillin, Niagara, Ontario Peninsula    50
Cabernet Sauvignon 2000, Errazuriz, Domaine Estate    30
Merlot 2000, Errazuriz, Domaine Estate    30
Californie 1999, Big House Red, Ca'del Solo    43
Cabernet Sauvignon 1999, Woodbridge, R. Mondavie, Californie    33
Cabernet Sauvignon 1999, Private Selection, Coastal, Robert Mondavi    40
Claret 1997, Dimond Series, Francis Copolla, Californie    60
Cabernet Sauvignon 1997, Cinque Cépages, Château Saint-Jean    200
Cabernet Sauvignon 1997, Caymus Winery, Napa Valley    210
Cabernet Sauvignon 1996, Caymus Winery, Napa Valley    225
Cabernet Sauvignon 1994, Caymus Winery, Napa Valley    250
Cabernet Sauvignon 1997, Special Selection, Caymus Winery, Napa Valley    500
Merlot 2000, Delicato Vineyards    30
Merlot 2000, Private Selection, Coastal, Robert Mondavi    40
Merlot 1998, Dimond Series, Francis Copolla, Californie    60
Mataro 1997, Bridgehead, Ridge    80
Syrah 1996, Marietta Cellars, California    65
Sangiovese 1998, Bonny Doon Vineyard    52
Zinfandel 1998, Woodbridge, R. Mondavie, Californie    50
Zinfandel 1997, Caymus Winery, Napa Valley    100
Zinfandel 1996, Caymus Winery, Napa Valley    110
Barolo 1999, Prunotto, Occhetti    128
Chianti Classico 1999, San Félice, Agriola, D.O.C.G., Toscane    35
Chianti Classico 1999, Berardenga, Fattoria di Felsina    59
Chianti Classico Reserva 1997, Badia A Passignano, Antinori, D.O.C.G., Toscane    65
Chianti Classico Reserva 1997, Tenuta Marchesi Antinori, D.O.C.G., Toscane    65
Chianti Classico Reserva 1997, Villa Cafoggio    76
Chianti Classico 1997, Riserva Ducale, Ruffino    98
Chianti Classico Reserva 1998, Badia A Passignano, Antinori, D.O.C.G., Toscane    106
Chianti Classico Reserva 1998, Tenute Marchesi Antinori, D.O.C.G., Toscane    106
Chianti Classico Reserva 1997, Carpineto (1.5 Litre)    110
Chianti Classico 1995, Reserva, Poggio Rosso (1.5 Litres)    150
Toscane 1996, Campaccio, Terrabianca, I.G.T    75
Toscane 1997, Vigorello, San Felice, I.G.T.    80
Toscane 1997, Campaccio, Terrabianca, I.G.T    87
Toscane 1997, Tignanello, Antinori, I.G.T.    125
Toscane 1997, Guado Al Tasso, Antinori, Bolgheri    135
Toscane 1994, Vigorello, San Félice, V.D.T. (1.5 Litres)    160
Toscane 1995, Vigorello, San Félice, V.D.T. (1.5 Litres)    160
Toscane 1996, Sassicaia, Tenuta San Guido, Bolgheri    185
Toscane 1997, Solaia, Antinori    185
Toscane 1998, Solengo, Argiano    189
Toscane 1998, Guado Al Tasso, Antinori, Bolgheri    189
Toscane 1995, Cabernet Sauvignon Farnito, Carpineto (1.5 Litres)    195
Toscane 1998, Tignanello, Antinori, I.G.T.    215
Toscane 1997, Ornellaia, Tenuta dell' Ornellaia, Bolgheri    225
Toscane 1998, Sassicaia, Tenuta San Guido, Bolgheri    284
Toscane 1997, Masseto, Tenuta dell' Ornellaia, Bolgheri    454
Toscane 1996, Masseto, Tenuta dell' Ornellaia, Bolgheri    500
Toscane 1997, Ornellaia, Tenuta dell' Ornellaia, Bolgheri (1.5 Litres)    500
Rubesco 1998, Rosso di Torgiano, Lungarotti, D.O.C,. Ombrie    24
Rubesco Reserva 1998, Monticchio, Lungarotti, D.O.C.G., Ombrie    75
Rubesco Reserva 1988, Monticchio, Lungarotti, D.O.C.G., Ombrie    125
Ombrie 1998, San Giorgio, Cantine Lungarotti, V.D.T. (1.5 Litres)    125
Côtes du Rhône, Cellier des Dauphins (250 ml)    7
L'Orpailleur 2000, Vignoble de l'Orpailleur, Dunham, Québec    25
Côtes du Frontonnais 2000, Château Bellevue La Forêt, France    23
Costières de Nîmes 1999, Château de Nages, France    26
Piccolo Lanson (200 ml    25
Martel Brut    60
Pommery Brut Royal    80
Cuvée Dom Perignon 1990    250
Piccolo Kriter (200 ml)    6.5
Grande Cuvée, Hongrie    24
Blanquette de Limoux 1996, Domaine de Fourne, France    35
Mousse d'Or, l'Orpailleur, Québec    35
Côtes du Rhône, Cellier des Dauphins (250 ml)    7
Bordeaux 2000, Mouton Cadet    15
Bourgogne Aligoté 2000, J.M. Brocard    16
Muscadet Sèvre-et-Maine 1999, Sauvignon du Cléray    16
Alsace 2000, Tokay Pinot Gris, Pfaffenheims    17
Alsace 2000, Riesling, Willm    18
Chablis 2000, Bichot    18
Rully 1998, La Chaume, Chartron et Trébuchet    25
Chablis 1er cru 1997, Château de Maligny    27.5
Toscane 1997, Belcaro, San Félice, I.G.T. Italie    15
Chardonnay 2000, Sundial, Fetzer Vineyards    19
Bordeaux 1999, Mouton Cadet    15
Cahors 1998, Prieuré de Cénac    15
Côtes de Castillon 1999, Château la Gasparade    15
Bordeaux Supérieur 1998, Château de Parenchère    18
Médoc 1996, Cuvée de la Commenderie du Bontemps    18
Cahors 1998, Château les Hauts d'Aglan    22
Brouilly 2000, G. Duboeuf (500 ml)    25
Haut-Médoc 1996, Château Larose-Trintaudon, Cru Bourgeois    30
Listrac-Médoc 1998, Château Clarke    30
Médoc 1998, Château La Tour Haut-Caussan, Cru Bourgeois    35
Saint-Émillion Grand Cru 1996, Château Destieux, MM. Dauriac    55
Merlot 1999, Eagles Peak, Fetzer Vineyards, États-Unis    19
Rioja Riserva 1996, Marqués de Riscal, Espagne    22
Chianti Classico 1998, Peppoli, Antinori, Italie    23
Quinta Da Ervamoira, 10 Ans, Ramos Pinto (350 ml)    75
Late Bottled Vintage 1996, Taylor Fladgate    40
Late Bottled Vintage 1995, Anno    40
Late Bottled Vintage 1996, Quinta Do Castellino    45
Muscat de Beaune De Venise 1997, Domaine Decoyeaux, France (350 ml)    22
Muscat de Rivesaltes 1998, Domaine Cazes, France    40
Rivesaltes 1990, Vintage, Domaine Cazes, France    48
Sauternes 1991, Château d'Yquem, 1er Grand Cru Classé (350 ml)    300
L'Orpailleur Blanc 2000, Vignoble de l'Orpailleur, Dunham, Québec    5
L'Orpailleur Rosé 2000, Vignoble de l'Orpailleur, Dunham, Québec    5
Corbières 2000, Château Moulin Saint-Jean, Jean-Noël Bousquet    5
Late Bottled Vintage 1996, Quinta Do Castellino    5
Muscat de Rivesaltes 1998, Domaine Cazes, France    5
Rivesaltes 1990, Vintage, Domaine Cazes, France    5
L'Apérid'Or, Mistelle de l'Orpailleur, Orpailleur, Québec    5
Floc de Gascogne, Château Millet    5
Pineau des Charentes, Vieille Réserve Or 10 Ans, Château de Beaulon    5

Je veux mettre le nom du cru dans un tableau et la valeur entière dans un autre tableau.

Pourquoi ais-je cette erreur ?

Merci encore pour ton aide.

beegees
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
67
le curseur de lecture est arrivé a la fin du fichier... tu l'avais bien vu.

comme je te l'ai dit, utilises seek pour rembobiner la chose..

deux tableaux ?

au final, tu veux un tableau, où sont stockés le nom et la quantité de bouteilles, j'imagine :

"Gentil 1996" et 32
sans les dissoscier....


non ?
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
70
A vérifier, mais je ne pense pas qu'on puisse utiliser Seek sur les fichiers ouverts en mode texte.
A mon avis, ce n'est utilisable que les fichiers accessibles en Random, ce qui impose un format de donnée à longueur fixe (non applicable ici)

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)
Messages postés
152
Date d'inscription
mardi 4 novembre 2008
Statut
Membre
Dernière intervention
10 avril 2017
1
Salut,

Merci à vous deux.

au final, tu veux un tableau, où sont stockés le nom et la quantité de bouteilles, j'imagine :

"Gentil 1996"  et  32

sans les dissoscier....

Oui, je pourrais faire comme cela.

Donc pas de seek ?

Je peux peut être fermer le fichier et l'ouvrir à nouveau, ça ne serait pas plus simple ?

Merci
beegees
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
67
sisi, c'est possible.
mais Line Input est lent (VB doit trouver la fin des lignes)
alors deux passes...

parfaitement inutile ici.

certaines lignes sont singulières:

Piccolo Lanson (200 ml 25
Martel Brut 60
Pommery Brut Royal 80
Cuvée Dom Perignon 1990 250
Piccolo Kriter (200 ml) 6.5
Grande Cuvée, Hongrie 24


néanmoins, rien qu'un RegExp ne puisse découper ^^
Messages postés
152
Date d'inscription
mardi 4 novembre 2008
Statut
Membre
Dernière intervention
10 avril 2017
1
Salut,

Un tout grand merci pour ta réponse.

Je vais entre autre utiliser ton code.

Encore merci
beegees
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
67
si tu souhaites des explications sur le code en question, postes un message...
Messages postés
152
Date d'inscription
mardi 4 novembre 2008
Statut
Membre
Dernière intervention
10 avril 2017
1
OK merci.

beegees