Nous utilisons des cookies pour vous garantir la meilleure expérience sur notre site. Si vous continuez à utiliser ce dernier, nous considèrerons que vous acceptez l'utilisation des cookies. J'ai compris ! ou En savoir plus !.
banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

Rencontres QGIS 2025

L'appel à participation est ouvert jusqu'au 19 janvier 2025!

#1 Thu 15 April 2010 16:39

Anonyme
Participant actif
Date d'inscription: 1 Jul 2013
Messages: 109

[Mapbasic] Récupérer les valeurs des enregistrements d'une colonne

Bonjour,

Je cherche à récupérer un à un les enregistrements d'une colonne dans le cadre d'une boucle.

J'aimerais que ma boucle balaie tous les enregistrements de la table et s'arrête lorsqu'il n'y en a plus.

J'arrive à faire marcher ma boucle si j'écris moi-même à la main la valeur souhaitée, mais je n'arrive pas à trouver le code me permettant de récupérer cette valeur dans ma colonne. Et si je ne peux faire cela, je ne peux faire ma boucle.

J'ai lu sur plusieurs sites qu'il fallait faire :

Code:

Dim table as string
Dim variable_a_recuperer as string

Fetch First From table
 variable_a_recuperer=table.coln

' opérations avec variable_a_recuperer...

Fetch Next From table

J'ai intégré ce code dans mon code mais je ne peux compiler car Mapbasic ne reconnait pas la commande.

Ci-dessous, mon code :

Code:

Include "C:\Program Files\MapInfo\MapBasic\Mapbasic.def"
Include "C:\Program Files\MapInfo\MapBasic\Menu.def"
Include "C:\Program Files\MapInfo\MapBasic\icons.def"
Include "C:\Program Files\MapInfo\MapBasic\papersize.def"

'Déclarations
'---------------

Declare Sub Main
Declare Sub test

'---------------
Sub Main

    Create Menu "test" as "Lancer la procédure test"
            Calling test
    Alter menu Bar Add "test"

End Sub

'---------------

Sub test

Dim ListeFichiers as string
Dim ListeFichiers2 as string
Dim ListeFichiers3 as string
Dim Enregistrement as string

    ' ouvre le fichier txt contenant la liste des fichiers à traiter => 1 seule colonne "fichier" de type string et de longueur 10
        ListeFichiers = FileOpENDLG ("","","*.txt","OUVRIR LISTE FICHIERS")

    ' récupère le chemin du fichier sans le .txt
        ListeFichiers2 = left$(ListeFichiers,len(ListeFichiers)-4)
 
    ' enregistre le fichier en .tab
        Register Table ListeFichiers TYPE ASCII Delimiter 9 Titles Charset "WindowsLatin1" Into ""& ListeFichiers2 &".TAB" 
        Open Table ""& ListeFichiers2 &".TAB" Interactive

    'récupère le nom de la table à partir du chemin
        ListeFichiers3 = right$(ListeFichiers2,13) 

    ' crée un index sur l'unique colonne fichier de la table et enregistre la table
        Create Index on ListeFichiers3 (fichier)
        Commit Table ListeFichiers3 Interactive
        
    ' va au premier enregistrement de la table ListeFichiers
        Fetch first from ListeFichiers3
            Enregistrement=ListeFichiers3.fichier

    ' commence la boucle
        Do while not EOT(ListeFichiers3)
        
    ' ouvre la table portant le nom de la Nème valeur de la colonne "fichier"
        Register Table "X:\...\" & Enregistrement & ".txt" TYPE ASCII Delimiter 9 Titles Charset "WindowsLatin1" Into "X:\...\" & Enregistrement & ".tab" 
        Open Table "\X:\...\" & Enregistrement & ".tab" Interactive
        
    ' crée les points de la table et l'enregistre dans le dossier Carte
        Set CoordSys Earth Projection 1, 104 
        Create Map For Enregistrement CoordSys Earth Projection 1, 104
        Update Enregistrement set obj = CreatePoint(X,Y)
        Commit Table Enregistrement As "X:\...\"& Enregistrement &".TAB" TYPE NATIVE Charset "WindowsLatin1" Interactive
        Close Table Enregistrement
        Open Table "X:\...\"& Enregistrement &".TAB" Interactive

    ' transforme le champ ID en chaîne de caractère de longueur 7
        Alter Table Enregistrement ( modify ID Char(7)) Interactive
        Commit Table Enregistrement Interactive

    ' ajoute les points sur la couche raster
        Add Map Window FrontWindow()Auto Layer Enregistrement
    
            ' zoom sur les points
        Set Map Window FrontWindow()Zoom Entire Layer Enregistrement

    ' met en page
        Layout
        Position (2,2) Units "cm"
              Width 41.45 Units "cm" Height 29.4 Units "cm" 
        Set CoordSys Layout Units "cm"
        Create Frame (2,2) (39.45,27.4) 
             Pen (1,2,0) 
           Brush (2,16777215,16777215) 
            Title "" & Enregistrement &",...,fra250k_012_011_l_h_nt_v24 Carte"
            FillFrame On

        Set CoordSys Earth Projection 1, 0

        Set Layout ruler off zoom 50 Extents (1, 1)
        
        ' exportation de l'image
        Save Window frontwindow() As "X:\...\" &  Enregistrement  & ".png" Type "PNG" Width 39.45 Units "cm" Height 27.4 Units "cm"  Resolution 96
        
        ' ferme la table et la mise en page pour relancer la boucle        
        Close Window frontwindow()
        Close Table Enregistrement Interactive

        Fetch next from ListeFichiers3
    Loop
End sub

Le problème apparaît à la ligne :

Code:

' va au premier enregistrement de la table ListeFichiers
        Fetch first from ListeFichiers3
            Enregistrement=ListeFichiers3.fichier

Mapbasic ne reconnaît pas le ".".
Si vous aviez une solution ce serait super car je tourne en rond et je ne vois pas mon erreur, surtout que je suis débutante en Mapbasic... !

D'avance merci pour votre aide !

Clementine.

Hors ligne

 

#2 Thu 15 April 2010 17:21

Fabius
Participant actif
Date d'inscription: 19 Mar 2008
Messages: 130

Re: [Mapbasic] Récupérer les valeurs des enregistrements d'une colonne

Salut Clementine,

essaye comme ca : Enregistrement="ListeFichiers3."fichier

Hors ligne

 

#3 Thu 15 April 2010 17:26

Anonyme
Participant actif
Date d'inscription: 1 Jul 2013
Messages: 109

Re: [Mapbasic] Récupérer les valeurs des enregistrements d'une colonne

Merci Fabius de m'avoir répondu mais ça ne marche pas plus...

Hors ligne

 

#4 Thu 15 April 2010 17:46

Spacejo
Membre
Lieu: Nancy
Date d'inscription: 17 Aug 2008
Messages: 2511

Re: [Mapbasic] Récupérer les valeurs des enregistrements d'une colonne

Salut,

Je rebondis sur cela:

Mapbasic ne reconnaît pas le "."


Peut être pas mais --> Chr$(46) code ascii du "."
A essayer
A+
Joël

Dernière modification par Spacejo (Thu 15 April 2010 17:46)

Hors ligne

 

#5 Thu 15 April 2010 18:01

Anonyme
Participant actif
Date d'inscription: 1 Jul 2013
Messages: 109

Re: [Mapbasic] Récupérer les valeurs des enregistrements d'une colonne

Merci pour ta réponse Joël,

mon fichier se compile mais lorsque j'exécute le code, la ligne :

Fetch First from ListeFichiers3
    enregistrement = ListeFichiers3+Chr$(46)+fichier

renvoie littéralement "ListeFichiers.fichier", soit "NomTable.NomColonne", au lieu du premier enregsitrement de ma colonne qui devrait être "R005" (par exemple).

Hors ligne

 

#6 Thu 15 April 2010 18:09

Spacejo
Membre
Lieu: Nancy
Date d'inscription: 17 Aug 2008
Messages: 2511

Re: [Mapbasic] Récupérer les valeurs des enregistrements d'une colonne

OK
ListeFichiers3 et fichier sont des variables en string.
Par contre je ne vois pas de déclaration de ta variable "fichier"
Cette ligne me parait bizarre -->
Create Index on ListeFichiers3 (fichier)  ??
Ce qui est étonnant c'est que pour avoir comme résultat ---> "ListeFichiers3.fichier" la ligne de code aurait du être
comme ceci --> "ListeFichiers3" & Chr$(46) & "fichier"

Dernière modification par Spacejo (Thu 15 April 2010 18:16)

Hors ligne

 

#7 Thu 15 April 2010 18:14

Anonyme
Participant actif
Date d'inscription: 1 Jul 2013
Messages: 109

Re: [Mapbasic] Récupérer les valeurs des enregistrements d'une colonne

Oui alors en fait c'est le nom littéral de ma colonne mais depuis je l'ai remplacé par  :

colonne = ColumnInfo (ListeFichiers3,"COL1",1)

    ' va au premier enregistrement de la table ListeFichiers
        Fetch First from ListeFichiers3
            enregistrement = ListeFichiers3+Chr$(46)+colonne

Ce qui me renvoit le nom de la colonne("fichier").
J'ai déclaré colonne en string.

Hors ligne

 

#8 Fri 16 April 2010 08:34

Patrick PALMIER
Participant actif
Lieu: Lille
Date d'inscription: 18 Jan 2007
Messages: 97

Re: [Mapbasic] Récupérer les valeurs des enregistrements d'une colonne

Bonjour,


Tu dois utiliser des variables Alias qui sont des variables de noms de colonnes

ex: Dim ma_colonne as alias

Ensuite tu affectes à ma_colonne le contenu de ta chaine dans laquelle tu as concaténé le nom de la table et celui de la colonne

Le contenu de ta variable alias te donneras la valeur de l'enregistrement en cours pour la dite colonne
ex: note ma_colonne

Dernière modification par Patrick PALMIER (Fri 16 April 2010 08:34)

Hors ligne

 

#9 Fri 16 April 2010 09:49

Anonyme
Participant actif
Date d'inscription: 1 Jul 2013
Messages: 109

Re: [Mapbasic] Récupérer les valeurs des enregistrements d'une colonne

Bonjour,

merci Patrick, j'avais essayé avec des alias mais sans réussir à faire marcher mon code.
Ton explication est simple et claire et mon code marche alors merci !

Bonne journée à tous.
Clémentine

Hors ligne

 

#10 Fri 16 April 2010 10:03

Cyril Chat
Participant actif
Lieu: Niort
Date d'inscription: 14 Feb 2010
Messages: 90

Re: [Mapbasic] Récupérer les valeurs des enregistrements d'une colonne

Serait il possible de voir ton résultat final!!!

Merci

Hors ligne

 

#11 Fri 16 April 2010 10:30

Anonyme
Participant actif
Date d'inscription: 1 Jul 2013
Messages: 109

Re: [Mapbasic] Récupérer les valeurs des enregistrements d'une colonne

Bien sûr, smile

Code:

Include "C:\Program Files\MapInfo\MapBasic\Mapbasic.def"
Include "C:\Program Files\MapInfo\MapBasic\Menu.def"
Include "C:\Program Files\MapInfo\MapBasic\icons.def"
Include "C:\Program Files\MapInfo\MapBasic\papersize.def"

'Déclarations
'---------------

Declare Sub Main
Declare Sub Test

'---------------
Sub Main

    Create Menu "Test" as "Lancer la procédure Test"
            Calling Test
    Alter menu Bar Add "Test"

End Sub

'---------------

Sub Test

Dim ListeFichiers as string
Dim ListeFichiers2 as string
Dim ListeFichiers3 as string
Dim colonne as string
Dim enregistrement as alias
Dim enregistrement2 as string

    ' ouvre le fichier txt contenant la liste des fichiers à traiter 
        ListeFichiers = FileOpENDLG ("","","*.txt","OUVRIR LISTE FICHIERS")

    ' récupère le chemin du fichier sans le .txt
        ListeFichiers2 = left$(ListeFichiers,len(ListeFichiers)-4)
 
    ' enregistre le fichier en .tab
        Register Table ListeFichiers TYPE ASCII Delimiter 9 Charset "WindowsLatin1" Into ""& ListeFichiers2 &".TAB" 
        Open Table ""& ListeFichiers2 &".TAB" Interactive

    ' récupère le nom de la table à partir du chemin
        ListeFichiers3 = right$(ListeFichiers2,13) 

    ' crée un index sur l'unique colonne de la table et enregistre la table
        Create Index on ListeFichiers3 (COL1)
        Commit Table ListeFichiers3 Interactive

        ' récupère le nom de la colonne de la table
        colonne = ColumnInfo (ListeFichiers3,"COL1",1)

    ' va au premier enregistrement de la table en passant par un alias
        Fetch First from ListeFichiers3
            enregistrement = ListeFichiers3+Chr$(46)+colonne

    ' commence la boucle
        Do while not EOT(ListeFichiers3)
            
    ' ouvre la table portant le nom de la Nème valeur de la colonne 
        Register Table "X:\...\" & enregistrement & ".txt" TYPE ASCII Delimiter 9 Titles Charset "WindowsLatin1" Into "X:\...\" & enregistrement & ".tab" 
        Open Table "X:\...\" & enregistrement & ".tab" Interactive
        
         'repasse l'alias en string pour l'étape création de points
        enregistrement2=enregistrement

    ' crée les points de la table et l'enregistre dans le dossier Carte
        Set CoordSys Earth Projection 1, 104 
        Create Map For enregistrement2 CoordSys Earth Projection 1, 104
        Update enregistrement2 set obj = CreatePoint(X,Y)
        Commit Table enregistrement2 As "X:\...\"& enregistrement2 &".TAB" TYPE NATIVE Charset "WindowsLatin1" Interactive
        Close Table enregistrement2
        Open Table "X:\...\"& enregistrement2 &".TAB" Interactive

    ' transforme le champ ID en chaîne de caractère de longueur 7
        Alter Table enregistrement2 ( modify ID Char(7)) Interactive
        Commit Table enregistrement2 Interactive

    ' ajoute les points sur la couche raster
        Add Map Window FrontWindow()Auto Layer enregistrement2

    ' zoom sur les points
        Set Map Window FrontWindow()Zoom Entire Layer enregistrement2

    ' mise en page
        Layout
        Position (2,2) Units "cm"
              Width 41.45 Units "cm" Height 29.4 Units "cm" 
        Set CoordSys Layout Units "cm"
        Create Frame (2,2) (39.45,27.4) 
             Pen (1,2,0) 
           Brush (2,16777215,16777215) 
            Title "" & enregistrement2 &",...,fra250k_012_011_l_h_nt_v24 Carte"
            FillFrame On

        Set CoordSys Earth Projection 1, 0

        Set Layout ruler off zoom 50 Extents (1, 1)
        
        ' exportation de l'image
        Save Window frontwindow() As "X:\...\" &  enregistrement2  & ".png" Type "PNG" Width 39.45 Units "cm" Height 27.4 Units "cm"  Resolution 96
        
        ' ferme la table et la mise en page pour relancer la boucle jusqu'au dernier enregistrement de la table    
        Close Window frontwindow()
        Close Table enregistrement2 Interactive

        Fetch next from ListeFichiers3
    Loop
    
End sub

Hors ligne

 

Pied de page des forums

Powered by FluxBB