ReadString et le temps [RESOLU]

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
MLD
Messages : 1124
Inscription : jeu. 05/févr./2009 17:58
Localisation : Bretagne

ReadString et le temps [RESOLU]

Message 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
Dernière modification par MLD le mar. 16/févr./2010 15:59, modifié 1 fois.
Avatar de l’utilisateur
Fig
Messages : 1176
Inscription : jeu. 14/oct./2004 19:48

Re: ReadString et le temps

Message par Fig »

salut :)

Fait péter ton code, je suis curieux de voir comment tu fais pour obtenir une vitesse pareille !! :mrgreen:
Il y a deux méthodes pour écrire des programmes sans erreurs. Mais il n’y a que la troisième qui marche.
Version de PB : 6.00LTS - 64 bits
Avatar de l’utilisateur
case
Messages : 1545
Inscription : lun. 10/sept./2007 11:13

Re: ReadString et le temps

Message par case »

oui la il y a sans doute un truc dans ton code qui vas pas ,) fais voir ta boucle de lecture ;)
ImageImage
Avatar de l’utilisateur
MLD
Messages : 1124
Inscription : jeu. 05/févr./2009 17:58
Localisation : Bretagne

Re: ReadString et le temps

Message 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.)
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: ReadString et le temps

Message par Backup »

............
Dernière modification par Backup le sam. 01/oct./2011 12:09, modifié 1 fois.
Avatar de l’utilisateur
MLD
Messages : 1124
Inscription : jeu. 05/févr./2009 17:58
Localisation : Bretagne

Re: ReadString et le temps

Message 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:
Avatar de l’utilisateur
Ar-S
Messages : 9539
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: ReadString et le temps

Message 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:
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
superloupiot
Messages : 41
Inscription : mer. 30/déc./2009 10:11

Re: ReadString et le temps

Message 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.

@+,
PAPIPP
Messages : 534
Inscription : sam. 23/févr./2008 17:58

Re: ReadString et le temps

Message 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+
Il est fort peu probable que les mêmes causes ne produisent pas les mêmes effets.(Einstein)
Et en logique positive cela donne.
Il est très fortement probable que les mêmes causes produisent les mêmes effets.
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Re: ReadString et le temps

Message par djes »

Je pense aussi qu'il a oublié de désactiver le débogueur ;)
Avatar de l’utilisateur
MLD
Messages : 1124
Inscription : jeu. 05/févr./2009 17:58
Localisation : Bretagne

Re: ReadString et le temps

Message 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
Avatar de l’utilisateur
MLD
Messages : 1124
Inscription : jeu. 05/févr./2009 17:58
Localisation : Bretagne

Re: ReadString et le temps [RESOLU]

Message 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
Répondre