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 29 May 2008 12:20

parlabas
Participant occasionnel
Date d'inscription: 18 Apr 2008
Messages: 39

[MapBasic 7.8] Prog pour rechercher une valeur et MAJ une colonne

Bonjour à tous,

J'ai une table vecteur de polygone, chaque polygone ayant un code dans la table attributaire. Ce code est en fait des lettres, séparées par des points. Il varie bien évidemment selon le polygone.
exemple : polygone 1 : LL.ZZ.DD
                      "       2 : LL.z.D
                      "       3 : Z.D
                      "       4 : PP.ZZ.d
En fait, chaque élément texte séparé par un point renvoie à un attribue particulier, on a donc un code (LL.ZZ.DD) qui est composé de plusieurs codes (ex pour polygone 1 : code 1 : LL, code 2 : ZZ, etc..), séparés par des points. Désolé si je me répète, mais j'essaye d'être le plus clair possible (et je suis pas sur d'y arriver). Je souhaite "exploser" le code, c'est à dire que l'ordi recherche toute les colonnes dans lesquelles il trouve ZZ par exemple, puis qu'il inscrive dans une nouvelle colonne la valeur ZZ, afin d'avoir un type de code par colonne.
J'ai essayé ça :

.....................................................................................................................................................................................
valeur =matable.colonne_contient_les_codes

        Do case valeur
       
        Case valeur like "%ZZ%"
        Update matable Set macolonneàMAJ = "ZZ"
   
        Case valeur like "%z%"
        Update matable Set macolonneàMAJ = "Z"

        Case valeur like "%z%"
        Update matable Set macolonneàMAJ = "z"

        Case else
        Update matable Set macolonneàMAJ = ""

    End Case

...................................................................................................................................................................................

Ca ne fonctionne pas, il me met à jour "macolonneàMAJ"avec la valeur ZZ dans tout les cas.

Si quelqu'un à une idée, merci beaucoup !!

parlabas

Dernière modification par parlabas (Thu 29 May 2008 12:26)

Hors ligne

 

#2 Thu 29 May 2008 12:40

Maurice
Membre
Lieu: Montpellier
Date d'inscription: 5 Sep 2005
Messages: 5331

Re: [MapBasic 7.8] Prog pour rechercher une valeur et MAJ une colonne

Bonjour
L'opérateur Like n'est pas "case-sensitive": utilisez plutôt la fonction Like()
La commande Update affecte toutes les lignes sauf si elle est suivie d'un Where RowId = xxx
Il faut donc que votre code effectue les màj dans une boucle de i=1 à TableInfo(matable,TAB_INFO_NROWS) et que le Update soit suivi d'un Where RowId = i

nb: il y a une faute de frappe dans votre premier Case valeur like "%z%" -> Case valeur like "%Z%" (majuscule)

Hors ligne

 

#3 Thu 29 May 2008 14:21

parlabas
Participant occasionnel
Date d'inscription: 18 Apr 2008
Messages: 39

Re: [MapBasic 7.8] Prog pour rechercher une valeur et MAJ une colonne

Merci maurice, il y a avait bien une faute de frappe  ! Par contre quelle est la ligne de code pour lui dire i=1 à table info(matable,tab_info_nrows) ?
.................................................................
i=1 to (matable,tab_info_nrows)
............................................................
ne fonctionne pas, "to" est inconnu pour MB.

Et je ne comprend pas ce que tu veux dire quand tu dis que like n'est pas case sensitive, ça veut dire qu'il ne prend pas en compte les différentes possibilités que j'ai introduit dans mon programme ?
En utilisant le fonction like, j'ai rentré la ligne suivante :

...................................................................................................
Case valeur like(string_var, "%EE%", "")
..................................................................................................

Et la, il y a une erreur sur cette ligne, qui dit que MB à trouvé , alors qu'il cherchait )

Voila, je suis rebloqué

Parlabas

Dernière modification par parlabas (Thu 29 May 2008 14:35)

Hors ligne

 

#4 Thu 29 May 2008 14:33

Maurice
Membre
Lieu: Montpellier
Date d'inscription: 5 Sep 2005
Messages: 5331

Re: [MapBasic 7.8] Prog pour rechercher une valeur et MAJ une colonne

Ouh la la...
Faudrait commencer par étudier un peu la programmation, sinon... lire au moins ça...
Case-sensitive veut dire sensible à la casse=distingue majuscule de minuscule
Il ne s'agit pas d'enlever juste les guillemets (!) mais d'adopter la syntaxe de la fonction Like() -> voir l'aide en ligne...
Une boucle ça peut être:
For i=1 To TableInfo(matable,TAB_INFO_NROWS)
....
Next

Hors ligne

 

#5 Thu 29 May 2008 14:49

parlabas
Participant occasionnel
Date d'inscription: 18 Apr 2008
Messages: 39

Re: [MapBasic 7.8] Prog pour rechercher une valeur et MAJ une colonne

C'est bon pour la boucle. Par contre j'ai toujours pas trouvé la solution à mon problème pour la ligne :

Case valeur like(string_var, "%EE%", "")

j'obtient l'erreur : Found [,] while searching [)]

Parlabas

Hors ligne

 

#6 Thu 29 May 2008 15:04

Maurice
Membre
Lieu: Montpellier
Date d'inscription: 5 Sep 2005
Messages: 5331

Re: [MapBasic 7.8] Prog pour rechercher une valeur et MAJ une colonne

Vous êtes allergique à la lecture ?? (ou à l'anglais tongue)
L'aide précise que la fonction Like() renvoie TRUE ou FALSE...
Il faut donc traiter la valeur logique de Like(valeur, "%EE%", "")

Hors ligne

 

#7 Thu 29 May 2008 15:16

parlabas
Participant occasionnel
Date d'inscription: 18 Apr 2008
Messages: 39

Re: [MapBasic 7.8] Prog pour rechercher une valeur et MAJ une colonne

Ooooh, ça ne fonctionne pas non, mon allergie doit être contagieuse et mon ordinateur qui passait malencontreusement par là n'a pas pu résister; En revanche si je laisse dans la parenthèse uniquement (%EE%), je n'ai plus d'erreur. Mais mon programme fonctionne uniquement pour le cas n°1, les autres cas ne sont pas pris en compte. bizarre ...

Hors ligne

 

#8 Thu 29 May 2008 15:24

Maurice
Membre
Lieu: Montpellier
Date d'inscription: 5 Sep 2005
Messages: 5331

Re: [MapBasic 7.8] Prog pour rechercher une valeur et MAJ une colonne

Et ça... (notez que j'ai introduit les points pour distinguer ZZ de Z, sinon... et un Fetch pour pointer sur une ligne)

For i=1 To TableInfo(matable,TAB_INFO_NROWS)
Fetch Rec i From matable
valeur =matable.colonne_contient_les_codes
   If Like(valeur, "%.ZZ.%", "") Then Update matable Set macolonneàMAJ = "ZZ" Where RowId=i
   ElseIf Like(valeur, "%.Z.%", "") Then Update matable Set macolonneàMAJ = "Z" Where RowId=i
   ElseIf Like(valeur, "%.z.%", "") Then Update matable Set macolonneàMAJ = "z" Where RowId=i   
   Else Update matable Set macolonneàMAJ = "" Where RowId=i
   End If
Next

Hors ligne

 

#9 Thu 29 May 2008 16:19

parlabas
Participant occasionnel
Date d'inscription: 18 Apr 2008
Messages: 39

Re: [MapBasic 7.8] Prog pour rechercher une valeur et MAJ une colonne

Merci bien msieur maurice, ce coup ci ça devrai fonctionner. Je ne comprend toujours pas pourquoi la fonction like() ne fonctionne pas avec le "Do case". J'ai encore un petit souci de sub mais je vais bien réussir à le régler.

merci encore, parlabas

Hors ligne

 

#10 Thu 29 May 2008 16:37

parlabas
Participant occasionnel
Date d'inscription: 18 Apr 2008
Messages: 39

Re: [MapBasic 7.8] Prog pour rechercher une valeur et MAJ une colonne

EH ben non, quand ça veut pas, ça veut pas. Le programme s'exécute sans souci mais seul les code du premier if (ZZ) sont mis à jour, pas les autres

Dernière modification par parlabas (Thu 29 May 2008 16:43)

Hors ligne

 

#11 Thu 29 May 2008 17:55

Maurice
Membre
Lieu: Montpellier
Date d'inscription: 5 Sep 2005
Messages: 5331

Re: [MapBasic 7.8] Prog pour rechercher une valeur et MAJ une colonne

Faudrait voir le code, mais effectivement en l'état ça ne teste que ".z." par exemple, ce qui ne tient pas compte d'un "z." au début ou ".z" à la fin
En plus il faut savoir si on peut rencontrer et ZZ et Z et z (ou deux d'entre eux) dans la cellule; supposons que non !!

Dans ce cas, Il suffit de rajouter un point au début et à la fin !!

....début sans changement jusqu'à
valeur =matable.colonne_contient_les_codes
truc="."+valeur+"."
...le reste sans changement (avec les points encadrant !!)


Tout ça s'il n'y a pas de répétition des ZZ,Z,z...

Hors ligne

 

#12 Fri 30 May 2008 08:50

parlabas
Participant occasionnel
Date d'inscription: 18 Apr 2008
Messages: 39

Re: [MapBasic 7.8] Prog pour rechercher une valeur et MAJ une colonne

Oulah, la j'avoue que ça devient ardu pour moi. Effectivement, il n'y a pas de répétition, s'il y a ZZ, il n'est pas possible de trouver Z ou z. Je comprend la logique de pos1 pos2, pour définir "l'espace" de recherche. Mais j'ai plus de mal à comprendre les trucs, même en allant chercher dans la doc, je ne vois pas ce que l'on va trouver en additionant truc 1 tuc 2 et truc 3. Je vais essayer de me dépatouiller. Je m'en vais éclaircir cela !!!

Parlabas

Dernière modification par parlabas (Fri 30 May 2008 08:51)

Hors ligne

 

#13 Fri 30 May 2008 09:24

Maurice
Membre
Lieu: Montpellier
Date d'inscription: 5 Sep 2005
Messages: 5331

Re: [MapBasic 7.8] Prog pour rechercher une valeur et MAJ une colonne

Eh...regardez l'EDIT...tout ce que j'ai mis dans la première fenêtre de code est une bêtise (je vais l'enlever !!)
Il suffit de rajouter un point au début et à la fin de "valeur" pour sortir de l'ambiguité sur la place du "ZZ" cherché
C'est ce que fait la seconde fenêtre code

Hors ligne

 

#14 Fri 30 May 2008 10:38

parlabas
Participant occasionnel
Date d'inscription: 18 Apr 2008
Messages: 39

Re: [MapBasic 7.8] Prog pour rechercher une valeur et MAJ une colonne

Bonjour Maurice, la nuit fut bonne ? Malheureusement, il me faut revenir à mes moutons :

Le programme s'exécute sans problème, mais il ne trouve aucun des caractères recherchés. J'ai remplacé

Maurice a écrit:

Else Update matable Set macolonneàMAJ = "" Where RowId=i


par

Else Update matable set macolonneàMAJ = "rien" where Rowid =i


Toutes les cellules de macolonneàMAJ sont alors remplies avec "rien". Ca veut donc dire qu'il recherche bien les caractères mais sans les trouver.

Pourtant je ne vois pas quoi faire d'autre ...

Hors ligne

 

#15 Fri 30 May 2008 11:03

Maurice
Membre
Lieu: Montpellier
Date d'inscription: 5 Sep 2005
Messages: 5331

Re: [MapBasic 7.8] Prog pour rechercher une valeur et MAJ une colonne

Testez après valeur =matable.colonne_contient_les_codes, par un print valeur, ce que le programme trouve (a priori rien ...)
Avez vous mis un Fetch
Comment est définie la variable colonne_contient_les_code ? C'est un nom de colonne, elle devrait être définie en Alias
On en reparle après le WE, là je suis out ....

ps: c'est un truc du genre
dim machin as Alias
machin_alias=matable+".nom_colonne_contient_les_codes"
For i=1 To...
Fetch Rec i From matable
valeur=machin_alias
print valeur 'pour tester

Hors ligne

 

#16 Fri 30 May 2008 11:08

parlabas
Participant occasionnel
Date d'inscription: 18 Apr 2008
Messages: 39

Re: [MapBasic 7.8] Prog pour rechercher une valeur et MAJ une colonne

ok, bon week end et d'ores et déjà merci pour les conseils.

Hors ligne

 

#17 Fri 30 May 2008 11:13

Maurice
Membre
Lieu: Montpellier
Date d'inscription: 5 Sep 2005
Messages: 5331

Re: [MapBasic 7.8] Prog pour rechercher une valeur et MAJ une colonne

regardez le ps de mon dernier post ...

Hors ligne

 

#18 Fri 30 May 2008 11:58

parlabas
Participant occasionnel
Date d'inscription: 18 Apr 2008
Messages: 39

Re: [MapBasic 7.8] Prog pour rechercher une valeur et MAJ une colonne

Effectivement, il ne trouve pas la colonne dans laquelle sont les codes. Le print n'affiche rien du tout. J'ai pourtant mis un fetch et défini ma colonne en alias. Je ne dois pas avoir spécifié correctement le type de colonne. Je met en fichier joins mon programme ou :
Contraintes_principales_....  = matable
erosion = macolonneàMAJ
CONTRAIN = colonne_contient_les_codes

Ce surement plus facile à comprendre qu'en parlant de "machin". Je vais continuer mes recherches, bon week end !!

Parlabas


Fichier(s) joint(s) :
Pour accéder aux fichiers vous devez vous inscrire.

Hors ligne

 

#19 Fri 30 May 2008 13:03

Maurice
Membre
Lieu: Montpellier
Date d'inscription: 5 Sep 2005
Messages: 5331

Re: [MapBasic 7.8] Prog pour rechercher une valeur et MAJ une colonne

Dernier effort, le code corrigé (dans l'ordre, avec une syntaxe correcte de If..ElseIf..Else sad)

Include "mapbasic.def"
Declare sub main
Dim i, Nenr as integer
Dim valeur, Code  as string
Dim col_alias as Alias
----------
Sub main
Nenr = tableInfo(Contraintes_principales_Sol_84,tab_info_nrows)
col_alias=Contraintes_principales_Sol_84+"."+CONTRAIN
   For i=1 to Nenr
      Fetch Rec i from Contraintes_principales_Sol_84
      valeur=col_alias print valeur
      Code="."+valeur+"."
        If Like(Code,"%.EE.%","") then Update Contraintes_principales_Sol_84 set Erosion ="EE" where rowid=i
        ElseIf Like(Code,"%.E.%","") then Update Contraintes_principales_Sol_84 set Erosion ="E" where rowid=i
        ElseIf Like(Code,"%.e.%","") then Update Contraintes_principales_Sol_84 set Erosion ="e" where rowid=i
        Else Update Contraintes_principales_Sol_84 set Erosion ="0" where rowid=i
        End if
    Next
End sub

Hors ligne

 

#20 Sat 31 May 2008 10:21

parlabas
Participant occasionnel
Date d'inscription: 18 Apr 2008
Messages: 39

Re: [MapBasic 7.8] Prog pour rechercher une valeur et MAJ une colonne

Comme souvent, la dernière tentative était la bonne !! Le programme fonctionne très bien et me tri correctement mes e, EE, ou encore E. Merci beaucoup. Je vais me pencher sur ces histoires d'alias que je ne connaissais pas. Et ce coup ci, définitivement bon week end !!

Hors ligne

 

Pied de page des forums

Powered by FluxBB