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

dino34 - 14 juin 2015 à 19:50
sp40 Messages postés 1276 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

8 réponses

salut:

ça marche bien 10000 merci
1
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 656
14 juin 2015 à 21:20
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.
0
sp40 Messages postés 1276 Date d'inscription mardi 28 octobre 2003 Statut Contributeur Dernière intervention 3 juillet 2015 15
16 juin 2015 à 09:55
Salut,

Tu as la fonction Trim qui peut t'aider.
0
cs_eli42 Messages postés 143 Date d'inscription mardi 24 décembre 2002 Statut Membre Dernière intervention 11 juillet 2023 1
18 juin 2015 à 21:26
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, ( ' ', '',[]);
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
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 .
0
cs_eli42 Messages postés 143 Date d'inscription mardi 24 décembre 2002 Statut Membre Dernière intervention 11 juillet 2023 1
20 juin 2015 à 06:41
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;

0
cs_yanb Messages postés 271 Date d'inscription lundi 27 octobre 2003 Statut Membre Dernière intervention 7 juillet 2022 14
Modifié par cs_yanb le 22/06/2015 à 15:23
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...
@+
0
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
0
sp40 Messages postés 1276 Date d'inscription mardi 28 octobre 2003 Statut Contributeur Dernière intervention 3 juillet 2015 15
3 juil. 2015 à 15:54
Dans ton code, que vaut K ???
Où est il initialisé ou valorisé ?
0
Rejoignez-nous