Page 1 sur 1

Tableur

Publié : dim. 23/févr./2025 10:16
par Micoute
Bonjour à tous,

je voulais apprendre à sauvegarder autrement qu'en JSON, alors j'ai eu l'idée de créer un petit tableur tout simple et de sauvegarder les donnes dans un fichier "Tableur.csv".

Code : Tout sélectionner

; Exemple de création d'une interface utilisateur avec une grille et saisie de données

Enumeration fenetres
  #Fenetre
EndEnumeration
Enumeration Gadgets
  #Grille
  #Champ_Nom
  #Champ_Prenom
  #Champ_Age
  #Btn_Charger
  #Btn_Ajouter
  #Btn_Modifier
  #Btn_Supprimer
  #Btn_Sauvegarder
EndEnumeration
Enumeration Fichiers
  #Fichier
EndEnumeration

Global Evenement
Global.s Fichier.s = "Tableur.csv"

Declare Programme_principal()
Declare Charger()
Declare Ajouter()
Declare Modifier()
Declare Supprimer()
Declare Sauvegarder()
Declare RemplirChamps()

Programme_principal()

Procedure Programme_principal()
If OpenWindow(#Fenetre, 100, 100, 540, 380, UCase("Tableur avec interface par Micoute"), #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  ; Création de la grille
  ListIconGadget(#Grille, 10, 10, 410, 270, "Nom", 150)
  AddGadgetColumn(#Grille, 1, "Prénom", 150)
  AddGadgetColumn(#Grille, 2, "Âge", 100)
  
  ; Création des champs de saisie
  TextGadget(#PB_Any, 10, 290, 100, 20, "Nom :")
  StringGadget(#Champ_Nom, 120, 290, 150, 20, "")
  
  TextGadget(#PB_Any, 10, 320, 100, 20, "Prénom :")
  StringGadget(#Champ_Prenom, 120, 320, 150, 20, "")
  
  TextGadget(#PB_Any, 10, 350, 100, 20, "Âge :")
  StringGadget(#Champ_Age, 120, 350, 150, 20, "")
  
  ; Création des boutons
  ButtonGadget(#Btn_Charger, 430, 10, 100, 30, "Charger")
  ButtonGadget(#Btn_Ajouter, 430, 70, 100, 30, "Ajouter")
  ButtonGadget(#Btn_Modifier, 430, 130, 100, 30, "Modifier")
  ButtonGadget(#Btn_Supprimer, 430, 190, 100, 30, "Supprimer")
  ButtonGadget(#Btn_Sauvegarder, 430, 250, 100, 30, "Sauvegarder")
  
  
  Repeat
    Evenement = WaitWindowEvent()
    
    Select Evenement
      Case #PB_Event_Gadget
        Select EventGadget()
          Case #Btn_Charger
            Charger()
            
          Case #Btn_Ajouter
            Ajouter()
            
          Case #Btn_Modifier
            Modifier()
            
          Case #Btn_Supprimer
            Supprimer()
            
          Case #Grille
            RemplirChamps()
            
          Case #Btn_Sauvegarder
            Sauvegarder()
        EndSelect
      Case #PB_Event_CloseWindow
        Select EventWindow()
          Case #Fenetre
            CloseWindow(#Fenetre)
            End
        EndSelect
    EndSelect
  Until Event = #PB_Event_CloseWindow
EndIf
EndProcedure

Procedure Charger()
  If ReadFile(#Fichier, Fichier)
    ClearGadgetItems(#Grille)  ; Efface les anciennes données de la grille
    While Eof(#Fichier) = 0
      Ligne$ = ReadString(#Fichier)
      If Ligne$ <> "" And FindString(Ligne$, "Nom,Prénom,Âge") = 0  ; Ignore la ligne des en-têtes
        Elements$ = StringField(Ligne$, 1, ",") + #LF$ + StringField(Ligne$, 2, ",") + #LF$ + StringField(Ligne$, 3, ",")
        AddGadgetItem(#Grille, -1, Elements$)
      EndIf
    Wend
    CloseFile(#Fichier)
  Else
    MessageRequester("Information", "Impossible d'ouvrir le fichier !")
  EndIf
EndProcedure

  Procedure Ajouter()
    Nom$ = GetGadgetText(#Champ_Nom)
    Prenom$ = GetGadgetText(#Champ_Prenom)
    Age$ = GetGadgetText(#Champ_Age)
    AddGadgetItem(#Grille, -1, Nom$ + #LF$ + Prenom$ + #LF$ + Age$)
    SetGadgetText(#Champ_Nom, "")
    SetGadgetText(#Champ_Prenom, "")
    SetGadgetText(#Champ_Age, "")
  EndProcedure
  
  Procedure Modifier()
    LigneChoisie = GetGadgetState(#Grille)
    If LigneChoisie <> -1
      SetGadgetItemText(#Grille, LigneChoisie, GetGadgetText(#Champ_Nom), 0)
      SetGadgetItemText(#Grille, LigneChoisie, GetGadgetText(#Champ_Prenom), 1)
      SetGadgetItemText(#Grille, LigneChoisie, GetGadgetText(#Champ_Age), 2)
      SetGadgetText(#Champ_Nom, "")
      SetGadgetText(#Champ_Prenom, "")
      SetGadgetText(#Champ_Age, "")
    EndIf
  EndProcedure
  
  Procedure Supprimer()
    RemoveGadgetItem(#Grille, GetGadgetState(#Grille))
  EndProcedure
  
  Procedure RemplirChamps()
  LigneChoisie = GetGadgetState(#Grille)
  If LigneChoisie <> -1
    SetGadgetText(#Champ_Nom, GetGadgetItemText(#Grille, LigneChoisie, 0))
    SetGadgetText(#Champ_Prenom, GetGadgetItemText(#Grille, LigneChoisie, 1))
    SetGadgetText(#Champ_Age, GetGadgetItemText(#Grille, LigneChoisie, 2))
  EndIf
EndProcedure
  
  Procedure Sauvegarder()
    If Fichier
      If CreateFile(#Fichier, Fichier)
        WriteStringN(#Fichier, "Nom,Prénom,Âge")
        For i = 0 To CountGadgetItems(#Grille) - 1
          Ligne$ = GetGadgetItemText(#Grille, i, 0) + "," + GetGadgetItemText(#Grille, i, 1) + "," + GetGadgetItemText(#Grille, i, 2)
          WriteStringN(0, Ligne$)
        Next i
        CloseFile(#Fichier)
        MessageRequester("Info", "Le fichier a été sauvegardé avec succès.")
      Else
        MessageRequester("Erreur", "Impossible de sauvegarder le fichier.")
      EndIf
    EndIf
  EndProcedure

Re: Tableur

Publié : lun. 24/févr./2025 10:20
par Jacobus
Salut Micoute,
sympa ton tableur, simple et efficace.
Juste un truc, tu devrais ajouter le Flag #PB_Ascii lors de la création et la lecture du fichier pour éviter les problèmes d'accents :
...If CreateFile(#Fichier, Fichier,#PB_Ascii)...
...If ReadFile(#Fichier, Fichier,#PB_Ascii)...
Pour ce type de fichier ça va bien.

Re: Tableur

Publié : lun. 24/févr./2025 13:02
par plabouro472
Très bon travail, le code est soigné et bien clair. Il peut facilement être adapté à nos besoins.
Il peut servir de base dans une application sans aucun problème.
Bravo et merci pour le partage.

Re: Tableur

Publié : lun. 24/févr./2025 13:43
par Micoute
Jacobus a écrit : lun. 24/févr./2025 10:20 tu devrais ajouter le Flag #PB_Ascii lors de la création et la lecture du fichier pour éviter les problèmes d'accents :
...If CreateFile(#Fichier, Fichier,#PB_Ascii)...
...If ReadFile(#Fichier, Fichier,#PB_Ascii)...
Pour ce type de fichier ça va bien.
C'est un bon conseil et je vais l'appliquer.

Merci Jacobus.