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 8O (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. :D
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 !! :mrgreen:

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. :cry:
(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. :D
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 :wink:

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. :mrgreen:

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 :D
Effectivement je pense que le débogueur reste activé. :oops:
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.. :roll:
Pourquoi faire simple quand on peu faire compliqué :mrgreen:
encore merçi a tous
Michel