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

Signaler
-
sp40
Messages postés
1284
Date d'inscription
mardi 28 octobre 2003
Statut
Contributeur
Dernière intervention
3 juillet 2015
-
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

8 réponses

salut:

ça marche bien 10000 merci
Messages postés
14230
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
14 février 2020
343
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.
Messages postés
1284
Date d'inscription
mardi 28 octobre 2003
Statut
Contributeur
Dernière intervention
3 juillet 2015
11
Salut,

Tu as la fonction Trim qui peut t'aider.
Messages postés
132
Date d'inscription
mardi 24 décembre 2002
Statut
Membre
Dernière intervention
12 novembre 2019

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, ( ' ', '',[]);
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 .
Messages postés
132
Date d'inscription
mardi 24 décembre 2002
Statut
Membre
Dernière intervention
12 novembre 2019

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;

Messages postés
250
Date d'inscription
lundi 27 octobre 2003
Statut
Membre
Dernière intervention
2 décembre 2019
5
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...
@+
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é ?