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 Fri 14 September 2007 17:28

Marjo
Juste Inscrit !
Date d'inscription: 14 Sep 2007
Messages: 5

Modification d'un objet texte

J'ai une couverture de txt, mais les noms de lacs sont en minuscule et j'aimerais changer le "l" pour un "L" majuscule.
Qqun sait qu'elle commande map basic utiliser pour remplacer une lettre dans un objet texte. J'ai fait ceci mais ça ne fonctionne pas ))

Include "MAPBASIC.DEF"
Include "MENU.DEF"

declare sub main

dim i as smallint
dim objText as object

sub main

    select obj from test into temp
    fetch first from temp
    objText = temp.obj

        if objectinfo(objText,OBJ_INFO_TEXTSTRING)like "lac %"  then
            objText = "L" + right$(objectinfo(objText,OBJ_INFO_TEXTSTRING),len(objectinfo(objText,OBJ_INFO_TEXTSTRING))-1)
        end if

    for i=1 to (tableinfo(temp,TABLE_INFO_NROWS)-1)
        fetch next from temp
        if objectinfo(toto,OBJ_INFO_TEXTSTRING) like "lac %" then
            objText = "L" + right$(objectinfo(objText,OBJ_INFO_TEXTSTRING),len(objectinfo(objText,OBJ_INFO_TEXTSTRING))-1)
        end if
    next
end sub

merci pour l'aide )))

Hors ligne

 

#2 Fri 14 September 2007 18:06

Cartosig
Participant assidu
Date d'inscription: 16 Oct 2006
Messages: 222

Re: Modification d'un objet texte

La syntaxe n'est pas correcte.
Il faut utiliser Alter Object pour modifier les propriétés d'un objet, car en effet on n'instancie pas une variable objet texte avec un "=" suivi d'une chaine de caratère, mais on fait apel à une fonction qui permet de modifier les propriétés d'un objet.

Récupérez votre chaine de caractère dans une string avec ObjectInfo, modifiez la à votre guise et mettez la dans une variable texte, puis modifier l'objet avec la nouvelle string.

Alter Object objText (OBJ_INFO_TEXTSTRING, new_string)

PS : je n'ai pas lu tout le code en détail il y a peut etre d'autres erreurs.

Dernière modification par Cartosig (Fri 14 September 2007 18:09)

Hors ligne

 

#3 Fri 14 September 2007 18:07

FloDumont
Participant occasionnel
Lieu: Bamako
Date d'inscription: 2 Apr 2007
Messages: 34

Re: Modification d'un objet texte

Bonjour,

Je ne sais pas si j'ai bien compris tout ton problème, mais s'il s'agit tout simplement de  mettre une majuscule à la première lettre des champs de la colonne contenant le nom de tes lacs, va dans le menu déroulant table / mettre à jour cette colonne "nom des lacs" avec la fontion Proper$(nom des lacs). Et ton "l" se transforme en "L". Sauvegarde  ta table et le tour est joué.

J'espère que c'est ce que tu cherchais...

Florence

Hors ligne

 

#4 Wed 19 September 2007 17:46

Marjo
Juste Inscrit !
Date d'inscription: 14 Sep 2007
Messages: 5

Re: Modification d'un objet texte

Merci pour l'info pour Alter Object
Mais j'ai encore un problème
Voici mon  code maintenant :

for i=1 To 6
fetch next from temp
    if objectinfo(objText,OBJ_INFO_TEXTSTRING)like "lac %"  then
           Texte = UCase$(left$(objectinfo(temp.obj,OBJ_INFO_TEXTSTRING),1)) + right$(objectinfo(temp.obj,OBJ_INFO_TEXTSTRING),len(objectinfo...) 

    Alter Object objText
          info OBJ_INFO_TEXTSTRING,Texte

Le problème c'est que la variable texte contient l'information dont j'ai de besoin mais je suis pas capable de la récupérer avec ma variable Object.

Merci pour l'aide.

Hors ligne

 

#5 Wed 19 September 2007 18:01

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

Re: Modification d'un objet texte

Bonjour,
Sans le code en détail, comme le disais Cartosig, difficile de se faire une idée ...
Mais pourquoi du code quand on peut faire ça simplement, comme l'a indiqué FloDumont ??

Hors ligne

 

#6 Wed 19 September 2007 19:30

Marjo
Juste Inscrit !
Date d'inscription: 14 Sep 2007
Messages: 5

Re: Modification d'un objet texte

Parce que ce n'est  pas dans ma table que je veux les changer , mais c'est dans ma couverture texte.

0smile

Hors ligne

 

#7 Wed 19 September 2007 20:20

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

Re: Modification d'un objet texte

Marjo a écrit:

Parce que ce n'est  pas dans ma table que je veux les changer , mais c'est dans ma couverture texte...


C'est quoi une "couverture texte" ?? Des étiquettes ??
Pourtant votre code commence bien par un select, qui ne peut concerner qu'une table
Alors que des étiquettes n'existent que dans un wor
Pourriez vous m'éclairer ??

Hors ligne

 

#8 Wed 19 September 2007 20:38

Marjo
Juste Inscrit !
Date d'inscription: 14 Sep 2007
Messages: 5

Re: Modification d'un objet texte

Oki je me suis mal expliquée.
j'ai une couverture de toponyme de lac, ce ne sont pas des labels affiché à partir d'un champs de ma table, mais bien des objets texte.
J'ai a peu près 35 000 objets texte qui commence par une minuscule et que je veux transformer en majuscule.

Proper$ fonctionne quand je veux le changer dans un champs de ma table, mais pour ce qui est de mes objets ça ne fonctionne pas.

Dans mon code ma variable Texte qui est en string est correct (elle contient le nom du lac en majuscule)
Ce que je ne sais pas c'est comment faire maintenant c'est pour l'appliquer à mon objet.

Jespère que c'est plus clair Osmile

Hors ligne

 

#9 Wed 19 September 2007 23:57

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

Re: Modification d'un objet texte

Ca commence à être clair...
On ne peut pas utiliser Alter Object
Il faut passer par un Update ET un CreateText() (ce qui nécessite de fournir de nouvelles variables)

Code:

Include "MAPBASIC.DEF"
Include "MENU.DEF"
declare sub main
dim i as smallint
dim objText as object
dim Texte as String
dim ancreX,ancreY,angletikett as float
'--------
sub main
'soit la table etikett; je ne passe pas par une sélection
'mais je travaille sur la table originale (ou une copie !!)
for i=1 to (tableinfo(etikett,TAB_INFO_NROWS)) 'attention: pas TABLE_INFO_NROWS comme vous l'écriviez...
  fetch Rec i from etikett
    objText = etikett.obj
    'if objectinfo(objText,OBJ_INFO_TEXTSTRING)like "lac %"  then
       'Texte = UCase$(left$(objectinfo(objText,OBJ_INFO_TEXTSTRING),1)) + right$(objectinfo(objText,OBJ_INFO_TEXTSTRING),len(objectinfo(objText,OBJ_INFO_TEXTSTRING))-1) 
'je saute la condition 'lac' car je n'ai pas de tels noms; j'utilise aussi proper$()
' il faut remettre en circuit cette condition 'lac' pour votre version
' et voir si l'usaage de proper$() vous convient, sinon revenir à votre façon de définir Texte
  Texte = Proper$(objectinfo(objText,OBJ_INFO_TEXTSTRING))
  ancreX=objectgeography(objText,OBJ_GEO_TEXTLINEX)
  ancreY=objectgeography(objText,OBJ_GEO_TEXTLINEY)
  angletikett=objectgeography(objText,OBJ_GEO_TEXTANGLE)
' le update et createtext (5 paramètres) à utiliser
  Update etikett Set obj = CreateText(FrontWindow(), ancreX, ancreY, Texte, angletikett, 0, 0)  Where Rowid=i
    'end if
next
end sub

Hors ligne

 

#10 Sat 22 September 2007 10:46

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

Re: Modification d'un objet texte

Pas de nouvelle = bonne nouvelle ??

Hors ligne

 

#11 Thu 11 October 2007 19:29

Marjo
Juste Inscrit !
Date d'inscription: 14 Sep 2007
Messages: 5

Re: Modification d'un objet texte

Merci beaucoup pour l'information ... tu est mon sauveur
Dsl pour le délai de réponse ))

Hors ligne

 

Pied de page des forums

Powered by FluxBB