PDA

Voir la version complète : [MapInfo 7.x] Modifier une donnée dans une colonne



Duval
15/07/2004, 10h57
Bonjour,

Bon, je préviens tout de suite, je veux pas paraîttre ridicule, soyez indulgent. :oops:
En effet, ce que je vais vous demander est vraiment très simple je pense, mais je n'arrive pas à le faire:
ainsi, je souhaiterai remplacer les valeurs par défaut d'une colonne (en l'occurence 0) par 0,53, mais je ne trouve pas l'expression qu'il faut insérer pour mettre à jour la colonne [NB: type flottant].

J'espère que vous pourrez m'aider. Merci d'avance,

Matthias

Olivier
15/07/2004, 11h03
Bon, je préviens tout de suite, je veux pas paraîttre ridicule, soyez indulgent. :oops:

Met la version de MapInfo que tu utilise

Sinon n'existe t-il pas de truc comme rechercher et remplacer??? dans le menu édition par exemple...

Brice
15/07/2004, 11h12
Dans le gestionnaire d'outil, tu fais ajouter outils.
Dans le répertoire Tools de MapInfo, tu as un outil qui s'appelle SRCHREPL.MBX.

Attention cet outil ne fonctionne qu'avec les champs de type chaine de caractère. Il faut donc que tu convertisse ton champ en caractère.

J'espère que cela répondra à ta question.

Duval
15/07/2004, 11h56
En fait, il faut que je conserve le type flottant car je dois réutiliser cette colonne dans un calcul que je fais dans une autre colonne. Aussi, l'outil chercher et remplacer ne peut me servir ici. En fait, est-ce que dans mettre à jour colonne il est possible de réaliser cette opération, et si oui, comment faire ?

Olivier
15/07/2004, 12h34
En fait, il faut que je conserve le type flottant car je dois réutiliser cette colonne dans un calcul que je fais dans une autre colonne. Aussi, l'outil chercher et remplacer ne peut me servir ici.

Sinon tu peux convertir en chaine de caractère, faire tes remplacement puis les reconvertir en flottant?

Pour ta question, je n'ai pas de réponse, désolé!

Duval
15/07/2004, 12h38
Sinon tu peux convertir en chaine de caractère, faire tes remplacement puis les reconvertir en flottant?

Bon, je vais tester ...

[EDIT] Non, ça ne fonctionne pas: lorsque je rebascule ma colonne en flottant, ça me supprime la valeur (0,53) que j'avais rentré et met automatiquement 0.

Brice
15/07/2004, 13h23
Essaye cela (normalement ça marche)

Tu tapes dans ta fenêtre MapBasic

-Cette ligne sélectionne tous les champs ayant pour valeur 0

Select * From matable where Champx = 0 into sel -> Touche entrée

- Mise à jour du champ

Update sel set Champx = 0.53 -> touche entrée

Attention à ne pas utiliser de virgules dans tes chiffres mais le point

Duval
15/07/2004, 13h31
Merci, très utile. C'est vrai que la fenêtre MapBasic, c'est pas trop mon truc. Il faudrait que je m'y penche.

Encore merci, ça me fera gagner énormément de temps.

Séb le dingue
09/03/2012, 12h15
Bonjour,

Je viens demander votre aide car j'ai un soucis avec l'outil "chercher - remplacer" sur MI 9.5.0.
J'ai une table concernant des plantes aquatiques invasives avec un champ "densité" de type caractère (10). Ce champ a été mis à jour par croisement spatial avec une autre table d'origine ESRI importée et convertie dont le champ de jointure est de type Virgule fixe. Le contenu des cellules est donc 0, 1, 2, ou 3 dans mon champ "densité".
J'ai fait passer l'outil "chercher - remplacer" une 1ére fois pour remplacer le 0 par un A, aucun pb.
Je demande maintenant à remplacer les 1, 2 et 3 par T1, T2 et T3. Mais quand je fais la manip il me remplace tout les chiffres par une file de T !

Avec 5500 entrées, j'aimerais éviter la m.à.j. manuelle... Qui aurait une idée svp ? Changer ma structure de champ "densité" par un type flottant puis repasser à du caractère ? Passer en mode MB ou SQL ? Quelle serait alors la commande ?

Merci à vous. ;)

Spacejo
09/03/2012, 15h12
Salut,

Une soluce possible mais un peu bourrin :D (en attendant mieux)
Tu crées un champ Texte pour recevoir tes nouvelles densités.
Puis avec la FMB:

Select * from Ta_Table where Ton_Champs123 like "%1%" and Ton_Champs123 like "%2%" and Ton_Champs123 like "%3%" and Ton_Champs123 like "%0%" into Sel0T1T2T3
Update Sel0T1T2T3 Set TonNouveauChamp = "0, T1, T2, T3"
Select * from Ta_Table where Ton_Champs123 like "%1%" and Ton_Champs123 like "%2%" and Ton_Champs123 like "%3%" and Ton_Champs123 like not "%0%" into SelT1T2T3
Update SelT1T2T3 Set TonNouveauChamp = "T1, T2, T3"
Select * from Ta_Table where Ton_Champs123 like "%1%" and Ton_Champs123 like "%3%" and Ton_Champs123 not like "%2%" and Ton_Champs123 not like "%0%" into SelT1T3
Update SelT1T3 Set TonNouveauChamp = "T1,T3"
Select * from Ta_Table where Ton_Champs123 like "%2%" and Ton_Champs123 like "%3%" and Ton_Champs123 not like "%1%" and Ton_Champs123 not like "%0%" into SelT2T3
Update SelT2T3 Set TonNouveauChamp = "T2, T3"
Select * from Ta_Table where Ton_Champs123 like "%1%" and Ton_Champs123 like not "%2%" and Ton_Champs123 like not "%3%" and Ton_Champs123 not like "%0%" into SelT1
Update SelT1 Set TonNouveauChamp = "T1"
etc....
Tu auras un beau champ Densité tout propre :wink:
A+
Joël

Séb le dingue
12/03/2012, 14h53
Merci pour l'aide; par contre, oui, c'est énorme pour une si petite correction en apparence...

Sinon, quitte à créer un champ 2aire, est-il possible d'imaginer un truc du style créer un champ et le remplir gràce à la "m.à.j. colonne" en mode "expression" avec
"T"+densite, puis repasser une m.à.j. sur ce champ 2aire pour remplacer le TA ou T0 par A ? (en admettant que je ne me heurte pas de nouveau au pb de remplacement de contenu à 2 caractères...)

Spacejo
12/03/2012, 17h22
Oui c'est possible en faisant des tests sur ton champ initial.
Je suis pragmatique :D.
Comme tu dis pour une si petite modif, est t'il utile de développer un code (expression).
Il n'y a pas tant de requête que celà (si tu n'as que A, T1, T2, T3).
Bien évidement si tu as plus de valeurs alors celà vaut la peine.
En SIG il faut être fainéant ;) , c'est un atout :D
A+
Joël

zeus76
13/03/2012, 11h29
Il s'agit de mettre à jour une colone.
s'il s'agit de mettre à jour toute une colone :table mettre à jour colone tu definis la table et pour la colone à mettre à jour tu saisis "0,53" et tu valides.
Mais si c'est une partie de ta table tu devras d'abors les specifier et tu appliques la procedure comme s'il s'agissait de mettre tout à jour.

Séb le dingue
13/03/2012, 13h21
@Spacejo: je vais donc tester ça et j'en donnerai le bilan.

Marc-André
13/03/2012, 14h45
Bonjour,

Utilisez des points de décimales américains, plutôt qu'e des virgules pour faire votre mise à jour en format caractère (0.53 au lieu de 0,53).
En reconvertissant en flottant, MapInfo les interprètera comme des virgules.
Vous aurez ainsi vos 0,53 désirés.

Séb le dingue
16/03/2012, 17h22
Merci pour l'aide; par contre, oui, c'est énorme pour une si petite correction en apparence...

Sinon, quitte à créer un champ 2aire, est-il possible d'imaginer un truc du style créer un champ temporaire et le remplir gràce à la m.à.j. colonne en mode "expression" avec
"T"+densite, puis repasser une m.à.j. sur ce champ 2aire pour remplacer le TA ou T0 par A ? (en admettant que je ne me heurte pas de nouveau au pb de remplacement de contenu à 2 caractères...)

Bon et bien méthode testée, et ça marche. :) Grâce à ce champ intermédiaire, j'ai pu faire toutes mes modifs et mettre mes 5000 et qqs entrées à jour. :wink:

Il reste maintenant à m'expliquer pourquoi l'outil "chercher/remplacer" accepte de travailler sur de la chaine de caractère et pas sur du numérique. :o: Il refuse de remplacer "1" par "T1" mais accepte de remplacer "TA" par "A". :taistoi: