FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  RechercherRechercher  Dernières imagesDernières images  S'enregistrerS'enregistrer  MembresMembres  Connexion  
Derniers sujets
» Logiciel de planétarium.
Visualisation des fichiers CSV Emptypar Jack Aujourd'hui à 9:03

» Un autre pense-bête...
Visualisation des fichiers CSV Emptypar Froggy One Jeu 21 Nov 2024 - 14:54

» Récupération du contenu d'une page html.
Visualisation des fichiers CSV Emptypar Pedro Sam 16 Nov 2024 - 13:04

» Décompilation
Visualisation des fichiers CSV Emptypar JL35 Mar 12 Nov 2024 - 18:57

» Un album photos comme du temps des grands-mères
Visualisation des fichiers CSV Emptypar jjn4 Mar 12 Nov 2024 - 16:23

» traitement d'une feuille excel
Visualisation des fichiers CSV Emptypar jjn4 Jeu 7 Nov 2024 - 2:52

» Aide-mémoire mensuel
Visualisation des fichiers CSV Emptypar jjn4 Lun 4 Nov 2024 - 17:56

» Des incomprèhension avec Timer
Visualisation des fichiers CSV Emptypar Klaus Mer 30 Oct 2024 - 17:26

» KGF_dll - nouvelles versions
Visualisation des fichiers CSV Emptypar Klaus Mar 29 Oct 2024 - 16:58

» instructions panoramic
Visualisation des fichiers CSV Emptypar maelilou Lun 28 Oct 2024 - 18:51

» Figures fractales
Visualisation des fichiers CSV Emptypar Marc Ven 25 Oct 2024 - 10:18

» Panoramic et Scanette
Visualisation des fichiers CSV Emptypar Yannick Mer 25 Sep 2024 - 20:16

» Editeur d étiquette avec QR évolutif
Visualisation des fichiers CSV Emptypar JL35 Lun 23 Sep 2024 - 20:40

» BUG QR Code DelphiZXingQRCode
Visualisation des fichiers CSV Emptypar Yannick Dim 22 Sep 2024 - 9:40

» fichier.exe
Visualisation des fichiers CSV Emptypar leclode Ven 20 Sep 2024 - 17:02

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Novembre 2024
LunMarMerJeuVenSamDim
    123
45678910
11121314151617
18192021222324
252627282930 
CalendrierCalendrier
Le Deal du moment :
SSD interne Crucial BX500 2,5″ SATA – 500 ...
Voir le deal
29.99 €

 

 Visualisation des fichiers CSV

Aller en bas 
2 participants
AuteurMessage
Marc

Marc


Nombre de messages : 2466
Age : 63
Localisation : TOURS (37)
Date d'inscription : 17/03/2014

Visualisation des fichiers CSV Empty
MessageSujet: Visualisation des fichiers CSV   Visualisation des fichiers CSV EmptyVen 1 Sep 2023 - 9:49

! ! INFORMATION ! !

Retrouvez la version finale de ce projet ici :

https://panoramic.1fr1.net/t6903-visualisation-des-fichiers-csv#82418




Bonjour à tous !

Je vous partage un petit programme tout simple de visualisation de fichier CSV.

Visualisation des fichiers CSV Fichie10

Code:
' Fichiers CSV
' Marc - Août 2023
' Ecrit en langage PANORAMIC 0.9.29.i9

dim nomFichierEntrant$, cheminAccesFichierEntrant$, tailleFichierEntrant%
dim nomColonne$(50), separateur$, nombreColonnes%, nombreLignes%

label redim0, ouvrirFichier, choixSeparateur

interfaceUtilisateur()

end
' ------------------------------------------------------------------------------
ouvrirFichier:
    nomFichierEntrant$ = file_name$(100)

    if nomFichierEntrant$ = "_"
        return
    end_if

    chargerFichier()
return
' ------------------------------------------------------------------------------
sub chargerFichier()
    dim_local separateur%(50), enregistrement$, caractere$
    dim_local index%, n%, null%
    
    ' Bloquer toute action sur la fenêtre principale
    inactive 0

    ' Effacer le contenu de l'obet LIST réservé à l'affichage des noms de colonnes
    clear 25
    
    ' Effacer le contenu de l'objet DLIST de stockage du ficher CSV
    clear 102
    
    ' Effacer le contenu du tableau de variables des noms de colonnes
    for n% = 1 to 50
        nomColonne$(n%) = ""
    next n%

    ' Effacer le contenu du GRID
    grid_clear 31,grid_row(31),grid_column(31)
    
    ' Formater le GRID par défaut
    grid_column 31,15
    grid_row 31,15
    grid_column_width 31,64

    ' Afficher le nom du fichier entrant
    caption 15,file_extract_name$(nomFichierEntrant$)
    
    ' Afficher chemin d'accès au fichier entrant
    caption 16,file_extract_path$(nomFichierEntrant$)
    
    ' Afficher la taille du fichier entrant CSV
    filebin_open_read 1,nomfichierEntrant$
    tailleFichierEntrant% = filebin_size(1)
    filebin_close 1
    if tailleFichierEntrant% > 1
        caption 19,formater$(tailleFichierEntrant%) + " octets"
    else
        caption 19,"0 octet"
    end_if    

    ' Sortir du sous-programme si le fichier est vide
    if tailleFichierEntrant% < 1
        caption 18,"0"
        caption 17,"0"
        active 0
        exit_sub
    end_if
    
    ' Charger le fichier CSV dans le DLIST 102
    file_load 102,nomFichierEntrant$

    ' Afficher le nombre d'enregistrements
    nombreLignes% = count(102) - 1
    caption 18,formater$(nombreLignes%)
    
    ' Choix du type de séparateur de colonne
    if text$(3) = " Virgule"
        separateur$ = chr$(44)
    else
        if text$(3) = " Point-virgule"
            separateur$ = chr$(59)
        else
            if text$(3) = " Tabulation"
                separateur$ = chr$(9)
            else
                if text$(3) = " Espace"
                    separateur$ = chr$(32)
                end_if
            end_if
        end_if                    
    end_if
    
    ' Lire la première ligne du fichier entrant CSV
    enregistrement$ = item_read$(102,1)

    ' Extraire et afficher les noms de colonnes du fichier entrant CSV
    index% = 1
    n% = 1
    while index% <= len(enregistrement$)
        caractere$ = mid$(enregistrement$,index%,1)
        if caractere$ = separateur$
            item_add 25,"Colonne " + str$(n%) + " : " + nomColonne$(n%)    
            n% = n% + 1
            if n% > 50
                null% = message_warning_ok("Ce fichier comporte plus de 50 colonnes." + chr$(13) + "Seules les 50 premières seront affichées !")
                exit_while
            end_if
        else    
            nomColonne$(n%) = nomColonne$(n%) + caractere$
        end_if
        index% = index% + 1
    end_while
    item_add 25,"Colonne " + str$(n%) + " : " + nomColonne$(n%)    

    ' afficher le nombre de colonnes du fichier
    nombreColonnes% = n%
    caption 17,str$(nombreColonnes%)

    remplirTableau()
    
    ' débloquer les actions sur la fenêtre principale
    active 0
    
    ' Donner le focus au GRID
    set_focus 31
end_sub
' ------------------------------------------------------------------------------
sub remplirTableau()
    dim_local ligne%, colonne%, enregistrement$, champ$, index%
    dim_local debutChamp%, finChamp%, null%

    ' Afficher la fenêtre d'attente
    show 200

    ' Ajuster le nombre de colonnes
    grid_column 31,nombreColonnes%

    ' Ajuster largeur des colonnes
    if nombreColonnes% < 16
        grid_column_width 31,(width(31)-25) / nombreColonnes%  
    else
        grid_column_width 31,64
    end_if
    
    ' Ajuster le nombre de lignes
    if nombreLignes% = 0
        grid_row 31,2
        grid_clear 31,2,nombreColonnes%    
    else
        grid_row 31,nombreLignes% + 1
    end_if
    
    ' Remplir les noms des colonnes
    for colonne% = 1 to nombreColonnes%
        grid_write 31,1,colonne%,nomColonne$(colonne%)
    next colonne%

    ' vider la variable système SCANCODE
    null% = scancode

    ' Remplir les cellules du tableau
    if nombreLignes% > 0
        index% = 1
        colonne% = 1
        for ligne% = 2 to nombreLignes% + 1
            enregistrement$ = item_read$(102,ligne%)
            champ$ = ""
            debutChamp% = 1

            while index% <> 0
                finChamp% = instr_pos(enregistrement$,separateur$,index%)
                if finChamp% = 0
                    exit_while
                end_if
                champ$ = mid$(enregistrement$,debutChamp%,finchamp% - debutChamp%)
                grid_write 31,ligne%,colonne%,champ$
                champ$ = ""
                colonne% = colonne% + 1
                debutChamp% = finChamp% + 1
                index% = debutChamp%
            end_while
        
            finChamp% = len(enregistrement$) + 1
            champ$ = mid$(enregistrement$,debutChamp%,finchamp% - debutChamp%)
            grid_write 31,ligne%,colonne%,champ$
            index% = 1
            colonne% = 1

            ' Interropmpre le traitement en cours par appui sur la touche Echap (ESC)
            if scancode = 27
                null% = message_information_ok("Remplissage du tableau interrompu !")
                exit_for
            end_if
        
            caption 201,str$(ligne%) + " / " + str$(nombreLignes%)
        next ligne%
    end_if

    ' Cacher la fenêtee d'attente
    hide 200
end_sub
' ------------------------------------------------------------------------------
sub interfaceUtilisateur()
    ' Dimensionner la fenêtre principale
    width 0,width(0) - width_client(0) + 1020
    height 0,height(0) - height_client(0) + 600
    
    ' Centrer sur l'écran la fenêtre principale
    top 0,(screen_y - height(0)) / 2
    left 0,(screen_x - width(0)) / 2
    
    ' Interdire le redimensionnement de la fenêtre principale
    on_resize 0,redim0
    
    ' Légende du bandeau de la fenêtre principale
    caption 0,"PANORAMIC : Visualisation des fichiers CSV"
    
    ' Titre principal
    alpha 1
    font_name 1,"Arial"
    font_size 1,24
    top 1,15
    caption 1,"Fichiers CSV"
    
    ' Centrer le titre principal horizontalement dans la fenêtre
    left 1,(width_client(0) - text_width(caption$(1),1)) / 2
    
    ' Créer bouton "Charger fichier CSV"
    button_picture 2
    top 2,46
    left 2,40
    width 2,120
    height 2,60
    button_picture_target_is_picture
    width 2,0
    height 2,0
    font_name 2,"Calibri"
    font_size 2,13
    caption 2,"Charger un" + chr$(13) + "fichier CSV"
    on_click 2,ouvrirFichier
    
    ' Créer un objet COMBO pour sélectionner le type de séparateur de champs (séparateur de colonnes)
    combo 3
    width 3,120
    top 3,146
    left 3,40
    item_add 3," Virgule"
    item_add 3," Point-virgule"
    item_add 3," Tabulation"
    item_add 3," Espace"
    text 3," Virgule"
    on_change 3,choixSeparateur

    ' Créer la légende du COMBO 3 (Type de séparateur)
    alpha 4
    top 4,129
    left 4,45
    caption 4,"Séparateur :"

    ' créer légendes des caractéristiques du fichier CSV
    alpha 5
    top 5,70
    font_name 5,"Arial"
    font_size 5,10
    font_bold 5
    caption 5,"Nom du fichier CSV :"
    left 5,420 - text_width(caption$(5),5)
    
    alpha 6
    top 6,91
    font_name 6,"Arial"
    font_size 6,10
    font_bold 6
    caption 6,"Chemin d'accès au fichier CSV :"
    left 6,420 - text_width(caption$(6),6)

    alpha 7
    top 7,112
    font_size 7,10
    font_name 7,"Arial"
    font_bold 7
    caption 7,"Nombre de colonnes :"
    left 7,420 - text_width(caption$(7),7)
    
    alpha 8
    top 8,133
    font_name 8,"Arial"
    font_size 8,10
    font_bold 8
    caption 8,"Nombre d'enregistrements :"
    left 8,420 - text_width(caption$(8),8)
    
    alpha 9
    top 9,154
    font_name 9,"Arial"
    font_size 9,10
    font_bold 9
    caption 9,"Taille du fichier CSV :"
    left 9,420 - text_width(caption$(9),9)
    
    ' créer zones d'affichage des caractéristiques du fichier CSV
    alpha 15
    top 15,70
    font_size 15,10
    left 15,425
    
    alpha 16
    top 16,91
    font_size 16,10
    left 16,425

    alpha 17
    top 17,112
    font_size 17,10
    left 17,425
    
    alpha 18
    top 18,133
    font_size 18,10
    left 18,425
    
    alpha 19
    top 19,154
    font_size 19,10
    left 19,425
    
    ' créer objet LIST 25 pour afficher la liste des noms de colonne
    list 25
    top 25,58
    left 25,800
    width 25,200
    height 25,110
    
    ' créer légende du LIST 25 (affichage des noms de colonne)
    alpha 26
    top 26,43
    left 26,805
    caption 26,"Noms des colonnes :"

    ' créer tableau de visualisation du fichier
    grid 31
    top 31,190
    left 31,20
    width 31,980
    height 31,390
    grid_column_fixed 31,0
    grid_column 31,15
    grid_row 31,15
    grid_column_sizing_on 31
        
    ' Créer boîte de dialogue "Ouvrir fichier"
    open_dialog 100
    ' Créer un filtre pour ne sélectionner que les fichiers CSV
    filter 100,"Fichier CSV|*.csv"
    
    ' Créer boîte de dialogue "Enregistrer fichier"
    save_dialog 101
    
    ' Créer un objet non visible DLIST pour stocker le fichier CSV
    dlist 102
    
    ' Créer fenêtre d'attente
    create_hide
    panel 200
    width 200,350
    height 200,250
    left 200,(width_client(0) - width(200)) / 2
    top 200,(height_client(0) - height(200)) / 2
    color 200,0,0,0
    create_show
    
    alpha 201
    parent 201,200
    font_color 201,255,255,255
    font_size 201,20
    top 201,120
    left 201,90
    
    alpha 202
    parent 202,200
    top 202,220
    left 202,180
    font_color 202,255,255,255
    font_size 202,12
    caption 202,"ESC pour interrompre"
    
    alpha 203
    parent 203,200
    font_size 203,17
    font_color 203,255,255,255
    top 203,40
    left 203,45
    caption 203,"Remplissage du tableau..."
  
end_sub
' ------------------------------------------------------------------------------
choixSeparateur:
    ' Choix du séparateur de colonnes

    if nomFichierEntrant$ = "_" or nomFichierEntrant$ = ""
        return
    end_if

    set_focus 0

    chargerFichier()
return
' ------------------------------------------------------------------------------
fnc formater$(valeur%)
   ' Formater un nombre avec séparateur de milliers
   dim_local p%, nombre$
  
   nombre$ = str$(valeur%)
   p% = len(nombre$)+1

   while p% > 4
      p% = p% - 3
      nombre$ = insert$(nombre$," ",p%)
   end_while

   result nombre$
end_fnc
' ------------------------------------------------------------------------------
redim0:
    ' interdire le redimensionnement de la fenêtre principale
    inactive 0
    width 0,width(0) - width_client(0) + 1020
    height 0,height(0) - height_client(0) + 600
    active 0
return
 
 

Bonne journée !


EDIT :
Mise à jour du code-source le 05 septembre 2023.


Dernière édition par Marc le Jeu 14 Sep 2023 - 21:33, édité 2 fois
Revenir en haut Aller en bas
lechat75

lechat75


Nombre de messages : 72
Age : 71
Localisation : MONTREUIL 93
Date d'inscription : 26/08/2018

Visualisation des fichiers CSV Empty
MessageSujet: Re: Visualisation des fichiers CSV   Visualisation des fichiers CSV EmptyVen 1 Sep 2023 - 10:23

bonjour à tous !
merci et bravo Marc , testé et approuvé !
c'est le type de programme qui m'est très utile
il ne manque que la possibilité d'éditer les cellules de la grille ou de rajouter et supprimer des enregistrements mais je crois que c'est une autre paire de manches !!!
bonne journée
Philippe
Revenir en haut Aller en bas
Marc

Marc


Nombre de messages : 2466
Age : 63
Localisation : TOURS (37)
Date d'inscription : 17/03/2014

Visualisation des fichiers CSV Empty
MessageSujet: Re: Visualisation des fichiers CSV   Visualisation des fichiers CSV EmptyLun 4 Sep 2023 - 22:21

Bonjour à tous !

Merci Lechat75 pour ton message !

J’ai rectifié quelques erreurs dans le code source :
- Un fichier vide bloquait le programme ;
- Un fichier ne contenant aucun enregistrement bloquait le programme ;
- Dans certaines circonstances, une erreur de calcul de la largeur des colonnes pouvait survenir.

Le code-source, en tête du fil de discussion, est mis à jour.

Lechat75 a écrit:
il ne manque que la possibilité d'éditer les cellules de la grille ou de rajouter et supprimer des enregistrements mais je crois que c'est une autre paire de manches !!!

Pour le fun et parce que j’aime bien les défis, je vais tenter de faire une version «éditeur ».
Alors peut-être à bientôt, j’espère !
Revenir en haut Aller en bas
lechat75

lechat75


Nombre de messages : 72
Age : 71
Localisation : MONTREUIL 93
Date d'inscription : 26/08/2018

Visualisation des fichiers CSV Empty
MessageSujet: Re: Visualisation des fichiers CSV   Visualisation des fichiers CSV EmptyMar 5 Sep 2023 - 10:48

bonjour à tous !
merci Marc je vais vite télécharger la nouvelle version.
j'avais bien pensé à compléter ton programme pour en faire un éditeur de fichier CSV mais cela me dépasse un peu.
encore merci
Phillippe
Revenir en haut Aller en bas
Marc

Marc


Nombre de messages : 2466
Age : 63
Localisation : TOURS (37)
Date d'inscription : 17/03/2014

Visualisation des fichiers CSV Empty
MessageSujet: Re: Visualisation des fichiers CSV   Visualisation des fichiers CSV EmptyMar 5 Sep 2023 - 21:06

Bonsoir à tous !

Voici une petite évolution du programme avec l’ajout (en vrac) de trois icônes sur la partie droite de la fenêtre.

Visualisation des fichiers CSV Csv610


- La première icône permet d’ajouter une colonne sur la gauche du GRID pour obtenir une numérotation des lignes ;

- La deuxième icône supprime la colonne de numérotation des lignes ;

- La troisième icône permet d’égaliser la largeur des colonnes. La largeur de chaque colonne étant modifiable à volonté avec la souris, un simple clic sur cette icone rétabli le dimensionnement initial.

Code:
' Fichiers CSV
' Marc - Septembre 2023
' Ecrit en langage PANORAMIC 0.9.29.i9

dim nomFichierEntrant$, cheminAccesFichierEntrant$, tailleFichierEntrant%
dim nomColonne$(50), separateur$, nombreColonnes%, nombreEnregistrements%, numerotationLignes%
dim numeroLigne%, nombreColonnesGrid%

label redim0, ouvrirFichier, choixSeparateur, numeroLigneOn, numeroLigneOff, egaliserColonnes

interfaceUtilisateur()

end
' ------------------------------------------------------------------------------
ouvrirFichier:
    nomFichierEntrant$ = file_name$(100)

    if nomFichierEntrant$ = "_"
        return
    end_if

    chargerFichier()
return
' ------------------------------------------------------------------------------
sub chargerFichier()
    dim_local separateur%(50), enregistrement$, caractere$
    dim_local index%, n%, null%
    
    ' Bloquer toute action sur la fenêtre principale
    inactive 0

    ' Effacer le contenu de l'objet LIST réservé à l'affichage des noms de colonnes
    clear 25
    
    ' Effacer le contenu de l'objet DLIST de stockage du ficher CSV
    clear 102
    
    ' Effacer le contenu du tableau de variables des noms de colonnes
    for n% = 1 to 50
        nomColonne$(n%) = ""
    next n%

    ' Effacer le contenu du GRID
    grid_clear 31,grid_row(31),grid_column(31)
    
    ' Formater le GRID par défaut
    grid_column 31,12
    grid_row 31,15
    nombreColonnes% = 12
    ajusterLargeurColonnes()

    ' Afficher le nom du fichier entrant
    caption 15,file_extract_name$(nomFichierEntrant$)
    
    ' Afficher chemin d'accès au fichier entrant
    caption 16,file_extract_path$(nomFichierEntrant$)
    
    ' Afficher la taille du fichier entrant CSV
    filebin_open_read 1,nomfichierEntrant$
    tailleFichierEntrant% = filebin_size(1)
    filebin_close 1
    if tailleFichierEntrant% > 1
        caption 19,formater$(tailleFichierEntrant%) + " octets"
    else
        caption 19,"0 octet"
    end_if    

    ' Sortir du sous-programme si le fichier est vide
    if tailleFichierEntrant% < 1
        caption 18,"0"
        caption 17,"0"
        active 0
        exit_sub
    end_if
    
    ' Charger le fichier CSV dans le DLIST 102
    file_load 102,nomFichierEntrant$

    ' Afficher le nombre d'enregistrements
    nombreEnregistrements% = count(102) - 1
    caption 18,formater$(nombreEnregistrements%)
    
    ' Choix du type de séparateur de colonne
    if text$(3) = " Virgule"
        separateur$ = chr$(44)
    else
        if text$(3) = " Point-virgule"
            separateur$ = chr$(59)
        else
            if text$(3) = " Tabulation"
                separateur$ = chr$(9)
            else
                if text$(3) = " Espace"
                    separateur$ = chr$(32)
                end_if
            end_if
        end_if                    
    end_if
    
    ' Lire la première ligne du fichier entrant CSV
    enregistrement$ = item_read$(102,1)

    ' Extraire et afficher dans le LIST les noms de colonnes du fichier entrant CSV
    index% = 1
    n% = 1
    while index% <= len(enregistrement$)
        caractere$ = mid$(enregistrement$,index%,1)
        if caractere$ = separateur$
            item_add 25,"Colonne " + str$(n%) + " : " + nomColonne$(n%)    
            n% = n% + 1
            if n% > 50
                null% = message_warning_ok("Ce fichier comporte plus de 50 colonnes." + chr$(13) + "Seules les 50 premières seront affichées !")
                exit_while
            end_if
        else    
            nomColonne$(n%) = nomColonne$(n%) + caractere$
        end_if
        index% = index% + 1
    end_while
    item_add 25,"Colonne " + str$(n%) + " : " + nomColonne$(n%)    

    ' afficher le nombre de colonnes du fichier
    nombreColonnes% = n%
    caption 17,str$(nombreColonnes%)

    remplirTableau()
    
    ' débloquer les actions sur la fenêtre principale
    active 0
    
    ' Donner le focus au GRID
    set_focus 31
end_sub
' ------------------------------------------------------------------------------
sub remplirTableau()
    dim_local ligne%, colonne%, enregistrement$, champ$, index%
    dim_local debutChamp%, finChamp%, null%

    ' Afficher la fenêtre d'attente
    show 200

    ' Ajuster le nombre de colonnes
    if numerotationlignes% = 0
        nombreColonnesGrid% = nombreColonnes%
    else
        nombreColonnesGrid% = nombreColonnes% + 1
    end_if    
    grid_column 31,nombreColonnesGrid%

    ' Ajuster la largeur des colonnes
    ajusterLargeurColonnes()
    
    ' Ajuster le nombre de lignes
    if nombreEnregistrements% = 0
        grid_row 31,2
        grid_clear 31,2,nombreColonnesGrid%    
    else
        grid_row 31,nombreEnregistrements% + 1
    end_if
    
    ' Remplir les noms des colonnes du GRID
    if numerotationLignes% = 0
        for colonne% = 1 to nombreColonnes%
            grid_write 31,1,colonne%,nomColonne$(colonne%)
        next colonne%
    else
        grid_write 31,1,1,"N° ligne"
        for colonne% = 1 to nombreColonnes%
            grid_write 31,1,colonne% + 1,nomColonne$(colonne%)
        next colonne%
    end_if

    ' vider la variable système SCANCODE
    null% = scancode

    ' Remplir les cellules du tableau
    if nombreEnregistrements% > 0
        index% = 1
        numeroLigne% = 1

        if numerotationLignes% = 0
            colonne% = 1
        else
            colonne% = 2
        end_if

        for ligne% = 2 to nombreEnregistrements% + 1
            enregistrement$ = item_read$(102,ligne%)
            champ$ = ""
            debutChamp% = 1

            ' Numérotation des lignes
            if numerotationLignes% = 1
                grid_write 31,ligne%,1,str$(numeroLigne%)
                numeroLigne% = numeroLigne% + 1
            end_if

            while index% <> 0
                finChamp% = instr_pos(enregistrement$,separateur$,index%)
                if finChamp% = 0
                    exit_while
                end_if
                champ$ = mid$(enregistrement$,debutChamp%,finchamp% - debutChamp%)
                grid_write 31,ligne%,colonne%,champ$
                champ$ = ""
                colonne% = colonne% + 1
                debutChamp% = finChamp% + 1
                index% = debutChamp%
            end_while
        
            finChamp% = len(enregistrement$) + 1
            champ$ = mid$(enregistrement$,debutChamp%,finchamp% - debutChamp%)
            grid_write 31,ligne%,colonne%,champ$
            index% = 1

            if numerotationLignes% = 0
                colonne% = 1
            else
                colonne% = 2
            end_if

            ' Interropmpre le traitement en cours par l'appui sur la touche Echap (ESC)
            if scancode = 27
                null% = message_information_ok("Remplissage du tableau interrompu !")
                exit_for
            end_if
        
            caption 201,str$(ligne%) + " / " + str$(nombreEnregistrements%)
        next ligne%
    end_if

    ' Cacher la fenêtre d'attente
    hide 200
end_sub
' ------------------------------------------------------------------------------
egaliserColonnes:
    ajusterLargeurColonnes()
return
' ------------------------------------------------------------------------------
sub ajusterLargeurColonnes()
    if numerotationLignes% = 1
        if nombreColonnes% < 15
            grid_column_width 31,(width(31)-70) / nombreColonnes%
            grid_one_column_width 31,1,40
        else
            grid_column_width 31,64
            grid_one_column_width 31,1,40  
        end_if
    else
        if nombreColonnes% < 15
            grid_column_width 31,(width(31)-30) / nombreColonnes%
        else
            grid_column_width 31,64      
        end_if
    end_if
end_sub
' ------------------------------------------------------------------------------
numeroLigneOn:
    if numerotationLignes% = 1
        return
    end_if

    inactive 0
    numerotationLignes% = 1
    grid_column_insert 31,1
    grid_column_fixed 31,1
    grid_one_column_width 31,1,40
    nombreColonnesGrid% = nombreColonnes% + 1

    ajusterLargeurColonnes()

    grid_write 31,1,1,"N° ligne"
    for numeroLigne% = 2 to grid_row(31)
        grid_write 31,numeroLigne%,1,str$(numeroLigne% - 1)
    next numeroLigne%

    active 0
return
' ------------------------------------------------------------------------------
numeroLigneOff:
    if numerotationLignes% = 0
        return
    end_if
    
    inactive 0
    numerotationLignes% = 0
    grid_column_fixed 31,0
    grid_column_delete 31,1
    nombreColonnesGrid% = nombreColonnes%

    ajusterLargeurColonnes()
    
    active 0
return
' ------------------------------------------------------------------------------
sub interfaceUtilisateur()
    ' Dimensionner la fenêtre principale
    width 0,width(0) - width_client(0) + 1100
    height 0,height(0) - height_client(0) + 600
    
    ' Centrer sur l'écran la fenêtre principale
    top 0,(screen_y - height(0)) / 2
    left 0,(screen_x - width(0)) / 2
    
    ' Interdire le redimensionnement de la fenêtre principale
    on_resize 0,redim0
    
    ' Légende du bandeau de la fenêtre principale
    caption 0,"PANORAMIC : Visualisation des fichiers CSV"
    
    ' Titre principal
    alpha 1
    font_name 1,"Arial"
    font_size 1,24
    top 1,15
    caption 1,"Fichiers CSV"
    
    ' Centrer le titre principal horizontalement dans la fenêtre
    left 1,(width_client(0) - text_width(caption$(1),1)) / 2
    
    ' Créer bouton "Charger fichier CSV"
    button_picture 2
    top 2,46
    left 2,40
    width 2,120
    height 2,60
    button_picture_target_is_picture
    width 2,0
    height 2,0
    font_name 2,"Calibri"
    font_size 2,13
    caption 2,"Charger un" + chr$(13) + "fichier CSV"
    on_click 2,ouvrirFichier
    
    ' Créer un objet COMBO pour sélectionner le type de séparateur de champs (séparateur de colonnes)
    combo 3
    width 3,120
    top 3,146
    left 3,40
    item_add 3," Virgule"
    item_add 3," Point-virgule"
    item_add 3," Tabulation"
    item_add 3," Espace"
    text 3," Virgule"
    on_change 3,choixSeparateur

    ' Créer la légende du COMBO 3 (Type de séparateur)
    alpha 4
    top 4,129
    left 4,45
    caption 4,"Séparateur :"

    ' créer légendes des caractéristiques du fichier CSV
    alpha 5
    top 5,70
    font_name 5,"Arial"
    font_size 5,10
    font_bold 5
    caption 5,"Nom du fichier CSV :"
    left 5,420 - text_width(caption$(5),5)
    
    alpha 6
    top 6,91
    font_name 6,"Arial"
    font_size 6,10
    font_bold 6
    caption 6,"Chemin d'accès au fichier CSV :"
    left 6,420 - text_width(caption$(6),6)

    alpha 7
    top 7,112
    font_size 7,10
    font_name 7,"Arial"
    font_bold 7
    caption 7,"Nombre de colonnes :"
    left 7,420 - text_width(caption$(7),7)
    
    alpha 8
    top 8,133
    font_name 8,"Arial"
    font_size 8,10
    font_bold 8
    caption 8,"Nombre d'enregistrements :"
    left 8,420 - text_width(caption$(8),8)
    
    alpha 9
    top 9,154
    font_name 9,"Arial"
    font_size 9,10
    font_bold 9
    caption 9,"Taille du fichier CSV :"
    left 9,420 - text_width(caption$(9),9)
    
    ' créer zones d'affichage des caractéristiques du fichier CSV
    alpha 15
    top 15,70
    font_size 15,10
    left 15,425
    
    alpha 16
    top 16,91
    font_size 16,10
    left 16,425

    alpha 17
    top 17,112
    font_size 17,10
    left 17,425
    
    alpha 18
    top 18,133
    font_size 18,10
    left 18,425
    
    alpha 19
    top 19,154
    font_size 19,10
    left 19,425
    
    ' créer objet LIST 25 pour afficher la liste des noms de colonne
    list 25
    top 25,58
    left 25,800
    width 25,200
    height 25,110
    
    ' créer légende du LIST 25 (affichage des noms de colonne)
    alpha 26
    top 26,43
    left 26,805
    caption 26,"Noms des colonnes :"

    ' créer tableau de visualisation du fichier
    grid 31
    top 31,190
    left 31,20
    width 31,980
    height 31,390
    grid_column_fixed 31,0
    grid_column 31,12
    grid_row 31,15
    grid_fixed_color 31,200,200,200
    grid_column_sizing_on 31
    nombreColonnes% = grid_column(31)
    ajusterLargeurColonnes()        
    
    ' Créer les icônes
    creerIconeNumeroLigneOFF()
    creerIconeNumeroLigneON()
    creerIconeEgaliserColonnes()

    ' Créer boîte de dialogue "Ouvrir fichier"
    open_dialog 100
    ' Créer un filtre pour ne sélectionner que les fichiers CSV
    filter 100,"Fichier CSV|*.csv"
    
    ' Créer boîte de dialogue "Enregistrer fichier"
    save_dialog 101
    
    ' Créer un objet non visible DLIST pour stocker le fichier CSV
    dlist 102
    
    ' Créer fenêtre d'attente
    create_hide
    panel 200
    width 200,350
    height 200,250
    left 200,(width_client(0) - width(200)) / 2
    top 200,(height_client(0) - height(200)) / 2
    color 200,0,0,0
    create_show
    
    alpha 201
    parent 201,200
    font_color 201,255,255,255
    font_size 201,20
    top 201,120
    left 201,90
    
    alpha 202
    parent 202,200
    top 202,220
    left 202,180
    font_color 202,255,255,255
    font_size 202,12
    caption 202,"ESC pour interrompre"
    
    alpha 203
    parent 203,200
    font_size 203,17
    font_color 203,255,255,255
    top 203,40
    left 203,45
    caption 203,"Remplissage du tableau..."
end_sub
' ------------------------------------------------------------------------------
sub creerIconeNumeroLigneON()
    dim_local point%
    
    picture 37
    width 37,42
    height 37,42
    top 37,210
    left 37,1030
    color 37,255,255,255
    2d_target_is 37
    2d_pen_color 0,0,0
    2d_line 0,0,42,0
    2d_line 0,0,0,42
    2d_line 19,0,19,42
    2d_line 0,14,42,14
    2d_line 0,28,20,28
    for point% = 19 to 41 step 2
        2d_point point%,28
    next point%
    2d_line 8,20,11,17
    2d_line 10,18,10,25
    2d_point 8,33
    2d_line 9,32,11,32
    2d_line 11,33,11,35
    2d_line 11,34,7,38
    2d_line 8,38,12,38
    2d_flood 13,8,200,200,200
    2d_flood 31,6,200,200,200
    2d_flood 2,17,200,200,200
    2d_flood 2,31,200,200,200
    cursor_point 37
    hint 37,"Numéroter les lignes"
    on_click 37,numeroLigneOn
end_sub
' ------------------------------------------------------------------------------
sub creerIconeNumeroLigneOFF()
    dim_local point%

    picture 38
    width 38,42
    height 38,42
    top 38,280
    left 38,1030
    color 38,255,255,255
    2d_target_is 38
    2d_pen_color 0,0,0
    2d_line 0,0,42,0
    2d_line 33,0,33,15
    2d_line 0,0,0,42
    2d_line 0,14,42,14
    for point% = 1 to 41 step 2
        2d_point point%,28
    next point%
    for point% = 16 to 40 step 2
        2d_point 33,point%
    next point%
    2d_flood 3,3,200,200,200
    2d_flood 35,3,200,200,200
    cursor_point 38
    hint 38,"Supprimer la numérotation des lignes"
    on_click 38,numeroLigneOff
end_sub
' ------------------------------------------------------------------------------
sub creerIconeEgaliserColonnes()
    dim_local point%

    picture 39
    width 39,42
    height 39,42
    top 39,350
    left 39,1030
    color 39,255,255,255
    2d_target_is 39
    2d_pen_color 0,0,0
    2d_line 0,0,42,0
    2d_line 0,14,42,14
    2d_flood 2,2,200,200,200
    2d_line 17,0,17,15
    2d_line 34,0,34,15
    2d_line 0,0,0,42
    2d_line 2,7,6,3
    2d_line 2,7,6,11
    2d_line 4,7,14,7
    2d_line 15,7,11,3
    2d_line 15,7,11,11
    image 40
    2d_image_copy 40,1,1,17,14
    2d_image_paste 40,18,1
    2d_image_paste 40,35,1
    for point% = 1 to 42 step 2
        2d_point point%,28
    next point%
    for point% = 14 to 41 step 2
        2d_point 17,point%
    next point%
    for point% = 14 to 41 step 2
        2d_point 34,point%
    next point%
    cursor_point 39
    hint 39,"Egaliser la largeur des colonnes"
    on_click 39,egaliserColonnes
end_sub
' ------------------------------------------------------------------------------
choixSeparateur:
    ' Choix du séparateur de colonnes

    if nomFichierEntrant$ = "_" or nomFichierEntrant$ = ""
        return
    end_if

    set_focus 0

    chargerFichier()
return
' ------------------------------------------------------------------------------
fnc formater$(valeur%)
   ' Formater un nombre avec séparateur de milliers
   dim_local p%, nombre$
  
   nombre$ = str$(valeur%)
   p% = len(nombre$)+1

   while p% > 4
      p% = p% - 3
      nombre$ = insert$(nombre$," ",p%)
   end_while

   result nombre$
end_fnc
' ------------------------------------------------------------------------------
redim0:
    ' interdire le redimensionnement de la fenêtre principale
    inactive 0
    width 0,width(0) - width_client(0) + 1100
    height 0,height(0) - height_client(0) + 600
    active 0
return
 


Maintenant je vais tenter de faire une version avec la possibilité d’éditer le fichier CSV.
J’ai couché sur le papier quelques idées :
- Editer une cellule ;
- Supprimer une ligne ;
- Ajouter une ligne ;
- Supprimer une colonne ;
- Ajouter une colonne ;
- Modifier le titre d’une colonne ;
- Sauvegarder au format CSV ;
- Sauvegarder au format « Panoramic GRID ».

A bientôt !

lechat75 aime ce message

Revenir en haut Aller en bas
lechat75

lechat75


Nombre de messages : 72
Age : 71
Localisation : MONTREUIL 93
Date d'inscription : 26/08/2018

Visualisation des fichiers CSV Empty
MessageSujet: Re: Visualisation des fichiers CSV   Visualisation des fichiers CSV EmptyMer 6 Sep 2023 - 9:50

Bonjour à tous !
Marc ton cahier des charges me paraît assez complet mais il manque la possibilité de déterminer la première ligne du fichier comme étant la ligne de titre de la colonne.
très bien les modifs pour le formatage du tableau !
belle journée
Philippe
Revenir en haut Aller en bas
Marc

Marc


Nombre de messages : 2466
Age : 63
Localisation : TOURS (37)
Date d'inscription : 17/03/2014

Visualisation des fichiers CSV Empty
MessageSujet: Re: Visualisation des fichiers CSV   Visualisation des fichiers CSV EmptyMer 6 Sep 2023 - 10:43

Bonjour Philippe (alias Lechat75)!

Citation :
il manque la possibilité de déterminer la première ligne du fichier comme étant la ligne de titre de la colonne.

C’est déjà le cas. Le remplissage est effectué automatiquement par le programme. Cette ligne est la première ligne sur fond gris du tableau. Elle est fixe ce qui permet de scroller les enregistrements tout en gardant la ligne de libellés visible.
Mais je n’ai peut-être pas bien compris ta demande…

Bonne journée ensoleillée !

Visualisation des fichiers CSV Fichie11
Revenir en haut Aller en bas
lechat75

lechat75


Nombre de messages : 72
Age : 71
Localisation : MONTREUIL 93
Date d'inscription : 26/08/2018

Visualisation des fichiers CSV Empty
MessageSujet: Re: Visualisation des fichiers CSV   Visualisation des fichiers CSV EmptyJeu 7 Sep 2023 - 9:52

bonjour à tous !
@Marc
en effet je n'avais pas bien exprimé ma demande
c'était pour le cas où la première ligne ne contenait pas les noms des champs du fichier.
bonne journée
Philippe
Revenir en haut Aller en bas
Marc

Marc


Nombre de messages : 2466
Age : 63
Localisation : TOURS (37)
Date d'inscription : 17/03/2014

Visualisation des fichiers CSV Empty
MessageSujet: Re: Visualisation des fichiers CSV   Visualisation des fichiers CSV EmptyVen 8 Sep 2023 - 10:31

Bonjour à tous !

Lechat75 a écrit:
…c'était pour le cas où la première ligne ne contenait pas les noms des champs du fichier.

Pas de problème, un bouton (ou icône) supplémentaire pourrait permettre de déterminer le rôle de la première ligne :
- Ligne classique d’enregistrement, c’est la commande GRID_ROW_FIXED N,0
- Ligne En-têtes de colonne, c’est la commande GRID_ROW_FIXED N,1

Je ferai ce soir l’ajout cette possibilité.

Bonne journée !
Revenir en haut Aller en bas
Marc

Marc


Nombre de messages : 2466
Age : 63
Localisation : TOURS (37)
Date d'inscription : 17/03/2014

Visualisation des fichiers CSV Empty
MessageSujet: Re: Visualisation des fichiers CSV   Visualisation des fichiers CSV EmptySam 9 Sep 2023 - 7:54

Bonjour à tous !

Voici une version du lecteur de fichier CSV à laquelle j’ai ajouté une icône pour sélectionner la fonction de la première ligne du GRID.

Cette première ligne peut être, soit une ligne d’affichage d’en-têtes de colonnes, soit la première ligne des enregistrements.

Belle journée estivale à tous !

Code:
' Fichiers CSV
' Marc - Septembre 2023
' Ecrit en langage PANORAMIC 0.9.29.i9

dim nomFichierEntrant$, cheminAccesFichierEntrant$, tailleFichierEntrant%
dim nomColonne$(50), separateur$, nombreColonnes%, nombreEnregistrements%, numerotationLignes%
dim numeroLigne%, nombreColonnesGrid%, titreColonnes%

label redim0, ouvrirFichier, choixSeparateur, numeroLigneOn, numeroLigneOff, egaliserColonnes
label titreColonnesOnOff

interfaceUtilisateur()

end
' ------------------------------------------------------------------------------
ouvrirFichier:
    nomFichierEntrant$ = file_name$(100)

    if nomFichierEntrant$ = "_"
        return
    end_if

    chargerFichier()
return
' ------------------------------------------------------------------------------
sub chargerFichier()
    dim_local separateur%(50), enregistrement$, caractere$
    dim_local index%, n%, null%

    if nomFichierEntrant$ = "_" or nomFichierEntrant$ =""
        exit_sub
    end_if
    
    ' Bloquer toute action sur la fenêtre principale
    inactive 0

    ' Effacer le contenu de l'objet LIST réservé à l'affichage des noms de colonnes
    clear 25
    
    ' Effacer le contenu de l'objet DLIST de stockage du ficher CSV
    clear 102
    
    ' Effacer le contenu du tableau de variables des noms de colonnes
    for n% = 1 to 50
        nomColonne$(n%) = ""
    next n%

    ' Effacer le contenu du GRID
    grid_clear 31,grid_row(31),grid_column(31)
    
    ' Afficher le nom du fichier entrant
    caption 15,file_extract_name$(nomFichierEntrant$)
    
    ' Afficher chemin d'accès au fichier entrant
    caption 16,file_extract_path$(nomFichierEntrant$)
    
    ' Afficher la taille du fichier entrant CSV
    filebin_open_read 1,nomfichierEntrant$
    tailleFichierEntrant% = filebin_size(1)
    filebin_close 1
    if tailleFichierEntrant% > 1
        caption 19,formater$(tailleFichierEntrant%) + " octets"
    else
        caption 19,"0 octet"
    end_if    

    ' Sortir du sous-programme si le fichier est vide
    if tailleFichierEntrant% < 1
        caption 18,"0"
        caption 17,"0"
        active 0
        exit_sub
    end_if
    
    ' Charger le fichier CSV dans le DLIST 102
    file_load 102,nomFichierEntrant$

    ' Afficher le nombre d'enregistrements
    nombreEnregistrements% = count(102)
    if titreColonnes% = 1
        caption 18,formater$(nombreEnregistrements% - 1)
    else
        caption 18,formater$(nombreEnregistrements%)
    end_if    
    
    ' Choix du type de séparateur de colonne
    if text$(3) = " Virgule"
        separateur$ = chr$(44)
    else
        if text$(3) = " Point-virgule"
            separateur$ = chr$(59)
        else
            if text$(3) = " Tabulation"
                separateur$ = chr$(9)
            else
                if text$(3) = " Espace"
                    separateur$ = chr$(32)
                end_if
            end_if
        end_if                    
    end_if
    
    ' Lire la première ligne du fichier entrant CSV
    enregistrement$ = item_read$(102,1)

    ' Extraire et afficher dans le LIST les noms de colonnes du fichier entrant CSV
    index% = 1
    n% = 1
    while index% <= len(enregistrement$)
        caractere$ = mid$(enregistrement$,index%,1)
        if caractere$ = separateur$
            item_add 25,"Colonne " + str$(n%) + " : " + nomColonne$(n%)    
            n% = n% + 1
            if n% > 50
                null% = message_warning_ok("Ce fichier comporte plus de 50 colonnes." + chr$(13) + "Seules les 50 premières seront affichées !")
                exit_while
            end_if
        else    
            nomColonne$(n%) = nomColonne$(n%) + caractere$
        end_if
        index% = index% + 1
    end_while
    item_add 25,"Colonne " + str$(n%) + " : " + nomColonne$(n%)    

    ' afficher le nombre de colonnes du fichier
    nombreColonnes% = n%
    caption 17,str$(nombreColonnes%)

    remplirTableau()
    
    ' débloquer les actions sur la fenêtre principale
    active 0
    
    ' Donner le focus au GRID
    set_focus 31
end_sub
' ------------------------------------------------------------------------------
sub remplirTableau()
    dim_local ligne%, colonne%, enregistrement$, champ$, index%
    dim_local debutChamp%, finChamp%, null%

    ' Afficher la fenêtre d'attente
    show 200

    ' Ajuster le nombre de colonnes
    if numerotationlignes% = 0
        nombreColonnesGrid% = nombreColonnes%
    else
        nombreColonnesGrid% = nombreColonnes% + 1
    end_if    
    grid_column 31,nombreColonnesGrid%

    ' Ajuster la largeur des colonnes
    ajusterLargeurColonnes()
    
    ' Ajuster le nombre de lignes
    if nombreEnregistrements% = 0
        grid_row 31,2
        grid_clear 31,2,nombreColonnesGrid%    
    else
        grid_row 31,nombreEnregistrements%
    end_if
    
    ' Remplir la première ligne du GRID
    if numerotationLignes% = 0
        for colonne% = 1 to nombreColonnes%
            grid_write 31,1,colonne%,nomColonne$(colonne%)
        next colonne%
    else
        if titreColonnes% = 1
            grid_write 31,1,1,"N° ligne"
        else
            grid_write 31,1,1,"1"
        end_if    
        for colonne% = 1 to nombreColonnes%
            grid_write 31,1,colonne% + 1,nomColonne$(colonne%)
        next colonne%
    end_if

    ' vider la variable système SCANCODE
    null% = scancode

    ' Remplir les cellules du tableau
    if nombreEnregistrements% > 1
        index% = 1

        if titreColonnes% = 1
            numeroLigne% = 1
        else
            numeroLigne% = 2
        end_if    

        if numerotationLignes% = 0
            colonne% = 1
        else
            colonne% = 2
        end_if

        for ligne% = 2 to nombreEnregistrements%
            enregistrement$ = item_read$(102,ligne%)
            champ$ = ""
            debutChamp% = 1

            ' Numérotation des lignes
            if numerotationLignes% = 1
                grid_write 31,ligne%,1,str$(numeroLigne%)
                numeroLigne% = numeroLigne% + 1
            end_if

            while index% <> 0
                finChamp% = instr_pos(enregistrement$,separateur$,index%)
                if finChamp% = 0
                    exit_while
                end_if
                champ$ = mid$(enregistrement$,debutChamp%,finchamp% - debutChamp%)
                grid_write 31,ligne%,colonne%,champ$
                champ$ = ""
                colonne% = colonne% + 1
                debutChamp% = finChamp% + 1
                index% = debutChamp%
            end_while
        
            finChamp% = len(enregistrement$) + 1
            champ$ = mid$(enregistrement$,debutChamp%,finchamp% - debutChamp%)
            grid_write 31,ligne%,colonne%,champ$
            index% = 1

            if numerotationLignes% = 0
                colonne% = 1
            else
                colonne% = 2
            end_if

            ' Interropmpre le traitement en cours par l'appui sur la touche Echap (ESC)
            if scancode = 27
                null% = message_information_ok("Remplissage du tableau interrompu !")
                exit_for
            end_if
        
            caption 201,str$(ligne%) + " / " + str$(nombreEnregistrements%)
        next ligne%
    end_if

    ' Cacher la fenêtre d'attente
    hide 200
end_sub
' ------------------------------------------------------------------------------
egaliserColonnes:
    ajusterLargeurColonnes()
return
' ------------------------------------------------------------------------------
sub ajusterLargeurColonnes()
    if numerotationLignes% = 1
        if nombreColonnes% < 15
            grid_column_width 31,(width(31)-70) / nombreColonnes%
            grid_one_column_width 31,1,40
        else
            grid_column_width 31,64
            grid_one_column_width 31,1,40  
        end_if
    else
        if nombreColonnes% < 15
            grid_column_width 31,(width(31)-30) / nombreColonnes%
        else
            grid_column_width 31,64      
        end_if
    end_if
end_sub
' ------------------------------------------------------------------------------
numeroLigneOn:
    if numerotationLignes% = 1
        return
    end_if

    inactive 0
    numerotationLignes% = 1
    grid_column_insert 31,1
    grid_column_fixed 31,1
    grid_one_column_width 31,1,40
    nombreColonnesGrid% = nombreColonnes% + 1

    ajusterLargeurColonnes()

    if titreColonnes% = 1
        grid_write 31,1,1,"N° ligne"
        for numeroLigne% = 2 to grid_row(31)
            grid_write 31,numeroLigne%,1,str$(numeroLigne% - 1)
        next numeroLigne%
    else
        grid_clear 31,grid_row(31),1
        grid_write 31,1,1,"1"
        for numeroLigne% = 2 to grid_row(31)
            grid_write 31,numeroLigne%,1,str$(numeroLigne%)
        next numeroLigne%
    end_if
    
    active 0
return
' ------------------------------------------------------------------------------
numeroLigneOff:
    if numerotationLignes% = 0
        return
    end_if
    
    inactive 0
    numerotationLignes% = 0
    grid_column_fixed 31,0
    grid_column_delete 31,1
    nombreColonnesGrid% = nombreColonnes%

    ajusterLargeurColonnes()
    
    active 0
return
' ------------------------------------------------------------------------------
titreColonnesOnOff:
    if titreColonnes% = 0
        titreColonnes% = 1
        if grid_row(31) > 1
            grid_row_fixed 31,1
        end_if    
        ' cacher l'objet LIST 25 : liste de colonnes
        show 25
        ' cacher la légende du LIST 25
        show 26
    else
        titreColonnes% = 0
        titreColonnes% = 0
        grid_row_fixed 31,0
        ' afficher l'objet LIST 25 : liste de colonnes
        hide 25
        ' afficher la légende du lIST 25
        hide 26
    end_if    

    if grid_column_fixed(31) = 1
        grid_clear 31,grid_row(31),1
    
        if titreColonnes% = 1
            grid_write 31,1,1,"N° ligne"
            for numeroLigne% = 2 to grid_row(31)
                grid_write 31,numeroLigne%,1,str$(numeroLigne% - 1)
            next numeroLigne%
        else
            grid_clear 31,grid_row(31),1
            grid_write 31,1,1,"1"
            for numeroLigne% = 2 to grid_row(31)
            grid_write 31,numeroLigne%,1,str$(numeroLigne%)
            next numeroLigne%
        end_if    
    end_if

    chargerFichier()
return
' ------------------------------------------------------------------------------
sub interfaceUtilisateur()
    ' Dimensionner la fenêtre principale
    width 0,width(0) - width_client(0) + 1100
    height 0,height(0) - height_client(0) + 600
    
    ' Centrer sur l'écran la fenêtre principale
    top 0,(screen_y - height(0)) / 2
    left 0,(screen_x - width(0)) / 2
    
    ' Interdire le redimensionnement de la fenêtre principale
    on_resize 0,redim0
    
    ' Légende du bandeau de la fenêtre principale
    caption 0,"PANORAMIC : Visualisation des fichiers CSV"
    
    ' Titre principal
    alpha 1
    font_name 1,"Arial"
    font_size 1,24
    top 1,15
    caption 1,"Fichiers CSV"
    
    ' Centrer le titre principal horizontalement dans la fenêtre
    left 1,(width_client(0) - text_width(caption$(1),1)) / 2
    
    ' Créer bouton "Charger fichier CSV"
    button_picture 2
    top 2,46
    left 2,40
    width 2,120
    height 2,60
    button_picture_target_is_picture
    width 2,0
    height 2,0
    font_name 2,"Calibri"
    font_size 2,13
    caption 2,"Charger un" + chr$(13) + "fichier CSV"
    on_click 2,ouvrirFichier
    
    ' Créer un objet COMBO pour sélectionner le type de séparateur de champs (séparateur de colonnes)
    combo 3
    width 3,120
    top 3,146
    left 3,40
    item_add 3," Virgule"
    item_add 3," Point-virgule"
    item_add 3," Tabulation"
    item_add 3," Espace"
    text 3," Virgule"
    on_change 3,choixSeparateur

    ' Créer la légende du COMBO 3 (Type de séparateur)
    alpha 4
    top 4,129
    left 4,45
    caption 4,"Séparateur :"

    ' créer légendes des caractéristiques du fichier CSV
    alpha 5
    top 5,70
    font_name 5,"Arial"
    font_size 5,10
    font_bold 5
    caption 5,"Nom du fichier CSV :"
    left 5,420 - text_width(caption$(5),5)
    
    alpha 6
    top 6,91
    font_name 6,"Arial"
    font_size 6,10
    font_bold 6
    caption 6,"Chemin d'accès au fichier CSV :"
    left 6,420 - text_width(caption$(6),6)

    alpha 7
    top 7,112
    font_size 7,10
    font_name 7,"Arial"
    font_bold 7
    caption 7,"Nombre de colonnes :"
    left 7,420 - text_width(caption$(7),7)
    
    alpha 8
    top 8,133
    font_name 8,"Arial"
    font_size 8,10
    font_bold 8
    caption 8,"Nombre d'enregistrements :"
    left 8,420 - text_width(caption$(8),8)
    
    alpha 9
    top 9,154
    font_name 9,"Arial"
    font_size 9,10
    font_bold 9
    caption 9,"Taille du fichier CSV :"
    left 9,420 - text_width(caption$(9),9)
    
    ' créer zones d'affichage des caractéristiques du fichier CSV
    alpha 15
    top 15,70
    font_size 15,10
    left 15,425
    
    alpha 16
    top 16,91
    font_size 16,10
    left 16,425

    alpha 17
    top 17,112
    font_size 17,10
    left 17,425
    
    alpha 18
    top 18,133
    font_size 18,10
    left 18,425
    
    alpha 19
    top 19,154
    font_size 19,10
    left 19,425
    
    ' créer objet LIST 25 pour afficher la liste des noms de colonne
    list 25
    top 25,58
    left 25,800
    width 25,200
    height 25,110
    
    ' créer légende du LIST 25 (affichage des noms de colonne)
    alpha 26
    top 26,43
    left 26,805
    caption 26,"Noms des colonnes :"

    ' créer tableau de visualisation du fichier
    grid 31
    top 31,190
    left 31,20
    width 31,980
    height 31,390
    grid_column_fixed 31,0
    grid_column 31,12
    grid_row 31,15
    grid_fixed_color 31,200,200,200
    grid_column_sizing_on 31
    nombreColonnes% = grid_column(31)
    ajusterLargeurColonnes()        
    titreColonnes% = 1
    
    ' Créer les icônes
    creerIconeNumeroLigneOFF()
    creerIconeNumeroLigneON()
    creerIconeEgaliserColonnes()
    creerIconeTitreColonnesOnOff()
  
    ' Créer boîte de dialogue "Ouvrir fichier"
    open_dialog 100
    ' Créer un filtre pour ne sélectionner que les fichiers CSV
    filter 100,"Fichier CSV|*.csv"
    
    ' Créer boîte de dialogue "Enregistrer fichier"
    save_dialog 101
    
    ' Créer un objet non visible DLIST pour stocker le fichier CSV
    dlist 102
    
    ' Créer fenêtre d'attente
    create_hide
    panel 200
    width 200,350
    height 200,250
    left 200,(width_client(0) - width(200)) / 2
    top 200,(height_client(0) - height(200)) / 2
    color 200,0,0,0
    create_show
    
    alpha 201
    parent 201,200
    font_color 201,255,255,255
    font_size 201,20
    top 201,120
    left 201,90
    
    alpha 202
    parent 202,200
    top 202,220
    left 202,180
    font_color 202,255,255,255
    font_size 202,12
    caption 202,"ESC pour interrompre"
    
    alpha 203
    parent 203,200
    font_size 203,17
    font_color 203,255,255,255
    top 203,40
    left 203,45
    caption 203,"Remplissage du tableau..."
end_sub
' ------------------------------------------------------------------------------
sub creerIconeNumeroLigneON()
    dim_local point%
    
    picture 37
    width 37,42
    height 37,42
    top 37,210
    left 37,1030
    color 37,255,255,255
    2d_target_is 37
    2d_pen_color 0,0,0
    2d_line 0,0,42,0
    2d_line 0,0,0,42
    2d_line 19,0,19,42
    2d_line 0,14,42,14
    2d_line 0,28,20,28
    for point% = 19 to 41 step 2
        2d_point point%,28
    next point%
    2d_line 8,20,11,17
    2d_line 10,18,10,25
    2d_point 8,33
    2d_line 9,32,11,32
    2d_line 11,33,11,35
    2d_line 11,34,7,38
    2d_line 8,38,12,38
    2d_flood 13,8,200,200,200
    2d_flood 31,6,200,200,200
    2d_flood 2,17,200,200,200
    2d_flood 2,31,200,200,200
    cursor_point 37
    hint 37,"Numéroter les lignes"
    on_click 37,numeroLigneOn
end_sub
' ------------------------------------------------------------------------------
sub creerIconeNumeroLigneOFF()
    dim_local point%

    picture 38
    width 38,42
    height 38,42
    top 38,280
    left 38,1030
    color 38,255,255,255
    2d_target_is 38
    2d_pen_color 0,0,0
    2d_line 0,0,42,0
    2d_line 33,0,33,15
    2d_line 0,0,0,42
    2d_line 0,14,42,14
    for point% = 1 to 41 step 2
        2d_point point%,28
    next point%
    for point% = 16 to 40 step 2
        2d_point 33,point%
    next point%
    2d_flood 3,3,200,200,200
    2d_flood 35,3,200,200,200
    cursor_point 38
    hint 38,"Supprimer la numérotation des lignes"
    on_click 38,numeroLigneOff
end_sub
' ------------------------------------------------------------------------------
sub creerIconeEgaliserColonnes()
    dim_local point%

    picture 39
    width 39,42
    height 39,42
    top 39,350
    left 39,1030
    color 39,255,255,255
    2d_target_is 39
    2d_pen_color 0,0,0
    2d_line 0,0,42,0
    2d_line 0,14,42,14
    2d_flood 2,2,200,200,200
    2d_line 17,0,17,15
    2d_line 34,0,34,15
    2d_line 0,0,0,42
    2d_line 2,7,6,3
    2d_line 2,7,6,11
    2d_line 4,7,14,7
    2d_line 15,7,11,3
    2d_line 15,7,11,11
    image 41
    2d_image_copy 41,1,1,17,14
    2d_image_paste 41,18,1
    2d_image_paste 41,35,1
    for point% = 1 to 42 step 2
        2d_point point%,28
    next point%
    for point% = 14 to 41 step 2
        2d_point 17,point%
    next point%
    for point% = 14 to 41 step 2
        2d_point 34,point%
    next point%
    cursor_point 39
    hint 39,"Egaliser la largeur des colonnes"
    on_click 39,egaliserColonnes
end_sub
' ------------------------------------------------------------------------------
sub creerIconeTitreColonnesOnOff()
    dim_local point%

    picture 40
    width 40,42
    height 40,42
    top 40,420
    left 40,1030
    color 40,255,255,255
    2d_target_is 40
    2d_pen_color 180,180,180
    2d_line 0,16,42,0
    2d_flood 2,2,200,200,200
    2d_pen_color 0,0,0
    2d_line 0,0,42,0
    2d_line 0,0,0,42
    for point% = 1 to 41 step 2
        2d_point point%,16
    next point%
    for point% = 1 to 41 step 2
        2d_point point%,32  
    next point%
    2d_line 20,3,23,3
    2d_line 19,4,24,4
    2d_line 18,5,20,5
    2d_point 18,6
    2d_line 22,5,25,5
    2d_line 23,6,25,6
    2d_line 23,7,25,7
    2d_line 22,8,24,8
    2d_line 21,9,23,9
    2d_line 21,10,23,10
    2d_rectangle 21,12,23,14
    cursor_point 40
    hint 40,"Titre des colonnes ON / OFF"
    on_click 40,titreColonnesOnOff
end_sub
' ------------------------------------------------------------------------------
choixSeparateur:
    ' Choix du séparateur de colonnes

    if nomFichierEntrant$ = "_" or nomFichierEntrant$ = ""
        return
    end_if

    set_focus 0

    chargerFichier()
return
' ------------------------------------------------------------------------------
fnc formater$(valeur%)
   ' Formater un nombre avec séparateur de milliers
   dim_local p%, nombre$
  
   nombre$ = str$(valeur%)
   p% = len(nombre$)+1

   while p% > 4
      p% = p% - 3
      nombre$ = insert$(nombre$," ",p%)
   end_while

   result nombre$
end_fnc
' ------------------------------------------------------------------------------
redim0:
    ' interdire le redimensionnement de la fenêtre principale
    inactive 0
    width 0,width(0) - width_client(0) + 1100
    height 0,height(0) - height_client(0) + 600
    active 0
return
 

Le lecteur de fichier CSV en mode "fichier sans en-têtes" et avec la numérotation des lignes :
Visualisation des fichiers CSV Lecteu10
Revenir en haut Aller en bas
Marc

Marc


Nombre de messages : 2466
Age : 63
Localisation : TOURS (37)
Date d'inscription : 17/03/2014

Visualisation des fichiers CSV Empty
MessageSujet: Re: Visualisation des fichiers CSV   Visualisation des fichiers CSV EmptyDim 10 Sep 2023 - 22:55

Bonjour à tous !

Suite aux précédents prototypes du lecteur de fichier CSV, voici la version finale.

Je l’ai baptisée Panoramic CSV Reader.

- La fenêtre principale est redimensionnable ;
- La largeur de chaque colonne est ajustable ;
- Le fichier CSV peut contenir ou ne pas contenir d’en-têtes de colonnes ;
- Le caractère de séparation de colonnes est paramétrable. Virgule, point-virgule, tabulation ou espace sont proposés ;
- Les lignes sont numérotées ;
- Une icône permet d’étaler uniformément les colonnes sur toute la largeur disponible ;
- Un clic sur le logo Panoramic affiche l’à-propos.

N’hésitez pas à me dire si vous rencontrez une erreur ou si vous avez une suggestion quelconque.

En attendant, je continue la version EDITEUR de fichier CSV.

A bientôt !

Code:
' Lecteur Fichiers CSV
' Marc - Septembre 2023
' Ecrit en langage PANORAMIC 0.9.29.i9

dim nomFichierEntrant$, tailleFichierEntrant%
dim separateur$, nombreColonnes%, nombreEnregistrements%
dim numeroLigne%, nombreColonnesGrid%, titreColonnes%

label redim0, ouvrirFichier, choixSeparateur, egaliserColonnes, choixEntetes
label aPropos, fermerAPropos, goForumPanoramic

interfaceUtilisateur()

end
' ------------------------------------------------------------------------------
ouvrirFichier:
    ' Rendre non visible la fenêtre à-propos
    hide 50

    nomFichierEntrant$ = file_name$(100)

    if nomFichierEntrant$ = "_"
        return
    end_if

    chargerFichier()
return
' ------------------------------------------------------------------------------
sub chargerFichier()
    dim_local separateur%(50), enregistrement$, caractere$
    dim_local index%, n%, null%

    if nomFichierEntrant$ = "_" or nomFichierEntrant$ =""
        exit_sub
    end_if
    
    ' Bloquer toute action sur la fenêtre principale
    inactive 0

    ' Effacer le contenu de l'objet DLIST de stockage du ficher CSV
    clear 102
    
    ' Effacer le contenu du GRID
    grid_clear 31,grid_row(31),grid_column(31)
    
    ' Afficher le nom du fichier
    caption 15,file_extract_name$(nomFichierEntrant$)
    
    ' Afficher chemin d'accès au fichier
    caption 16,file_extract_path$(nomFichierEntrant$)
    
    ' Afficher la taille du fichier CSV
    filebin_open_read 1,nomfichierEntrant$
    tailleFichierEntrant% = filebin_size(1)
    filebin_close 1
    if tailleFichierEntrant% > 1
        caption 19,formater$(tailleFichierEntrant%) + " octets"
    else
        caption 19,"0 octet"
    end_if    

    ' Sortir du sous-programme si le fichier est vide
    if tailleFichierEntrant% < 1
        caption 18,"0"
        caption 17,"0"
        active 0
        exit_sub
    end_if
    
    ' Charger le fichier CSV dans le DLIST 102
    file_load 102,nomFichierEntrant$

    ' Afficher le nombre d'enregistrements
    nombreEnregistrements% = count(102)
    if titreColonnes% = 1
        caption 18,formater$(nombreEnregistrements% - 1)
    else
        caption 18,formater$(nombreEnregistrements%)
    end_if    
    
    ' Choix du type de séparateur de colonne
    if text$(3) = " Virgule"
        separateur$ = chr$(44)
    else
        if text$(3) = " Point-virgule"
            separateur$ = chr$(59)
        else
            if text$(3) = " Tabulation"
                separateur$ = chr$(9)
            else
                if text$(3) = " Espace"
                    separateur$ = chr$(32)
                end_if
            end_if
        end_if                    
    end_if
    
    ' Lire la première ligne du fichier
    enregistrement$ = item_read$(102,1)

    ' Déterminer le nombre de colonnes du fichier
    index% = 1
    nombreColonnes% = 1
    while index% <= len(enregistrement$)
        caractere$ = mid$(enregistrement$,index%,1)
        if caractere$ = separateur$
            nombreColonnes% = nombreColonnes% + 1
            if nombreColonnes% > 50
                null% = message_warning_ok("Ce fichier comporte plus de 50 colonnes." + chr$(13) + "Seules les 50 premières seront affichées !")
                exit_while
            end_if
        end_if
        index% = index% + 1
    end_while

    ' afficher le nombre de colonnes du fichier
    caption 17,str$(nombreColonnes%)

    remplirTableau()
    
    ' débloquer les actions sur la fenêtre principale
    active 0
    
    ' Donner le focus au GRID
    set_focus 31
end_sub
' ------------------------------------------------------------------------------
sub remplirTableau()
    dim_local ligne%, colonne%, enregistrement$, champ$, index%
    dim_local debutChamp%, finChamp%, null%

    ' Afficher la fenêtre d'attente
    show 200

    ' Ajuster le nombre de colonnes
    nombreColonnesGrid% = nombreColonnes% + 1
    grid_column 31,nombreColonnesGrid%

    ' Ajuster la largeur des colonnes
    ajusterLargeurColonnes()
    
    ' Ajuster le nombre de lignes
    if nombreEnregistrements% < 2
        grid_row 31,2
        grid_clear 31,2,nombreColonnesGrid%    
    else
        grid_row 31,nombreEnregistrements%
    end_if
    
    ' vider la variable système SCANCODE
    null% = scancode

    ' Remplir les cellules du tableau
    if nombreEnregistrements% > 0
        index% = 1

        if titreColonnes% = 1
            numeroLigne% = 0
        else
            numeroLigne% = 1
        end_if    

        colonne% = 2
 
        for ligne% = 1 to nombreEnregistrements%
            enregistrement$ = item_read$(102,ligne%)
            champ$ = ""
            debutChamp% = 1

            ' Numérotation des lignes
            if numeroLigne% = 0
                grid_write 31,ligne%,1,""
            else
                grid_write 31,ligne%,1,str$(numeroLigne%)
            end_if
                
            numeroLigne% = numeroLigne% + 1

            while index% <> 0
                finChamp% = instr_pos(enregistrement$,separateur$,index%)
                if finChamp% = 0
                    exit_while
                end_if
                champ$ = mid$(enregistrement$,debutChamp%,finchamp% - debutChamp%)
                grid_write 31,ligne%,colonne%,champ$
                champ$ = ""
                colonne% = colonne% + 1
                debutChamp% = finChamp% + 1
                index% = debutChamp%
            end_while
        
            finChamp% = len(enregistrement$) + 1
            champ$ = mid$(enregistrement$,debutChamp%,finchamp% - debutChamp%)
            grid_write 31,ligne%,colonne%,champ$
            index% = 1
            colonne% = 2

            ' Interropmpre le traitement en cours par l'appui sur la touche Echap (ESC)
            if scancode = 27
                null% = message_information_ok("Remplissage du tableau interrompu !")
                exit_for
            end_if
        
            caption 201,str$(ligne%) + " / " + str$(nombreEnregistrements%)
        next ligne%
    end_if

    ' Rendre non visible la fenêtre d'attente
    hide 200
end_sub
' ------------------------------------------------------------------------------
egaliserColonnes:
    ' Rendre non visible la fenêtre à-propos
    hide 50

    ajusterLargeurColonnes()
return
' ------------------------------------------------------------------------------
sub ajusterLargeurColonnes()
    grid_column_width 31,(width(31)-70) / nombreColonnes%
    grid_one_column_width 31,1,40
end_sub
' ------------------------------------------------------------------------------
choixEntetes:
    ' Rendre non visible la fenêtre à-propos
    hide 50

    if text$(25) = " Avec en-têtes"
        titreColonnes% = 1
        if grid_row(31) > 1
            grid_row_fixed 31,1
        end_if    
    else
        if text$(25) = " Sans en-têtes"
            titreColonnes% = 0
            grid_row_fixed 31,0
        else
            return
        end_if
    end_if            

    chargerFichier()
return
' ------------------------------------------------------------------------------
sub interfaceUtilisateur()
    dim_local point%
    
    ' Dimensionner la fenêtre principale
    width 0,width(0) - width_client(0) + 1020
    height 0,height(0) - height_client(0) + 600
    
    ' Centrer la fenêtre principale sur l'écran
    top 0,(screen_y - height(0)) / 2
    left 0,(screen_x - width(0)) / 2
    
    ' Redimensionner la fenêtre principale
    on_resize 0,redim0
    
    ' Légende du bandeau de la fenêtre principale
    caption 0,"PANORAMIC : Visualisation des fichiers CSV"
    
    ' Rendre non visible la fenêtre à-propos
    on_click 0,fermerAPropos
 
    ' EDIT non visible servant de refuge pour le focus
    edit 99
    width 99,1
    height 99,1
    
    creerTitrePrincipal()

    creerBoutonOuvrirFichier()

    creerComboSelectionSeparateur()

    creerZoneAffichageCaracteristiquesfichier()
    
    creerCombochoixEntetes()
    
    creerIconeEgaliserColonnes()

    creerLogoPanoramic()

    creerPictogrammeRedimensionnement()
    
    creerGrid()

    creerFenetreAPropos()
    
    creerFenetrePatientez()
    
    ' Créer boîte de dialogue "Ouvrir fichier"
    open_dialog 100

    ' Créer un filtre pour ne sélectionner que les fichiers CSV
    filter 100,"Fichier CSV|*.csv"
    
    ' Créer un objet non visible DLIST pour charger le fichier CSV
    dlist 102
end_sub
' ------------------------------------------------------------------------------
sub creerTitrePrincipal()
    alpha 1
    font_name 1,"Arial"
    font_size 1,24
    font_color 1,50,50,150
    top 1,15
    caption 1,"Panoramic CSV Reader"
    
    ' Centrer le titre principal horizontalement dans la fenêtre
    left 1,(width_client(0) - text_width(caption$(1),1)) / 2
    
    ' Rendre non visible la fenêtre à-propos
    on_click 1,fermerAPropos
end_sub
' ------------------------------------------------------------------------------
sub creerBoutonOuvrirFichier()
    ' Créer bouton "Charger fichier CSV"
    button_picture 2
    top 2,30
    left 2,40
    width 2,120
    height 2,60
    button_picture_target_is_picture
    width 2,0
    height 2,0
    font_name 2,"Calibri"
    font_size 2,13
    caption 2,"Charger un" + chr$(13) + "fichier CSV"
    on_click 2,ouvrirFichier
end_sub
' ------------------------------------------------------------------------------
sub creerComboSelectionSeparateur()
    ' Créer un objet COMBO pour sélectionner le type de séparateur de champs (séparateur de colonnes)
    combo 3
    width 3,120
    top 3,120
    left 3,40
    item_add 3," Virgule"
    item_add 3," Point-virgule"
    item_add 3," Tabulation"
    item_add 3," Espace"
    text 3," Virgule"
    on_change 3,choixSeparateur

    ' Créer la légende du COMBO 3 (Type de séparateur)
    alpha 4
    top 4,105
    left 4,45
    caption 4,"Séparateur :"
end_sub
' ------------------------------------------------------------------------------
sub creerZoneAffichageCaracteristiquesfichier()
    ' créer légendes des caractéristiques du fichier CSV
    alpha 5
    top 5,70
    font_name 5,"Arial"
    font_size 5,10
    font_bold 5
    caption 5,"Nom du fichier :"
    left 5,420 - text_width(caption$(5),5)
    ' Rendre non visible la fenêtre à-propos
    on_click 5,fermerAPropos

    
    alpha 6
    top 6,91
    font_name 6,"Arial"
    font_size 6,10
    font_bold 6
    caption 6,"Chemin d'accès au fichier :"
    left 6,420 - text_width(caption$(6),6)
    ' Rendre non visible la fenêtre à-propos
    on_click 6,fermerAPropos

    alpha 7
    top 7,112
    font_size 7,10
    font_name 7,"Arial"
    font_bold 7
    caption 7,"Nombre de colonnes :"
    left 7,420 - text_width(caption$(7),7)
    ' Rendre non visible la fenêtre à-propos
    on_click 7,fermerAPropos

    alpha 8
    top 8,133
    font_name 8,"Arial"
    font_size 8,10
    font_bold 8
    caption 8,"Nombre d'enregistrements :"
    left 8,420 - text_width(caption$(8),8)
    ' Rendre non visible la fenêtre à-propos
    on_click 8,fermerAPropos

    alpha 9
    top 9,154
    font_name 9,"Arial"
    font_size 9,10
    font_bold 9
    caption 9,"Taille du fichier :"
    left 9,420 - text_width(caption$(9),9)
    ' Rendre non visible la fenêtre à-propos
    on_click 9,fermerAPropos
    
    ' Créer le champ d'affichage pour le nom du fichier
    alpha 15
    top 15,70
    font_size 15,10
    left 15,425
    ' Rendre non visible la fenêtre à-propos
    on_click 15,fermerAPropos

    ' Créer le champ d'affichage pour le chemin d'accès au fichier
    alpha 16
    top 16,91
    font_size 16,10
    left 16,425
    ' Rendre non visible la fenêtre à-propos
    on_click 16,fermerAPropos

    ' Créer le champ d'affichage pour le nombre de colonnes
    alpha 17
    top 17,112
    font_size 17,10
    left 17,425
    ' Rendre non visible la fenêtre à-propos
    on_click 17,fermerAPropos
    
    ' Créer le champ d'affichage pour le nombre d'enregistrements
    alpha 18
    top 18,133
    font_size 18,10
    left 18,425
    ' Rendre non visible la fenêtre à-propos
    on_click 18,fermerAPropos
    
    ' Créer le champ d'affichage pour la taille du fichier
    alpha 19
    top 19,154
    font_size 19,10
    left 19,425
    ' Rendre non visible la fenêtre à-propos
    on_click 19,fermerAPropos
    
end_sub
' ------------------------------------------------------------------------------
sub creerComboChoixEntetes()
    ' Creer COMBO pour le choix des en-têtes oui / non
    combo 25
    width 25,120
    top 25,160
    left 25,40
    item_add 25," Avec en-têtes"
    item_add 25," Sans en-têtes"
    text 25," Avec en-têtes"
    on_change 25,choixEntetes
end_sub
' ------------------------------------------------------------------------------
sub creerIconeEgaliserColonnes()
    dim_local point%
    
     ' Créer une icône pour lancer l'égalisation des colonnes
    picture 39
    width 39,42
    height 39,42
    top 39,139
    left 39,width_client(0) - 82
    color 39,255,255,255
    2d_target_is 39
    2d_pen_color 0,0,0
    2d_line 0,0,42,0
    2d_line 0,14,42,14
    2d_flood 2,2,200,200,200
    2d_line 17,0,17,15
    2d_line 34,0,34,15
    2d_line 0,0,0,42
    2d_line 2,7,6,3
    2d_line 2,7,6,11
    2d_line 4,7,14,7
    2d_line 15,7,11,3
    2d_line 15,7,11,11
    image 41
    2d_image_copy 41,1,1,17,14
    2d_image_paste 41,18,1
    2d_image_paste 41,35,1
    for point% = 1 to 42 step 2
        2d_point point%,28
    next point%
    for point% = 14 to 41 step 2
        2d_point 17,point%
    next point%
    for point% = 14 to 41 step 2
        2d_point 34,point%
    next point%
    cursor_point 39
    hint 39,"Egaliser la largeur des colonnes"
    on_click 39,egaliserColonnes
end_sub
' ------------------------------------------------------------------------------
sub creerGrid()
    ' créer la grille de visualisation des enregistrements du fichier
    grid 31
    top 31,200
    left 31,20
    width 31,width_client(0) - 40
    height 31,height_client(0) - 220
    grid_column_fixed 31,1
    grid_column 31,12
    grid_row 31,15
    grid_fixed_color 31,200,200,200
    grid_column_sizing_on 31
    nombreColonnes% = grid_column(31)
    ajusterLargeurColonnes()        
    titreColonnes% = 1

    ' Rendre non visible la fenêtre à-propos
    on_click 31,fermerAPropos
end_sub    
' ------------------------------------------------------------------------------
sub creerLogoPanoramic()
    picture 37
    width 37,59
    height 37,59
    top 37,36
    left 37,width_client(0) - 91
    color 37,255,255,255
    2d_target_is 37
    2d_pen_color 255,0,0
    2d_pen_width 3
    2d_circle 29,29,25
    2d_circle 29,29,19
    2d_pen_color 50,50,150
    2d_pen_width 1
    2d_line 20,19,36,19
    2d_point 22,20
    2d_line 32,20,38,20
    2d_line 33,21,39,21
    2d_line 33,22,40,22
    2d_fill_color 50,50,150
    2d_rectangle 23,19,29,39
    2d_rectangle 34,23,40,26
    2d_line 33,26,40,26
    2d_line 33,27,39,27
    2d_line 32,28,38,28
    2d_line 29,29,36,29
    2d_line 22,37,31,37
    2d_line 20,38,33,38
    2d_pen_color 170,170,170
    2d_line 2,58,59,58
    2d_line 58,2,58,59
    cursor_point 37
    hint 37,"A propos"
    on_click 37,aPropos
end_sub
' ------------------------------------------------------------------------------
sub creerPictogrammeRedimensionnement()
    ' Créer un pictogramme dans le coin inférieur droit de la fenêtre
    ' pour indiquer la possibilté de redimensionner la fenêtre proncipale
    picture 35
    width 35,13
    height 35,13
    color 35,240,240,240
    top 35,height_client(0) - 18
    left 35,width_client(0) - 18
    2d_target_is 35
    2d_pen_color 50,50,50
    2d_line 0,0,8,0
    2d_line 0,1,6,1
    2d_line 0,0,0,8
    2d_line 1,0,1,6
    2d_line 12,12,12,4
    2d_line 11,12,11,6
    2d_line 12,12,4,12
    2d_line 12,11,6,11
    2d_line 0,0,12,12
    2d_pen_color 120,120,120
    2d_line 2,1,12,11
    2d_line 1,2,11,12

    ' Rendre non visible la fenêtre à-propos
    on_click 35,fermerAPropos
end_sub
' ------------------------------------------------------------------------------
sub creerFenetreAPropos()
    dim_local i%, j%, y%, x

    create_hide
    panel 50
    width 50,420
    height 50,240
    create_show
    
    ' Centrer le PANEL 50 sur la fenêtre principale
    left 50,(width_client(0) - width(50)) / 2
    top 50,(height_client(0) - height(50)) / 2

    picture 51
    parent 51,50
    width 51,width(50)
    height 51,height(50)
    2d_target_is 51
    on_click 51,fermerAPropos
    
    ' motif de la fenêtre à-propos
    x = 131
    for y% = 96 to 240
        2d_pen_color y%/2,y%/2,y%
        2d_line 0,y%,x,y%
        x = x - 0.5
    next y%  

    2d_pen_color 255,255,255
    2d_pen_width 3
    2d_line 120,120,0,120
    2d_pen_width 3
    2d_line 103,96,31,240
    2d_pen_width 1

    ' bordure de la fenêtre à-propos
    2d_pen_color 240,240,240
    2d_fill_off
    2d_rectangle 0,0,420,240
    2d_pen_color 70,70,70
    2d_line 3,239,420,239
    2d_line 419,239,419,3

    alpha 52
    parent 52,50
    top 52,20
    left 52,32
    color 52,255,255,255
    font_name 52,"Calibri"
    font_size 52,19
    caption 52,"PANORAMIC"
    on_click 52,fermerAPropos
    
    alpha 53
    parent 53,50
    top 53,50
    left 53,30
    color 53,255,255,255
    font_name 53,"Calibri"
    font_size 53,21
    caption 53,"CSV Reader"
    on_click 53,fermerAPropos

    alpha 54
    parent 54,50
    top 54,120
    left 54,150
    color 54,255,255,255
    font_name 54,"Calibri"
    font_size 54,14
    caption 54,"Lecteur de fichiers CSV"
    on_click 54,fermerAPropos
    
    alpha 55
    parent 55,50
    top 55,145
    left 55,150
    color 55,255,255,255
    font_name 55,"Calibri"
    font_size 55,12
    caption 55,"Ecrit par Marc en langage PANORAMIC"
    on_click 55,fermerAPropos
    
    alpha 56
    parent 56,50
    top 56,166
    left 56,150
    color 56,255,255,255
    font_name 56,"Calibri"
    font_size 56,12
    caption 56,"Septembre 2023"
    on_click 56,fermerAPropos

    alpha 57
    parent 57,50
    top 57,215
    left 57,250
    color 57,255,255,255
    font_name 57,"Arial"
    font_size 57,10
    font_color 57,0,0,255
    caption 57,"https://panoramic.1fr1.net/"
    cursor_point 57
    on_click 57,goForumPanoramic
end_sub
' ------------------------------------------------------------------------------
sub creerFenetrePatientez()
    ' Créer fenêtre d'attente
    create_hide
    panel 200
    width 200,350
    height 200,250
    left 200,(width_client(0) - width(200)) / 2
    top 200,(height_client(0) - height(200)) / 2
    color 200,0,0,0
    create_show
    
    alpha 201
    parent 201,200
    font_color 201,255,255,255
    font_size 201,20
    top 201,120
    left 201,90
    
    alpha 202
    parent 202,200
    top 202,220
    left 202,180
    font_color 202,255,255,255
    font_size 202,12
    caption 202,"ESC pour interrompre"
    
    alpha 203
    parent 203,200
    font_size 203,17
    font_color 203,255,255,255
    top 203,40
    left 203,45
    caption 203,"Remplissage du tableau..."
end_sub
' ------------------------------------------------------------------------------
aPropos:
    ' Centrer sur l'écran la fenêtre A Propos
    left 50,(width_client(0) - width(50)) / 2
    top 50,(height_client(0) - height(50)) / 2

    ' rendre visible la fenêtre A Propos
    show 50
return
' ------------------------------------------------------------------------------
fermerAPropos:
    set_focus 99

    ' rendre invisible la fenêtre A Propos
    hide 50
return
' ------------------------------------------------------------------------------
choixSeparateur:
    ' Choix du séparateur de colonnes

    ' Rendre non visible la fenêtre à-propos
    hide 50

    if nomFichierEntrant$ = "_" or nomFichierEntrant$ = ""
        return
    end_if

    set_focus 0

    chargerFichier()
return
' ------------------------------------------------------------------------------
fnc formater$(valeur%)
   ' Formater un nombre avec séparateur de milliers
   dim_local p%, nombre$
  
   nombre$ = str$(valeur%)
   p% = len(nombre$)+1

   while p% > 4
      p% = p% - 3
      nombre$ = insert$(nombre$," ",p%)
   end_while

   result nombre$
end_fnc
' ------------------------------------------------------------------------------
goForumPanoramic:
    execute "https://panoramic.1fr1.net/"
return
' ------------------------------------------------------------------------------
redim0:
    off_resize 0

    ' Centrer le titre dans la fenêtre principale
    left 1,(width_client(0) - text_width(caption$(1),1)) / 2

    ' Redimensionner le GRID en fonction de la taille de la fenêtre principale
    width 31,width_client(0) - 40
    height 31,height_client(0) - 220
 
    ' Replacer l'icône "Egaliser colonnes" lors du redimensionnement de la fenêtre
    left 39,width_client(0) - 82

    ' Replacer l'icône PANORAMIC lors du redimensionnement de la fenêtre
    left 37,width_client(0) - 91

    ' Replacer le pictogramme de redimensionnement de la fenêtre
    top 35,height_client(0) - 18
    left 35,width_client(0) - 18

    on_resize 0,redim0
return
 

Visualisation des fichiers CSV Cvsrea10
Revenir en haut Aller en bas
lechat75

lechat75


Nombre de messages : 72
Age : 71
Localisation : MONTREUIL 93
Date d'inscription : 26/08/2018

Visualisation des fichiers CSV Empty
MessageSujet: Re: Visualisation des fichiers CSV   Visualisation des fichiers CSV EmptyLun 11 Sep 2023 - 16:27

Bonjour à tous !
testé et approuvé !!!!
je vois @marc que tu as travaillé tard
merci pour tout çà
Philippe
Revenir en haut Aller en bas
Contenu sponsorisé





Visualisation des fichiers CSV Empty
MessageSujet: Re: Visualisation des fichiers CSV   Visualisation des fichiers CSV Empty

Revenir en haut Aller en bas
 
Visualisation des fichiers CSV
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» PLM visualisation
» Visualisation vidéo
» Plan graphique
» Visualisation d'une équation. Source inachevé...
» Visualisation des polices de caractères installées

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: PANORAMIC :: Vos sources, vos utilitaires à partager-
Sauter vers: