Lecture de fichiers - comprend pas

cs_deadisdead Messages postés 31 Date d'inscription jeudi 12 février 2004 Statut Membre Dernière intervention 30 septembre 2008 - 5 juil. 2004 à 16:11
cs_Houzefa Messages postés 453 Date d'inscription dimanche 9 février 2003 Statut Membre Dernière intervention 9 juillet 2004 - 5 juil. 2004 à 17:55
Voilà, j'ai un fichier texte qui doit faire dans les 85 Ko et j'aimerais le lire en entier (peut importe comment, c'est pas le problème). Je fais un truc tout con, par exemple :

Dim fsource As Integer
Dim temp As String

fsource = FreeFile
Open CStr(txtSource) For Input As #fsource

temp = Input(10000, fsource)

Et la, il me dit que "L'entrée dépasse la fin du fichier" (???). Ca fait un moment que je me prends la tete pour comprendre, mais je vois vraiment pas car je normalement loin de l'EOF... Et si je mets un compteur et que je lis les caractères un à un, il s'arrête vers les 6500.

Y'a des jours comme ça, ou c'est pas facile :(

10 réponses

cs_ITALIA Messages postés 2169 Date d'inscription vendredi 20 avril 2001 Statut Membre Dernière intervention 30 juin 2009 9
5 juil. 2004 à 16:20
Open CheminFichier For Input As #1
Do Until EOF(1)
Line Input #1, ligne

'Traitement

Loop
Close #1

It@li@
0
cs_deadisdead Messages postés 31 Date d'inscription jeudi 12 février 2004 Statut Membre Dernière intervention 30 septembre 2008
5 juil. 2004 à 16:30
J'ai essayé ta méthode Italia, mais ça ne marche toujours pas. Il ne va pas jusqu'à la fin REELLE du fichier. Il s'arrête en cours de route, je ne sais pourquoi... et c'est ça que j'arrive pas à comprendre.
0
Mooiz Messages postés 128 Date d'inscription mercredi 25 juin 2003 Statut Membre Dernière intervention 8 juillet 2005
5 juil. 2004 à 16:47
Qu'est ce qu'il y a dans ton fichier ? c'est du texte écrit à la main ou entré à partir d'un bout de code ? dans ce cas, le dernier caractère lu serait pas un caractère de fin de fichier ? ca expliquerait le problème
sinon je vois pas
0
cs_ITALIA Messages postés 2169 Date d'inscription vendredi 20 avril 2001 Statut Membre Dernière intervention 30 juin 2009 9
5 juil. 2004 à 16:51
au pire tu le Load dans un textBox avant de le Parcourir ...
et tu parcour plutot toute les lignes de ta text Box !!

t'as pas un probléme de declaration de variables...

car j'en parcour des beaucoup plus gros de cette Maniére !

It@li@
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Houzefa Messages postés 453 Date d'inscription dimanche 9 février 2003 Statut Membre Dernière intervention 9 juillet 2004 2
5 juil. 2004 à 16:57
tu sais, ya des trucs qui peuvent arriver parfois et qui nous dépassent... jsui justement en train de participer à la réalisation d'un site sur la magie, etc. alors jcommence à etre habitué...

que penses-tu de l'utilisation des API de Windows ?
Const GENERIC_READ = &H80000000
Const FILE_SHARE_READ = &H1
Const OPEN_EXISTING = 3
Private Declare Function CreateFile Lib "kernel32" Alias "CreateFileA" (ByVal lpFileName As String, ByVal dwDesiredAccess As Long, ByVal dwShareMode As Long, ByVal lpSecurityAttributes As Any, ByVal dwCreationDisposition As Long, ByVal dwFlagsAndAttributes As Long, ByVal hTemplateFile As Long) As Long
Private Declare Function GetFileSize Lib "kernel32" (ByVal hFile As Long, lpFileSizeHigh As Long) As Long
Private Declare Function ReadFile Lib "kernel32" (ByVal hFile As Long, lpBuffer As Any, ByVal nNumberOfBytesToRead As Long, lpNumberOfBytesRead As Long, ByVal lpOverlapped As Any) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private Sub Form_Load()
Dim Ouverture As Long
Dim Taille As Long
Dim Buffer() As Byte
Dim Retour As Long
Ouverture = CreateFile("C:\test.txt", GENERIC_READ, FILE_SHARE_READ, ByVal 0, OPEN_EXISTING, 0, 0)
Taille = GetFileSize(Ouverture, 0)
ReDim Buffer(1 To Taille - Int(Taille / 2)) As Byte
ReadFile Ouverture, Buffer(1), UBound(Buffer), Retour, ByVal 0
If Retour <> UBound(Buffer) Then MsgBox "Erreur", vbCritical
CloseHandle Ouverture
End Sub


Houzéf@ - www.123toto.com
0
cs_rene38 Messages postés 1858 Date d'inscription samedi 29 juin 2002 Statut Membre Dernière intervention 17 octobre 2013 11
5 juil. 2004 à 17:18
Bonjour
Et pourquoi pas lire tout le fichier :
temp = Input(LOF(fsource), fsource) ?
0
cs_Houzefa Messages postés 453 Date d'inscription dimanche 9 février 2003 Statut Membre Dernière intervention 9 juillet 2004 2
5 juil. 2004 à 17:23
parce que il est un peu trop grand et qu'il faut donc utiliser un buffer...

Houzéf@ - www.123toto.com
0
cs_rene38 Messages postés 1858 Date d'inscription samedi 29 juin 2002 Statut Membre Dernière intervention 17 octobre 2013 11
5 juil. 2004 à 17:44
Dim temp As String, fsource As Integer
fsource = FreeFile
Open "C:\Chemin\NomFichier" For Input As #fsource
MsgBox LOF(fsource) ' Réponse : 105320 > 102 ko
temp = Input(LOF(fsource), fsource)
Close 1
Debug.Print Mid$(temp, 105250)
' il écrit sans problème les 71 derniers caractères
0
cs_rene38 Messages postés 1858 Date d'inscription samedi 29 juin 2002 Statut Membre Dernière intervention 17 octobre 2013 11
5 juil. 2004 à 17:50
si on veut absolument avoir un tampon, entre

Open "C:\Chemin\NomFichier" For Input As #fsource

et

temp = Input(LOF(fsource), fsource)

ajouter :

temp = Space$(LOF(fsource))
0
cs_Houzefa Messages postés 453 Date d'inscription dimanche 9 février 2003 Statut Membre Dernière intervention 9 juillet 2004 2
5 juil. 2004 à 17:55
voilà... c'est de ca que je voulais parler avec le "buffer".
mais je viens de me rendre compte que le fichier n'est que de 85 Ko (1er message de ce sujet), donc il n'est pas trop grand. le problème doit se situer au niveau du fichier lui-meme.

Houzéf@ - www.123toto.com
0
Rejoignez-nous