Pages: 1
- Sujet précédent - [Mapbasic] Récupérer les valeurs des enregistrements d'une colonne - Sujet suivant
#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,
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
Pages: 1
- Sujet précédent - [Mapbasic] Récupérer les valeurs des enregistrements d'une colonne - Sujet suivant