Créer et lire un fichier texte en Local Forage

Partagez votre expérience de SpiderBasic avec les autres utilisateurs.
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Créer et lire un fichier texte en Local Forage

Message par falsam »

Créer et lire un fichier texte en Local Forage

Introduction.
Local Forage (Ce n'est une erreur d'orthographe) est une bibliothèque JavaScript créée par la fondation Mozilla améliorant le processus de stockage hors ligne de données dans des applications web.

Nous verrons dans un premier temps comme créer un simple fichier texte en Local Forage et dans un deuxième temps, comment créer et lire un fichier JSON (C'est aussi un fichier texte) en Local Forage.

Objectif.
Créer un fichier de 10 lignes en Local Forage

- Pour créer un fichier nous allons utiliser la fonction CreateFile() que vous connaissez bien sauf que contrairement à PureBasic, cette fonction fait appel à une procédure (CallBack) pour connaitre l'état d'avancement de cette création.
Result = CreateFile(#File, Filename$, Callback [, Flags])
Tout comme avec le langage PureBasic, le paramètre Flags permet de spécifier si le fichier est Ascii, UTF-8 ou Unicode. SpiderBasic permet d'ajouter la constante #PB_LocalStorage pour écrire ce fichier en LocalStorage et plus précisément en LocalForage.


- Pour la création des lignes nous utiliserons classiquement la fonction WriteStringN()

- Important : C'est la fonction CloseFile() déclenchera le callback de création du fichier.

Code.

Code : Tout sélectionner

EnableExplicit 

Enumeration 
  #File
EndEnumeration

;Plan de l'application
Declare Start()
Declare onSaveFile(Status, Filename$, File, SizeRead)

Start()

; Création d'un fichier texte 
Procedure Start()
  Protected i
  
  Debug "Création d'un fichier ...."
  
  CreateFile(#File, "MyFile.txt", @onSaveFile(), #PB_LocalStorage | #PB_UTF8) 
  
  For i=0 To 9
    WriteStringN(#File, "Line "+ Str(i))  
  Next
  
  ;Si le fichier n'est pas fermé alors pas de sauvegarde
  CloseFile(#File)
EndProcedure

; Callback permettant de savoir si la sauvegarde est bien effectuée
Procedure onSaveFile(Status, Filename.s, File, SizeRead)  
  Select Status
    Case #PB_Status_Saved
      Debug "Fichier " + Filename.s + "(" + SizeRead + " bytes) sauvegardé" 
      
    Case #PB_Status_Error
      Debug "Impossible de sauvegarder le fichier " + Filename
  EndSelect
EndProcedure
Le fichier MyFile.txt que vous venez de créer sera stocké sous le nom de sbfs_MyFile.txt dans le Local Forage de votre navigateur comme le montre cette capture de la console Chrome.


Image
Dernière modification par falsam le mar. 14/août/2018 0:12, modifié 3 fois.
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Lire un fichier texte en Local Storage

Message par falsam »

Lire un fichier texte en Local Storage

Votre fichier étant crée, nous allons voir comment le relire par la suite.

Objectif.
Lire un fichier en Local Storage

- Pour lire un fichier nous allons utiliser la fonction onReadFile que vous connaissez bien sauf que contrairement à PureBasic, cette fonction fait appel à une procédure (CallBack) pour connaitre l'état d'avancement de cette lecture.
ReadFile(#File, Filename$, Callback [, Flags])
Tout comme avec le langage PureBasic, le paramètre Flags permet de spécifier si le fichier est Ascii, UTF-8 ou Unicode. SpiderBasic permet d'ajouter la constante #PB_LocalStorage pour lire ce fichier en LocalStorage et plus précisément en LocalForage.

- Pour la lecture ligne à ligne, nous utiliserons classiquement la fonction ReadString() associée à Eof() afin de connaitre quand on arrive en fin de lecture.

Code.

Code : Tout sélectionner

EnableExplicit

Enumeration 
  #File
EndEnumeration

;Plan de l'application
Declare Start()
Declare onReadFile(Status, Filename.s, File, SizeRead)

Start()

Procedure Start()
  ReadFile(#File, "MyFile.txt", @onReadFile(), #PB_LocalStorage | #PB_UTF8)  
EndProcedure

Procedure onReadFile(Status, Filename.s, File, SizeRead)  
  Select Status
    Case #PB_Status_Loaded      
      ; Lecture du fichier ligne par ligne 
      While Eof(#File) = 0  
        Debug ReadString(#File)            
      Wend
      
      ;Et on oublie pas de le fermer
      CloseFile(#File)
      
    Case #PB_Status_Error
      Debug "Le fichier " + FileName + " n'existe pas"
  EndSelect
EndProcedure
Dernière modification par falsam le mar. 14/août/2018 0:08, modifié 2 fois.
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Créer un fichier texte en Local Forage

Message par falsam »

En Local Storage vous pouvez donc stocker tout types de fichiers textes : JSON, SQlite, ....

Attention : le nom du fichier est sensible à la casse (minuscule ou majuscule). myFile.txt et MyFile.txt seront deux fichiers différents.
Dernière modification par falsam le mar. 14/août/2018 0:09, modifié 1 fois.
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Créer un fichier texte en Local Forage

Message par falsam »

Regardons maintenant comment créer et sauvegarder un fichier JSON à partir d'une liste chaînée de contacts.

Création du fichier JSON.

Code : Tout sélectionner

EnableExplicit 

Enumeration 
  #File
  #JSON
EndEnumeration

Structure Address 
  Actif.b
  Name.s
  County.i
EndStructure

Global NewList Contacts.Address()

;Plan de l'application
Declare Start()
Declare onSaveFile(Status, Filename$, File, SizeRead)

Start()

; Création d'un fichier texte 
Procedure Start()
  Protected i
  
  Debug "Création d'un fichier ...."
  
  ;Création d'une structure JSON (Nouvelle fonction)
  CreateJSON(#JSON)
  
  ;Trés classique : Ajoutons deux élémement à la liste chainée
  AddElement(Contacts())
  With Contacts()
    \Actif = #True
    \Name = "Wagner"
    \County = 75
  EndWith
  
  AddElement(Contacts())
  With Contacts()
    \Actif = #True
    \Name = "Hilton"
    \County = 92
  EndWith
  
  ;Insertion de la liste chainée dans la chaine JSON (Nouvelle fonction)
  InsertJSONList(JSONValue(#JSON), Contacts())
  
  CreateFile(#File, "contacts.json", @onSaveFile(), #PB_LocalStorage | #PB_UTF8) 
  WriteStringN(#File, ComposeJSON(#JSON))  
  
  ;Si le fichier n'est pas fermé alors pas de sauvegarde
  CloseFile(#File)
EndProcedure

; Callback permettant de savoir si la sauvegarde est bien effectuée
Procedure onSaveFile(Status, Filename.s, File, SizeRead)  
  Select Status
    Case #PB_Status_Saved
      Debug "Fichier " + Filename.s + "(" + SizeRead + " bytes) sauvegardé" 
      
    Case #PB_Status_Error
      Debug "Impossible de sauvegarder le fichier " + Filename
  EndSelect
EndProcedure
Rien de sorcier, je n'ai fait que reprendre le processus de création d'un fichier texte.
Dernière modification par falsam le mar. 14/août/2018 0:09, modifié 1 fois.
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Lire un fichier texte en Local Forage

Message par falsam »

Le fichier JSON est crée il est temps de le lire et de le réinjecter dans la liste chaînée des contacts.

Code : Tout sélectionner

EnableExplicit

Enumeration 
  #File
  #JSON
EndEnumeration

Structure Address 
  Actif.b
  Name.s
  County.i
EndStructure

Global NewList Contacts.Address()

;Plan de l'application
Declare Start()
Declare onReadFile(Status, Filename.s, File, SizeRead)

Start()

Procedure Start()
  ReadFile(#File, "contacts.json", @onReadFile(), #PB_LocalStorage | #PB_UTF8)  
EndProcedure

Procedure onReadFile(Status, Filename.s, File, SizeRead)
  Protected Buffer.s
  
  Select Status
    Case #PB_Status_Loaded      
      ; Lecture du fichier ligne par ligne 
      Buffer =  ReadString(#File)
      CloseFile(#File)
      
      ;Parcourrir (parse) les données JSON à partir d'une chaîne de caractères. 
      ParseJSON(#JSON, Buffer)
      
      ; Extraction de la chaine JSOn vers la liste chainée Contacts 
      ExtractJSONList(JSONValue(#JSON), Contacts())
      
      ;Verifions que les données sont bien dans la liste chainee Contacts()
      ForEach Contacts()
        With Contacts()
          Debug Str(\County) + " : " + \Name  
        EndWith
      Next
                          
    Case #PB_Status_Error
      Debug "Le fichier " + FileName + " n'existe pas"
  EndSelect
EndProcedure
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Répondre