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 Wed 10 May 2006 11:15

valeriemevel
Juste Inscrit !
Date d'inscription: 10 May 2006
Messages: 4

Suppression de caractères dans une chaine

Bonjour,

Est  ce que quelqu'un peut m'indiquer (si c'est possible) comment on supprime un caractère en plein milieu d'une chaine ?

Exemple avant :

350012  AE0013

Après :

35012 AE0013

Suppression d'un zéro dans la chaine


Merci beaucoup aux personnes qui peuvent m'aider.

Valérie

Hors ligne

 

#2 Wed 10 May 2006 12:04

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

Re: Suppression de caractères dans une chaine

Bonjour,
Ca dépend hmm
Si toutes les chaines dans les cellules de la colonne 'truc' sont pareilles à l'exemple, on peut utiliser une formule genre:
left$(truc,3)+right$(truc,9)
Sinon il faut affiner pour éviter les accidents, en jouant sur les autres fonctions texte disponibles (mid$(), instr(), len()...)
L'objectif est de trouver la bonne formule générique qui sera utilisée dans un Table-> Mettre à jour colonne
Bon courage

Hors ligne

 

#3 Wed 10 May 2006 12:06

valeriemevel
Juste Inscrit !
Date d'inscription: 10 May 2006
Messages: 4

Re: Suppression de caractères dans une chaine

Merci beaucoup je vais tenter ça

Hors ligne

 

#4 Wed 10 May 2006 12:18

lagnion
Participant actif
Date d'inscription: 5 Sep 2005
Messages: 64

Re: Suppression de caractères dans une chaine

ça dépend si c'est toujours le caractère dans la même position que tu veux supprimer.
ici, si tu veux supprimer le 1er zéro,dans mettre à jour colonne
left$(champ_a_corriger,instr(1,champ_a_corriger,"0")-1)+right$(champ_a_corriger,len(champ_a_corriger)-instr(1,champ_a_corriger,"0"))



pour 350012 instr(1,champ_a_corriger,"0")vaut 3
donc la partie gauche (left) en gardant 3-1=2 caractères+ la partie droite (right) en prenant la longueur (len) - 3 caractères. Il y aura donc 2+3=5 caractères, et on aura "sauté" le premier 0.

mais attention si il n'y a pas de 0 au milieu, ça enlèvera le premier 0 que ça rencontre (peut-être à la fin!).
Donc tu peux faire ça sur une selection en ne gardant par exemple que les enregistrements qui contiennent un 0 en 4ème caractère

select * from ma_table where instr(1,champ_a_corriger,"0")=3   ou <4... ou ce qui te convient!
et ne mettre à jour la colonne que sur la selection

remarque : pour obtenir directement  012 au lieu de 0012 tu aurais pu faire
right$("000"+str$(champ numerique contenant 12)  ,3)

ça aurait donné 125 si le numero est 125
012 pour 12
001 pour 1


annick lagnion
DDE29

Hors ligne

 

#5 Wed 10 May 2006 12:25

valeriemevel
Juste Inscrit !
Date d'inscription: 10 May 2006
Messages: 4

Re: Suppression de caractères dans une chaine

Merci pour toutes c infos

Hors ligne

 

#6 Thu 10 August 2006 10:36

toulousig
Participant actif
Lieu: Toulouse
Date d'inscription: 5 Sep 2005
Messages: 50

Re: Suppression de caractères dans une chaine

Bonjour,

Moi aussi je rencontre le même genre de problème et je souhaiterai supprimer tous les premiers zéros de ma chaîne :
0001 devient 1
0123 devient 123
0150 devient 150 (pas 15)
0104 devient 104 (pas 14)
Ill y a aussi des cas particuliers :
0001B ou 0150T, et il faut que je garde ce dernier caractère (donc je ne peux pas me contenter de convertir mon champ en entier).

J'ai essayé d'adapter vos solutions mais je me heurte au problème du zéro en fin ou au milieu de ma chaîne.
Si vous avez une idée...

Merci.

Dernière modification par toulousig (Thu 10 August 2006 13:16)

Hors ligne

 

#7 Thu 10 August 2006 16:26

Christophe
Membre
Lieu: Gaillac
Date d'inscription: 23 Jun 2005
Messages: 77

Re: Suppression de caractères dans une chaine

Bonjour,

Table gestion table - modifier structure et passer la colonne en
numérique. Normalement cela fonctionne. Eventuellement tu peux repasser
ensuite repasser en caractère.

Xtof

Hors ligne

 

#8 Fri 11 August 2006 09:10

toulousig
Participant actif
Lieu: Toulouse
Date d'inscription: 5 Sep 2005
Messages: 50

Re: Suppression de caractères dans une chaine

J'ai déjà essayé (avant de poster sur le forum !) mais ça ne marche pas pour les cas où j'ai des caractères en fin de chaîne...

Hors ligne

 

#9 Fri 11 August 2006 15:02

jakesp
Membre
Lieu: Montreal, QC
Date d'inscription: 28 Sep 2005
Messages: 126
Site web

Re: Suppression de caractères dans une chaine

Un petit truc avec la fenêtre mapBasic pour contourner l'absence de "if" et de "boucles" dans cet environnement. Écrire les 3 lignes suivantes

select * from <votre_table> where left$(<la_colonne>,1)="0" into sel
update sel set <la_colonne>=right$(<la_colonne>,len(<la_colonne>)-1)
print tableinfo(sel,8)

Sélectionnez les 3 lignes, laissez le curseur dans cette zone et <enter> tant que le nombre de cas dans "sel" est >0

Hors ligne

 

#10 Fri 11 August 2006 15:19

toulousig
Participant actif
Lieu: Toulouse
Date d'inscription: 5 Sep 2005
Messages: 50

Re: Suppression de caractères dans une chaine

jakesp a écrit:

Un petit truc avec la fenêtre mapBasic pour contourner l'absence de "if" et de "boucles" dans cet environnement. Écrire les 3 lignes suivantes

select * from <votre_table> where left$(<la_colonne>,1)="0" into sel
update sel set <la_colonne>=right$(<la_colonne>,len(<la_colonne>)-1)
print tableinfo(sel,8)

Sélectionnez les 3 lignes, laissez le curseur dans cette zone et <enter> tant que le nombre de cas dans "sel" est >0


certes, mais si je ne m'abuse, cela ne supprime que le premier zéro, mais le problème est qu'il peut y en avoir plusieurs...

Hors ligne

 

#11 Fri 11 August 2006 17:43

Damien BEAUSEIGNEUR
Participant assidu
Lieu: meyzieu
Date d'inscription: 5 Sep 2005
Messages: 425

Re: Suppression de caractères dans une chaine

toulousig a écrit:
jakesp a écrit:

Un petit truc avec la fenêtre mapBasic pour contourner l'absence de "if" et de "boucles" dans cet environnement. Écrire les 3 lignes suivantes

select * from <votre_table> where left$(<la_colonne>,1)="0" into sel
update sel set <la_colonne>=right$(<la_colonne>,len(<la_colonne>)-1)
print tableinfo(sel,8)

Sélectionnez les 3 lignes, laissez le curseur dans cette zone et <enter> tant que le nombre de cas dans "sel" est >0


certes, mais si je ne m'abuse, cela ne supprime que le premier zéro, mais le problème est qu'il peut y en avoir plusieurs...


Certes le code ne supprime qu'un zéro à la foi, mais en lisant le texte tu saurais qu'il suffit de relancer ce code sur la table d'origine pour supprimer le deuxième zéro, encore une foi pour le troisième.

Malheureusement, il reste un seul défaut à la méthode, c'est celui de garder le zéro significatif pour ne pas se retrouver avec "".

Ne connaissant pas les données d'origines, il est difficile d'établir une méthode sûre.
Le défaut précédent peut ne pas exister, dans ce cas aucun problème de taille de chaine, elles peuvent toutes être différentes.

Sinon, il vaut mieux prévoir un moyen de détecter la limite à ne pas atteindre si un nombre de lettres fixe, ou de retrouver les cas ou il faut rajouter zéro.

Cordialement.

Hors ligne

 

#12 Fri 11 August 2006 18:51

jakesp
Membre
Lieu: Montreal, QC
Date d'inscription: 28 Sep 2005
Messages: 126
Site web

Re: Suppression de caractères dans une chaine

je cite

Malheureusement, il reste un seul défaut à la méthode, c'est celui de garder le zéro significatif pour ne pas se retrouver avec "".

Comme la colonne est alpha, on peut alors quand le nombre de cas commençant par 0 est nul, faire

select * from <votre_table> where len(<la_colonne>)=0 into sel
update sel set <la_colonne>="0"

Hors ligne

 

Pied de page des forums

Powered by FluxBB