IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Basic Discussion :

Création de champ mapBasic


Sujet :

Basic

  1. #1
    Membre du Club
    Inscrit en
    Mai 2006
    Messages
    119
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 119
    Points : 52
    Points
    52
    Par défaut Création de champ mapBasic
    bonjour,

    je ne sais pas si je suis au bon endroit pour ce sujet, mais je tente ma chance.

    je suis sur un logiciel de cartographie appelé MapInfo, qui gere a la fois des données graphiques et numériques. mon probleme se pose sur les données numériques. on peut acceder à une fenetre de programmation MapBasic (d'ou mon arrivée ici). les fichiers de programmation créés sont des .MBX


    sur une table, je cherche à créer un nouveau champs, limité à 6 caractères, mais n'en comportant parfois que 5. ce champs serait la concatenation de deux autres champs.

    mon probleme : le premier champs comporte une lettre et un 0 ou bien 2 lettres. mon second champs possede de 1 à 3 chiffres.
    je cherche a rajouter des zéros devant ces chiffres afin d'avoir constamment 1 ou deux lettres et 4 chiffres (en passant par un champs intermédiaire surement). cela ne semble pas possible en sql, mais peut-etre existe-il en basic un moyen de programmer un ajout de zéros en début de champs en fonction du nombre de chiffres déjà présents?

    ex : champs 1 |champs 2 |champ final
    A0|1 |A0001 --> 5 caractères uniquement
    A0|154|A0154
    A0|15 |A0015
    AB|2 |AB0002--> 6 caracteres
    AB|365|AB0365


    je peut retravailler plus facilement le champs 1 en enlevant les zéros supplémentaires, afin de créer un champs intermédiaire de la manière suivante : les chiffres du champs 2 précédés des zéros nécessaires pour avoir toujours 4 chiffres dans mon champs. après quoi je concatene le champs 1 modifié et le champs intermédiaire.

    a noter : il m'est difficile de tout reprendre à la main dans la mesure où j'ai 7 tables de près de 5000 enregistrements chacunes!

    j'espere que je suis claire, mais si ce n'est pas le cas, n'hesitez pas à me demander plus d'indications.

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    123
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 123
    Points : 174
    Points
    174
    Par défaut
    Si je "reformule" ta demande d'après les exemples que tu fournis, tu as 2 entrées champ1 et champ2 et une sortie : final.
    Lorsque champ1 se termine par un zéro, final contient 6 digits.
    Lorsque champ1 ne se termine pas un zéro, final contient 5 digits.

    Je vais te répondre en utilisant des notions élémentaires de Basic :

    Tu déclares 4 variables de type string:
    champ1$
    champ2$
    intermediaire$
    final$

    champ1$ et champ2$ sont tes valeurs d'entrées (lecture dans ta table).
    final$ est ta valeur de sortie.

    intermediaire$ te sert à intercaler le nombre nécessaire de zéros (2,1 ou pas de zéro)

    L'algorithme (qui fonctionne pour tous les exemples que tu as donné) est alors :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    lecture de champ1$
    lecture de champ2$
     
    if len(champ2$)=1 then intermediaire$="00"
    if len(champ2$)=2 then intermediaire$="0"
    if len(champ2$)=0 then intermediaire$=""
    if right$(champ1$,1)<>"0" then intermediaire$="0"+intermediaire$
     
    final$=champ1$+intermediaire$+champ2$
     
    écriture de final$
    len est une fonction Basic qui donne le nombre de caractères d'un string.
    right$ est une autre fonction qui extrait un certain nombre de caractères à droite d'un string (1 caractère dans l'exemple).

    Voici le listing qui teste tes exemples : (il est écrit dans mon Basic)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    dim champ1$,champ2$,intermediaire$,final$
    label calcul
     
    champ1$="A0"
    champ2$="1":gosub calcul
    champ2$="154":gosub calcul
    champ2$="15":gosub calcul
    champ1$="AB"
    champ2$="2":gosub calcul
    champ2$="365":gosub calcul
     
    end
     
    calcul:
    if len(champ2$)=1 then intermediaire$="00"
    if len(champ2$)=2 then intermediaire$="0"
    if len(champ2$)=3 then intermediaire$=""
    if right$(champ1$,1)<>"0" then intermediaire$="0"+intermediaire$
    final$=champ1$+intermediaire$+champ2$
    print final$
    return

  3. #3
    Membre du Club
    Inscrit en
    Mai 2006
    Messages
    119
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 119
    Points : 52
    Points
    52
    Par défaut
    ok merci, j'essaye ça dès que possible, mais ça me semble parfait comme solution! je reviendrais dire si c'est bon dès que j'aurais testé (ce qui ne m'est pas possible tout de suite).


Discussions similaires

  1. Création de champs de fusion word automatique
    Par chichiboof dans le forum Général Conception Web
    Réponses: 2
    Dernier message: 16/10/2006, 13h39
  2. Création de champ dynamique dans un formulaire
    Par alex75 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 13/04/2006, 16h00
  3. Création de champ dans une requete
    Par CCRNP dans le forum Access
    Réponses: 2
    Dernier message: 20/10/2005, 22h15
  4. Création de champs calculé en runtime.
    Par Andry dans le forum Bases de données
    Réponses: 9
    Dernier message: 13/08/2005, 00h04
  5. Création de champs
    Par stailer dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 11/02/2005, 17h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo