Slt à tous,
Je stocke un fichier (pour être précis un code assembleur donc avec des retours à la ligne) en mémoire.
Quelqu'un aurait une fonction ou une piste pour lire ligne à ligne ce code mais dans la zone mémoire stockée de manière optimisée ? Je ne sais pas si vous me comprenez.
Ce serait je pense plus rapide que des stringfield sur une chaîne ?
Merci d'avance
ReadMemory et Chaines
- Progi1984
- Messages : 2659
- Inscription : mar. 14/déc./2004 13:56
- Localisation : France > Rennes
- Contact :
ReadMemory et Chaines
Librairies & Applications : https://www.purebasic.fr/french/viewtop ... f=8&t=6220
Site Web : https://rootslabs.net
Site Web : https://rootslabs.net
il y a peeks pour lire une string en mémoire, seul problème il faut que ce soit terminé par un chr(0) or si tu charge un fichier texte il y a des chances pour que la fin de ligne ne soit pas terminée de cette manière
ensuite tu peux faire une boucle qui lis chaque octet et renvoi la chaine lorsqu'elle rencontre un caractère de fin de ligne...
enfin tu peux aussi lire directement le fichier ligne par ligne avec des readstring()
tout depend de ce que tu veux faire
ensuite tu peux faire une boucle qui lis chaque octet et renvoi la chaine lorsqu'elle rencontre un caractère de fin de ligne...
enfin tu peux aussi lire directement le fichier ligne par ligne avec des readstring()
tout depend de ce que tu veux faire
- Progi1984
- Messages : 2659
- Inscription : mar. 14/déc./2004 13:56
- Localisation : France > Rennes
- Contact :
Une fin de ligne se termine en fonction du système par chr(13) ou chr(10) ou chr(13) & chr(10).case a écrit :il y a peeks pour lire une string en mémoire, seul problème il faut que ce soit terminé par un chr(0) or si tu charge un fichier texte il y a des chances pour que la fin de ligne ne soit pas terminée de cette manière
ensuite tu peux faire une boucle qui lis chaque octet et renvoi la chaine lorsqu'elle rencontre un caractère de fin de ligne...
enfin tu peux aussi lire directement le fichier ligne par ligne avec des readstring()
tout depend de ce que tu veux faire
Je cherche la manière la plus optimisée et la plus rapide.
Librairies & Applications : https://www.purebasic.fr/french/viewtop ... f=8&t=6220
Site Web : https://rootslabs.net
Site Web : https://rootslabs.net
Un exemple :Vieux code PB3.94 adapté (rapidement) à PB4.30. A modifier si on veut faire de l'unicode...
Fonctionne avec #Cr$, #Lf$ ou #CrLf$ comme retour à la ligne.
Code : Tout sélectionner
;
; Read Text Lines From Memory Buffer
;
Procedure.s ReadLineInMem(*MemBufferFirstTime = 0, MemBufferLenFirstTime = 0) ; Read line from buffer [returns CHR(1) if end of buffer]
Protected Length, *pt.Byte, *endPt, *strPt.Byte
Static MemFileOffset, *MemBuffer, MemBufferLen
If *MemBufferFirstTime And MemBufferLenFirstTime
*MemBuffer = *MemBufferFirstTime
MemBufferLen = MemBufferLenFirstTime
MemFileOffset = 0
EndIf
If *MemBuffer And MemBufferLen
*pt = *MemBuffer + MemFileOffset
*endPt = *MemBuffer + MemBufferLen
*strPt = *pt
If MemFileOffset < MemBufferLen
While *pt < *endPt
c = *pt\b
*pt = *pt + 1
If c = 13
Break
EndIf
If c = 10
Break
EndIf
Length = Length + 1
Wend
If *pt < *endPt
n = *pt\b
If n + c = 23
*pt = *pt + 1
EndIf
EndIf
MemFileOffset = *pt - *MemBuffer
ProcedureReturn PeekS(*strPt, Length)
Else
ProcedureReturn Chr(1)
EndIf
Else
ProcedureReturn Chr(1)
EndIf
EndProcedure
;
Stream = ReadFile(#PB_Any, #PB_Compiler_Home + "Examples\Sources - Advanced\Waponez II\Waponez II.pb")
If Stream
MemBufferLen = Lof(Stream)
If MemBufferLen
*MemBuffer = AllocateMemory(Lof(Stream))
If *MemBuffer
If ReadData(Stream, *MemBuffer, MemBufferLen) = MemBufferLen
;
; Read lines from *MemBuffer
;
Line.s = ReadLineInMem(*MemBuffer, MemBufferLen)
While Line <> Chr(1)
Debug Line
Line = ReadLineInMem()
Wend
;
;
;
EndIf
FreeMemory(*MemBuffer)
EndIf
EndIf
CloseFile(Stream)
EndIf
Fonctionne avec #Cr$, #Lf$ ou #CrLf$ comme retour à la ligne.
- Progi1984
- Messages : 2659
- Inscription : mar. 14/déc./2004 13:56
- Localisation : France > Rennes
- Contact :
Désolé, j'étais absent ce week-end et .
Je regarde cela ce soir.
Merci gnozal pour le code.
Je regarde cela ce soir.
Merci gnozal pour le code.
Librairies & Applications : https://www.purebasic.fr/french/viewtop ... f=8&t=6220
Site Web : https://rootslabs.net
Site Web : https://rootslabs.net