éliminer espace entre caractère / avant et après

- - Dernière réponse : sp40
Messages postés
1284
Date d'inscription
mardi 28 octobre 2003
Statut
Contributeur
Dernière intervention
3 juillet 2015
- 3 juil. 2015 à 15:54
Bonjour,

je cherche a éliminer l'espace qui se trouve avant le caracte / et après .

un petit example avec le code cité ci-dessous marche bien :

CHAINE
ABC/DEF/GHK

code
....
....

DATA1 := 'chaine "';
i := Pos(' ', K);
if i>0
then DATA1 := DATA1 + Copy(K, 1, i-1)
else DATA1 := DATA1 + '?';
DATA1 := DATA1 +'"';

......
......


après exécution du code j'aurai ceci :

DATA1:=chaine+"ABC/DEF/GHK"



ma question :

qaund il y a un espace dans le meme example :

CHAINE
ABC / DEF / GHK


j'aurai ceci :

DATA1:=chaine+"ABC


merci pour votre aide et suggestion
Afficher la suite 

8 réponses

Meilleure réponse
1
Merci
salut:

ça marche bien 10000 merci

Dire « Merci » 1

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 205 internautes nous ont dit merci ce mois-ci

Commenter la réponse de dino34
Messages postés
13979
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
17 novembre 2019
319
0
Merci
Bonjour,

C'est pas clair ton titre dit "Éliminer espace entre caractère / avant et après"
Donc quand tu mets
CHAINE
ABC / DEF / GHK
On s'attendrait à ça comme résultat
CHAINE
ABC/DEF/GHK

Si mon interprétation est la bonne alors je pense que ceci va te convenir
http://www.gladir.com/CODER/DELPHI/stringreplace.htm

Sinon, que ton exemple est bien ce que tu recherches, alors regarde du coté des Regex.
Commenter la réponse de Whismeril
Messages postés
1284
Date d'inscription
mardi 28 octobre 2003
Statut
Contributeur
Dernière intervention
3 juillet 2015
11
0
Merci
Salut,

Tu as la fonction Trim qui peut t'aider.
Commenter la réponse de sp40
Messages postés
132
Date d'inscription
mardi 24 décembre 2002
Statut
Membre
Dernière intervention
12 novembre 2019
0
Merci
Salut dino,
vu ta question si j'ai bien compris tu veut supprimer espace/espace
donc :
chaine := StringReplace(chaine, ( ' / ', '/',[]);
si pas bien compris tu veux supprimer tout les espaces
chaine := StringReplace(chaine, ( ' ', '',[]);
Commenter la réponse de cs_eli42
0
Merci
salut, et désolé pour le retard :

j'ai fait la modification suivante dans le code en se basant sur vos

conseils mis en haut mais je reçoit toujours la même portion :

DATA1:=chaine+"ABC

var                                                               
DATA1,K : string;
i:integer;


DATA1 := 'chaine "';
i := Pos(' ', K);
if i>0
then DATA1 := StringReplace(DATA1,' / ','/',[]) + Copy(K, 1, i-1)
else DATA1 := DATA1 + '?';
DATA1 := DATA1 +'"';



2/ j'ai fait aussi le deuxième code

var                                          
DATA1,K : string;
i:integer;


DATA1 := 'chaine "';
i := Pos(' ', K);
if i>0
then DATA1 := DATA1 +Trim( Copy(K, 1, i-1))
else DATA1 := DATA1 + '?';
DATA1 := DATA1 +'"';


le vide avant ( / ) et après me bloque toujours.

je cherche a avoir ceci:

DATA1:=chaine+"ABC/DEF/GHK"

merci .
Commenter la réponse de dino34
Messages postés
132
Date d'inscription
mardi 24 décembre 2002
Statut
Membre
Dernière intervention
12 novembre 2019
0
Merci
Bonjour dino34

- Le StringReplace doit etre fait sur K et non CHAINE
- A la ligne 7 tu cherche POS donc 4eme caractères
donc resultat = chaine="ABC"

Donc ton erreur est a la ligne : i := Pos(' ', K);

Solution tu dois traiter K avant la ligne 7 :
K := StringReplace(K, ' / ', '/', [rfReplaceAll, rfIgnoreCase]);

ou si K ne dois jamais avoir d'espace :

var
DATA1, K: string;
begin
..
..
DATA1 := DATA1 + StringReplace(K, ' ', '', [rfReplaceAll, rfIgnoreCase]) + '"';
..
..
end;

Commenter la réponse de cs_eli42
Messages postés
248
Date d'inscription
lundi 27 octobre 2003
Statut
Membre
Dernière intervention
4 mars 2016
5
0
Merci
Salut,
La fonction trim ne supprime que les espaces et caractère de controle en début et fin de chaine...donc pas ce que tu veux...
Je ne suis pas fan de la fonction StringReplace pour le remplacement d'un caractère...on va vite perdre beaucoup de temps si on a des milliers de ligne à traiter ! sinon il y a AnsiReplaceStr et AnsiReplaceText et encore pas sur qu'on gagne beaucoup de temps...
Du maison serait mieux par exemple :
function DeleteChar(Str: string; Old: Char): string;
var
PS : PByte;
PR : PByte;
begin
SetLength(Result,Length(Str));
PS := @Byte(Str[1]);
PR := @Byte(Result[1]);
while PS^ <> Byte(#0) do
begin
if PS^ = Byte(Old) then
begin
SetLength(Result,Length(Result)-1);
end
else
begin
PR^ := PS^;
Inc(PR, SizeOf(Char));
end;
Inc(PS, SizeOf(Char));
end;
end;

utilisation
Edit1.text := DeleteChar('ABC / DEF / GHI',' ');
//Retourne ABC/DEF/GHI

Et on peut peut-être trouver encore mieux...
@+
Commenter la réponse de cs_yanb
0
Merci
salut CS_yanb:

merci pour votre réponse , j'ai essayé d'implémenté votre suggestion mais j'ai reçu après compilation :

DATA1 := DATA1 + '?';


implementation

{$R *.dfm}
function DeleteChar(Str: string; Old: Char): string;
var
PS : PByte;
PR : PByte;
begin
SetLength(Result,Length(Str));
PS := @Byte(Str[1]);
PR := @Byte(Result[1]);
while PS^ <> Byte(#0) do
begin
if PS^ = Byte(Old) then
begin
SetLength(Result,Length(Result)-1);
end
else
begin
PR^ := PS^;
Inc(PR, SizeOf(Char));
end;
Inc(PS, SizeOf(Char));
end;
end;

procedure TForm1.Button2Click(Sender: TObject);
const
..
var
sl1-entrée, sl2-sortie: TStringList;
..

procedure traitementligne;
..

var
begin
..
..

var
DATA1,K : string;
i:integer;
DATA1 := 'chaine "';
K := DeleteChar(K,' ');
i := Pos(' ', K);
if i>0
then DATA1 + Copy(K, 1, i-1)
else DATA1 := DATA1 + '?';
DATA1 := DATA1 +'"';
..
..



est ce que vous pourriez me diriger ou est l'erreur ?

et merci pour votre support habituel .

merci
sp40
Messages postés
1284
Date d'inscription
mardi 28 octobre 2003
Statut
Contributeur
Dernière intervention
3 juillet 2015
11 -
Dans ton code, que vaut K ???
Où est il initialisé ou valorisé ?
Commenter la réponse de dino34