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

GEODATA DAYS 2024

#1 Fri 16 May 2008 12:17

Miss T.
Participant assidu
Lieu: En pleine amazonie...
Date d'inscription: 17 Oct 2005
Messages: 294

Créer deux enregistrements à partir d'un seul selon une colonne

Bonjour à tous,
(Tiens, ça faisais longtemps...)

Je cherche à dupliquer un enregistrement selon le contenu d'une colonne, et à mettre à jour cette colonne selon les deux morceaux de texte.
Pour être plus claire:
J'ai un enregistrement dont la colonne n contient l'info "3.51 x 5.36"
Je voudrais aboutir à 2 enregistrements dont l'info serait respectivement "3.51" et "5.36".

Sélectionner ces enregistrements avec colonne n like "%x%" ==> pas de problème.
Mais dupliquer avec des données différentes?

Si vous avez des suggestions...

Hors ligne

 

#2 Fri 16 May 2008 12:40

Thomas
Participant actif
Lieu: Rennes
Date d'inscription: 5 Sep 2005
Messages: 71

Re: Créer deux enregistrements à partir d'un seul selon une colonne

Bonjour,
Comme toujours, on a surement plus simple, mais j'aime bien bricoler...
Je te propose d'exporter tes données sous Excel pour créer deux colonnes à partir de celle d'origine (fonction "convertir" avec "x" comme séparateur), et de les réimporter via une jointure sql.

Hors ligne

 

#3 Fri 16 May 2008 13:27

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

Re: Créer deux enregistrements à partir d'un seul selon une colonne

Je suppose que les deux colonnes destinées à recevoir les morceaux de la colonne n existent déjà, "debut_n" et "fin_n"
La sélection "toto" des enregistrements concernés en colonne n est faite
On va donc faire deux mises à jour de "toto", par une expression pour la colonne "debut_n" et par une autre expression pour la colonne "fin_n"
La première expression, pour "debut_n": left$(n, instr(1,n,"x")-2)
La seconde, pour "fin_n": right$(n, len(n)-instr(1,n,"x")-1)

Hors ligne

 

#4 Fri 16 May 2008 17:18

xavier29
Participant actif
Lieu: 29170 FOUESNANT
Date d'inscription: 5 Sep 2005
Messages: 142
Site web

Re: Créer deux enregistrements à partir d'un seul selon une colonne

Connaissant Miss T. ou plutôt la complexité des problèmes qu'elle va poser pour notre plus grand plaisir: est-ce que les chiffres ont toujours le même format? "3.51 x 5.36 ? c'est à dire inférieur ou égal à 9 et avec toujours 2 décimales?

sinon je pense qu'il faut adapter la formule de Maurice en detectant le x à l'aide d'une boucle MapBasic
Xavier Germain

PS : je suis en train de me demander si la fonction instr() ne fait pas cela: donc Maurice a encore tout bon!
PS: Eh bien si : InStr(position, string, substring) renvoie la position d'un caractère ou d'une chaine à l'intérieur d'une autre chaine...

Dernière modification par xavier29 (Fri 16 May 2008 17:24)


SARL Géodésie: Cartographie Numérique
2 Résidence de Hent Du
29170 Fouesnant

Hors ligne

 

#5 Fri 16 May 2008 17:24

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

Re: Créer deux enregistrements à partir d'un seul selon une colonne

xavier29 a écrit:

...donc Maurice a encore tout bon!


J'avais tout prévu!! A Miis T. de confirmer... tongue

Hors ligne

 

#6 Fri 16 May 2008 17:52

Miss T.
Participant assidu
Lieu: En pleine amazonie...
Date d'inscription: 17 Oct 2005
Messages: 294

Re: Créer deux enregistrements à partir d'un seul selon une colonne

Connaissant Miss T. ou plutôt la complexité des problèmes qu'elle va poser pour notre plus grand plaisir


Je vois que Maurice et moi ne sommes pas les deux seuls masos du forum... ;-p

A vrai dire, je n'ai pas la table en main et mon collègue est déjà rentré chez lui (non mais j'vous jure...).
Il m'a posé la question et vu que je n'avais jamais fait, je me suis dite que j'allais vous triturer un peu.

Si la formule de Maurice marche, ça aura été trop facile. Arf arf arf!
Je récupère la table et vous tiendrai au jus...

Hors ligne

 

#7 Fri 16 May 2008 18:11

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

Re: Créer deux enregistrements à partir d'un seul selon une colonne

Du coup je relis l'énnoncé: il ne faut pas créer puis remplir deux colonnes à partir d'une .... ça, ma "formule" le fait!
mais bien dupliquer un enregistrement ET laisser dans chaque "doublon" créé une partie de l'attribut original (début pour l'un, fin pour l'autre)...et c'est une autre question!
Vous savez quoi...c'est vendredi !!
On en reparle après le WE tongue
[EDIT] en fait ça devrait être simple si on a créé une colonne receptacle avant de sélectionner "toto". Après on copie-colle tous les éléments dans "toto" (pas sûr qu'on puisse le faire sur une sélection, sinon il faudra enregistrer temporairement "toto"). Ensuite on fait une sélection dans "toto" dédoublé des enregistrements dont RowId est <= à la moitié du total, on met à jour la colonne receptacle avec la formule n°1 puis on inverse la sélection et on met à jour avec la formule n°2
Clair ??
Pas vraiment ?? Alors c'est que c'est vraiment le moment de quitter le taf smile

Hors ligne

 

#8 Fri 16 May 2008 22:17

xavier29
Participant actif
Lieu: 29170 FOUESNANT
Date d'inscription: 5 Sep 2005
Messages: 142
Site web

Re: Créer deux enregistrements à partir d'un seul selon une colonne

Super, Miss T. et Maurice font alliance pour secouer nos neurones!
Bon je crois que je vais relire la question de la dame et les commentaires du monsieur et essayer de revenir avec une solution. (j'aurais mieux fait de me taire dès le début au lieu de faire des commentaires...)
bon week end, mais je sens que je vais regarder le PB avant...
Xavier


SARL Géodésie: Cartographie Numérique
2 Résidence de Hent Du
29170 Fouesnant

Hors ligne

 

#9 Sat 17 May 2008 11:26

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

Re: Créer deux enregistrements à partir d'un seul selon une colonne

Le plus simple (à ce stade du WE smile), la table s'appellant ma_table et la colonne n:
- Browse From ma_table (pour l'afficher)
- Select * from ma_table where instr(1,n," x ")>0 into toto
- dans ma_table (cliquer sur la fenêtre données), copier-coller
     ...la sélection en cours est doublonnée, les doublons ajoutés deviennent selection
- Update selection Set n = right$(n, len(n)-instr(1,n"x")-1)
- Update toto Set n = left$(n, instr(1,n,"x")-2)
- Commit Table ma_table
voili, voilou... tongue

Hors ligne

 

Pied de page des forums

Powered by FluxBB