#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
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
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
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
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
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