Page 1 sur 1

Problème de lecture d'un fichier texte mis en mémoire (Lire et afficher un fichier le plus vite possible)

Publié : sam. 25/mars/2023 18:28
par Shadow
Salut,

J'ai tenté de reprendre un vieux code pour lire un fichier texte puis de le mettre en mémoire affin de l'afficher ou l'utiliser plus tard, mais je n'y suis pas arrivé :roll:

C'est vraie que ce passage de purebasic en Unicode à mis pas mal de chose en Bazard.
Je suis même pas capable de faire ça, ça crain :roll:

Code : Tout sélectionner

; Lire un fichier a la vitesse de l'éclair
; Par M Dieppedalle David le dimanche 3 octobre 2010

file$ = OpenFileRequester("Sélectionnez un fichier","","Text (.txt)|*.txt|All files (*.*)|*.*",0)
  If file$
    If ReadFile(0, file$)
      length = Lof(0) ; Lit la taille en octets du fichier
      *MemoryID = AllocateMemory(length) ; alloue un bloc mémoire de la taille du fichier "length"
      If *MemoryID ; si l'allacation a bien fonctionner ont continue
        ReadData(0, *MemoryID, length)   ; Lit les données du fichier et les place dans le bloc mémoire "*MemoryID" de la taille correspondant à "length"
        *Fichier.String = @*MemoryID ; "*Fichier" a pour valeur l'adresse où réside la chaîne de caractères en mémoire "*MemoryID"
        Fichier$ = *Fichier\s ; "Fichier$" à pour valeur le texte où réside la chaîne de caractères en mémoire "*MemoryID"
        Debug Fichier$
      EndIf
      CloseFile(0)
    EndIf
  EndIf

Re: Problème de lecture d'un fichier texte mis en mémoire (Lire et afficher un fichier le plus vite possible)

Publié : sam. 25/mars/2023 23:01
par Shadow
Bon, j'ai trouvé grâce à un sujet sur le forum et j'ai donc modifié le code précédent:

Code : Tout sélectionner

Fichier$ = OpenFileRequester("Sélectionnez un fichier","","Text (.txt)|*.txt|All files (*.*)|*.*",0)

; Si il y a un fichier à lire.
If Fichier$
  
  ; Si le fichier peut être lue.
  If ReadFile(0, Fichier$) 
    
    Length.i = Lof(0) ; Lit la taille en octets du fichier 
    *MemoryID = AllocateMemory(Length.i) ; Alloue un bloc mémoire de la taille du fichier "Length.i"
    
    If *MemoryID ; Si l'allocation a bien fonctionner ont continue.
      ReadData(0, *MemoryID, Length.i)   ; Lit les données du fichier et les place dans le bloc mémoire "*MemoryID" de la taille correspondant à "Length.i".
      Donnees$ = PeekS(*MemoryID, Length.i, #PB_UTF8) ; Lis la chaîne de caractère en mémoire au format Ascii, vous pouvez utiliser: #PB_UTF8 | #PB_ByteLength, à la place de #PB_Ascii pour afficher correctement les caractère accentué et spéciaux.
      Debug Donnees$ ; Affiche les données.
    EndIf
    
    CloseFile(0) ; Ferme le fichier.
    
  EndIf
  
EndIf