Page 1 sur 1
ReadString et le temps [RESOLU]
Publié : ven. 05/févr./2010 18:32
par MLD
Bonsoir a tous
Je veux lire un fichier avec ReadString.
Chaque ligne fait environ 1Ko et il y a 4700 lignes.
Mon temps de lecture #1Heure

(même pour une ligne le temps est horrrrible)
Il ya un truc

Ou est le problème?
D'autre part je voudrait lire une portion de cette ligne sans aller au bout de la ligne. On ce place avec FileSeek(X) ok, mais aprés ?
En écriture en utilisant FlushFileBuffers(x) , FileSeek(X),WriteString, pas de problème.
Mais en lecture je galère
Une petite explication SVP .Merci
Michel
Re: ReadString et le temps
Publié : ven. 05/févr./2010 20:26
par Fig
salut
Fait péter ton code, je suis curieux de voir comment tu fais pour obtenir une vitesse pareille !!

Re: ReadString et le temps
Publié : ven. 05/févr./2010 23:53
par case
oui la il y a sans doute un truc dans ton code qui vas pas ,) fais voir ta boucle de lecture

Re: ReadString et le temps
Publié : sam. 06/févr./2010 10:36
par MLD
bonjour a tous
Merci a Fig et case.
Code : Tout sélectionner
Global Dim lect.s(68)
Procedure.s monnai(Numenr.l,es.b,varenr.b,*var.s)
longlig.l = 826
Posdepling.l = ((Numenr.l * longlig.l)- longlig.l);position de départ des enr
Posnumref.l = Posdepling.l
; Posnation.l = Posnumref.l + 6 ; monn(1)\numref.l ; pour d'autres positions dans la ligne
; Posdat.l = Posnation.l + 20 ;monn(1)\nation.l
; Poscateg.l = Posdat.l + 14 ; monn(1)\dat.l
FileSeek(1,Posnumref.l)
lect.s(1) = ReadString(1)
EndProcedure
ReadFile(1,"monn.dat")
For x.l = 1 To 4743
monnai(X.l,0,0,0)
Debug lect(1)
Next
CloseFile(1)
End
La ligne de données fait 826 octs. elle est composée de 68 paramètres
je souhaite aussi pouvoir allé cherché chaque paramètre sans pour autant lire toute la ligne
avec cet extrait de code temps de lecture du fichier 5mm30 (Processeur athlon core 2 2.62G)
Il s'agit d'une gestion de magasins de numismatique (Monnaies anciennes).
Je ne peu pas pour des questions de confidentialité vous donnez le fichier monn.dat.
Ce logiciel je l'ai programmé il y a quelques années en VB 6. J'utilisais ce que MS appel en VB6 les fichiers a accés direct.
Temps de lecture de ce même fichier inférieur a 1S. Je souhaite remettre au gout du jour ce logiciel en le programmant avec PB, mais problème!
Aprés avoir tout simplifier, il me semble que le problème vienne de ReadString.
Peut-être je me trompe.

(Que je lise la ligne dans un tableau ou dans une variable ne change rien.)
Re: ReadString et le temps
Publié : sam. 06/févr./2010 10:51
par Backup
............
Re: ReadString et le temps
Publié : sam. 06/févr./2010 12:07
par MLD
Salut Dobro
Ok avec toi, je peu mettre le fichier en RAM, si je voulais faire du direct disc, c'est pour ne pas perdre d'informations en cas de panne secteur, comme cela arrive souvent dans certains pays. Mais les onduleurs ne sont pas fait pour les chiens.
Je pense que la façon dont VB gère ce type de fichier me pose problème car en fait , j'ai essayé de faire une translation du fichier VB en fichier texte lisible par PB le problème vient peut-être de la il faut que je regarde de ce coté.
Merci a toi Bonne journée
Pour moi je ne peu pas reprendre le problème avant lundi

Re: ReadString et le temps
Publié : sam. 06/févr./2010 12:18
par Ar-S
Salut MLD, concernant les pannes secteurs, vaut mieux que le courant se coupe quand l'ordi bosse en RAM plutôt que lorsque la tête du disque dur est en cours de lecture/écriture, car ça peu le flinguer ou du moins filnguer des secteurs (une belle erreur de redondance cyclique et tu es bon pour en racheter un).
Et oui, vive les onduleurs.

Re: ReadString et le temps
Publié : dim. 07/févr./2010 19:07
par superloupiot
Bonjour MLD,
La première chose qui m'intrigue dans ton programme, c'est que je ne vois pas de ProcedureReturn en fin de procédure.
Je me demande donc si après le premier readstring, ton programme ne recommence pas la boucle For X en permanence.
Sans compter que ré-ouvrir le fichier sans l'avoir fermé peut avoir un effet imprévu.
Je n'ai pas trop d'idée dans quel ordre le compilateur va placer les instructions.
C'est juste une piste d'investigation.
@+,
Re: ReadString et le temps
Publié : dim. 07/févr./2010 22:45
par PAPIPP
Bonjour à tous
Voici un prog qui traite 4000 enregistrements de 1000 octets en une trentaine de millisecondes
Code : Tout sélectionner
If CreateFile(0,"monn.dat") ; création d'un nouveau fichier texte...
For a=1 To 2000
WriteStringN(0,"Ligne= "+Str(a)+Space(1000)) ; écriture de 2000 lignes (suivies du code 'Fin de Ligne')
Next
For a=1 To 2000
WriteStringN(0,"Chaîne="+Str(a)) ; ajoute 2000 lignes chaînes
Next
CloseFile(0) ; ferme le fichier précédemment ouvert et enregistre les données
Else
MessageRequester("Information","Impossible de créer le fichier!")
EndIf
t0=ElapsedMilliseconds()
nb_car=0
nb_enr=0
ReadFile(1,"monn.dat")
While Eof(1)=0 ; Boucle tant que la fin du fichier n'est pas atteinte. (Eof = 'End Of File')
NB_car+Len( ReadString(1) )
nb_enr+1
Wend
CloseFile(1)
Debug "Temps de lecture =" +Str(ElapsedMilliseconds()-t0)+" ms"
Debug "Nombre d'octets lus="+Str(nb_car)+" Octets"+" Nombre d'enregistrements="+Str(nb_enr)
End
A+
Re: ReadString et le temps
Publié : lun. 08/févr./2010 9:31
par djes
Je pense aussi qu'il a oublié de désactiver le débogueur

Re: ReadString et le temps
Publié : lun. 08/févr./2010 11:49
par MLD
Bonjour
Merci a tous
Effectivement je pense que le débogueur reste activé.
Je vais revoir tout cela.
Pour le moment je suis un peu occupé a d'autres choses
Bonne journée
Michel
Re: ReadString et le temps [RESOLU]
Publié : mar. 16/févr./2010 16:06
par MLD
Bonjour a tous
Je confirme débogeur activé.
D'autre part mon code, est un code un peu C..
Pourquoi faire simple quand on peu faire compliqué
encore merçi a tous
Michel