OVH Cloud OVH Cloud

recup data

5 réponses
Avatar
fred
salut,

voila j'ai creer un btn qui quand je click dessus affiche
dans une message box les donnees presente dans un fichier
batch :

mon code:

Private Sub Command1_Click()
Dim ligne As String
Open "c:\xx.bat" For Input As #1
Input #1, ligne
While Input #1, ligne
MsgBox ("vos choix sont : " & ligne)
Close #1
Wend
End Sub


ca marche , je lis les differentes lignes jusqu'au bout,
mais lorsque je reviens plus tard cliquer sur son bouton
j'ai un message qui dit fichier deja ouvert.

ma methode n'est peut etre pas bonne ?!!!
merci d'une aide, conseil,
fred

5 réponses

Avatar
Nicolas Geniteau
Je pense que ce code devrait rectifier l'erreu
Private Sub Command1_Click(
Dim Fichier, buffer As Strin
Fichier = "c:xx.bat
Open Fichier For Input As #
Do Until EOF(1
Input #1, buffe
MsgBox ("Vos choix sont : " & buffer
Loo
Close #
End Sub
Avatar
Zoury
Salut Fred!

Tu souhaites lire le fichier ligne par ligne ou tout d'un coup? Car il me
semblerait agressant pour l'utilisateur de lui balancer chaque ligne une
après l'autre à l'aide d'un message box.. :O)

observons un peu ton code..

Open "c:xx.bat" For Input As #1


ici tu ouvres ton fichier.

Je te conseilles vivement d'utiliser la function FreeFile afin d'obtenir
le prochain numéro de fichier disponible.. cela te permettra de rendre ton
code plus portable en plus de d'éviter des erreurs comme tu obtiens
présentement. C'est particulièrement
important dans les projets où plusieurs accès à des fichiers sont possibles.



Input #1, ligne


ici tu lis une ligne..

While Input #1, ligne


cette ligne ne compile pas.. :OP
mais si elle compilait, tu relirais une ligne.. donc tu aurais pu supprimer
la ligne qui précéde ;O)


MsgBox ("vos choix sont : " & ligne)


ici tu devrais enlèver les parenthèses OU ajouter le mot clé "Call" devant
l'appelle.. voir la discussion suivante pour plus de détail..
http://groups.google.com/groups?threadm=u9D%24ncOMDHA.1612%40TK2MSFTNGP11.phx.gbl


Close #1


ici tu fermes le fichier..

Wend


et là recommence ta boucle. tu ne peux donc pas relire dans le fichier car
ce dernier est fermé.


ca marche , je lis les differentes lignes jusqu'au bout,


si ton code marche, c'est que tu ne nous a pas posté ton code tel quel mais
plutôt que tu l'as récrit dans le mail..


Voici donc un exemple démontrant les 2 méthodes :
'***
Option Explicit

Private Sub Command1_Click()

' lecture ligne par ligne
Call ReadFileLineByLine("c:test.txt")

' lecture complète
Call ReadFile("c:test.txt")

End Sub

Private Sub ReadFileLineByLine(ByRef sFile As String)

Dim hFile As Long
Dim sLigne As String

If (Not FileExists(sFile)) Then Exit Sub

hFile = FreeFile
Open sFile For Input As #hFile
Do Until EOF(hFile)
Line Input #hFile, sLigne
Call MsgBox(sLigne)
Loop
Close #hFile

End Sub

Private Sub ReadFile(ByRef sFile As String)

Dim hFile As Long
Dim sTexte As String

If (Not FileExists(sFile)) Then Exit Sub

hFile = FreeFile
Open sFile For Binary As #hFile
sTexte = Space$(LOF(hFile))
Get #hFile, , sTexte
Call MsgBox(sTexte)
Close #hFile

End Sub

Private Function FileExists(ByRef sFile As String) As Boolean
On Error Resume Next
FileExists = (GetAttr(sFile) And vbDirectory) = 0
End Function
'***


--
Cordialement
Yanick Lefebvre - MVP pour Visual Basic
http://faq.vb.free.fr/?rubrique=0 - http://www.mvps.org/vbnet/
http://www.mentalis.org/agnet/apiguide.shtml - http://www.mztools.com/
Avatar
Jean-Marc
"Nicolas Geniteau" (pas ca)> a écrit dans le message
de news:
Je pense que ce code devrait rectifier l'erreur
Private Sub Command1_Click()
Dim Fichier, buffer As String
Fichier = "c:xx.bat"
Open Fichier For Input As #1
Do Until EOF(1)
Input #1, buffer
MsgBox ("Vos choix sont : " & buffer)
Loop
Close #1
End Sub



Hello,
la bonne façon est:
--------------------------------
Private Sub Command1_Click()
Dim Fichier as String
Dim Buffer As String
Dim Ligne as String
Dim fh as Integer

Fichier = "c:xx.bat"
fh = Freefile
Open Fichier For Input As #fh
While Not(Eof(fh))
Line Input #fh, Ligne
Buffer = Buffer & Ligne & vbCrLf
Wend
Close #fh
MsgBox ("Vos choix sont : " & vbCrLf & Buffer)
End Sub
---------------------------------------------
Avatar
Zoury
Salut Jean-Marc! :O)


Line Input #fh, Ligne
Buffer = Buffer & Ligne & vbCrLf


<snip>
MsgBox ("Vos choix sont : " & vbCrLf & Buffer)



tu te retrouves avec les contenus entier du fichier... seulement la méthode
employé pour y parvenir est très, très lente. La concaténation en VB n'est
pas des plus rapides et lorsque l'on concatène une chaine avec elle même
pour y ajouter du texte, la vitesse d'exécution décroit proportionnellement
avec le nombre d'appelle.. jètes une oeil sur la fonction ReadFile() posté
dans mon message pour une des techniques les plus rapides de lecture
complète de fichier.


--
Cordialement
Yanick Lefebvre - MVP pour Visual Basic
http://faq.vb.free.fr/?rubrique=0 - http://www.mvps.org/vbnet/
http://www.mentalis.org/agnet/apiguide.shtml - http://www.mztools.com/
Avatar
ng
Salut,

Je te conseille plutot un code de ce genre (qui est bien plus rapide) :

Dim k As Integer, strBuffer As String, tblLignes() As String
k = FreeFile
Open "c:xx.bat" For Binary As #k
strBuffer = String$(LOF(k), vbNullChar)
Get #k, , strBuffer
Close #k
tblLignes = Split(strBuffer, vbCrLf): strBuffer = ""
For k = 0 To UBound(tblLignes)
MsgBox "Vos choix sont : " & tblLignes(k)
Next k

--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/
http://apisvb.europe.webmatrixhosting.net/

fred a écrit :

salut,

voila j'ai creer un btn qui quand je click dessus affiche
dans une message box les donnees presente dans un fichier
batch :

mon code:

Private Sub Command1_Click()
Dim ligne As String
Open "c:xx.bat" For Input As #1
Input #1, ligne
While Input #1, ligne
MsgBox ("vos choix sont : " & ligne)
Close #1
Wend
End Sub


ca marche , je lis les differentes lignes jusqu'au bout,
mais lorsque je reviens plus tard cliquer sur son bouton
j'ai un message qui dit fichier deja ouvert.

ma methode n'est peut etre pas bonne ?!!!
merci d'une aide, conseil,
fred