Pages: 1
- Sujet précédent - [MapBasic 7.8] Prog pour rechercher une valeur et MAJ une colonne - Sujet suivant
#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 )
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é
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
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 )
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
Pages: 1
- Sujet précédent - [MapBasic 7.8] Prog pour rechercher une valeur et MAJ une colonne - Sujet suivant