Envoyer variable

Résolu
Signaler
Messages postés
288
Date d'inscription
mardi 2 mai 2006
Statut
Membre
Dernière intervention
12 octobre 2011
-
Messages postés
3826
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
10 mai 2021
-
bonsoir,
mon programme consiste à envoyer un texte variable, enfin pas tout le texte variable mais juste une partie qui change, et en fait c'est un programme qui eteint à distance l'ordi avec un commentaire et une durée !
donc le texte envoyé ca sera ca :
arreter>durée>commentaire

et le serveur en recevant ce texte doit distinguer la durée du commentaire ^^
voila merci d'avance !

4 réponses

Messages postés
3826
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
10 mai 2021
46
Salut,

Ceci devrait te convenir ...

Deux fonctions qui permettent de récuperer la partie gauche et la partie droite
d'un texte délimité par un caractère
<hr size= "2" width="100%" /> [ Code ]
<hr size ="2" width= "100%" />
{
Function GetStrScan(Const aStr : String; Ch : Char): String;
Renvoie la partie gauche d'une chaine "aStr" délimitée par un caractère "Ch"
}
Function GetStrScan(Const aStr : String; Ch : Char): String;
Var P1, P2 : PByte;
    Len    : Integer;
Begin
  SetLength(Result, Length(aStr));
  P1 : = PByte(aStr);
  P2 := PByte(Result);
  Len := 0;
  While (P1^ <> $0) And (P1^ <> Ord(Ch)) Do  Begin
    P2^ : = P1^;
    Inc(P1);
    Inc(P2);
    Inc(Len);
  End;
  If Len <> Length(aStr) Then
    SetLength(Result, Len);
End;

{
Function GetStrRScan(Const aStr : String; Ch : Char): String;
Renvoie la partie droite d'une chaine "aStr" délimitée par un caractère "Ch"
}
Function GetStrRScan(Const aStr : String; Ch : Char): String;
Var P1, P2 : PByte;
    Len    : Integer;
    FndChr : Boolean;
Begin
  SetLength(Result, Length(aStr));
  P1 := PByte(aStr);
  P2 := PByte(Result);
  Len := 0;
  FndChr := False;
  While P1^ <> $0 Do  Begin
    If P1^ = Ord(Ch) Then  Begin
      FndChr := True;
      Inc(P1);
      Continue;
    End ;
    If  FndChr Then  Begin
      P2^ : = P1^;
      Inc(P2);
      Inc(Len);
    End;
    Inc(P1);
  End;
  If Len <> Length(aStr) Then
    SetLength(Result, Len);
End;

<hr size= "2" width="100%" /> [ Utilisation ]
<hr size ="2" width= "100%" />

{
 Exemple d'utilisation de GetStrScan et GetStrRScan
}
procedure TForm1.Button1Click(Sender: TObject);
Const
  aStr = '5.00@l''ordinateur va s''éteindre dans : ';
begin
  {Récupère ce qui ce trouve à droite de "@"}
  Label1.Caption : = GetStrRScan(aStr, '@');
 {Récupère ce qui ce trouve à gauche de "@"}
  Label2.Caption := GetStrScan(aStr, '@');
end ;

 
@+
Cirec

<hr size ="2" />
Messages postés
3826
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
10 mai 2021
46
Tu ne peux avoir cette erreur que si tu essayes
de passer au paramètre Ch autre chose qu'un Type Char !!!!

Sinon il n'y a aucun problème
" Ceci est un éclairage rapide mais si tu as ce genre de soucis  je te conseil
de revoir les bases ... tu as du sauter un truc "

Un Char est un caractère
Var Ch : Char;Ch :'@';    Ch := #64;  <-- Fonctionne
Ch := '5.00@'  <-- Erreur  Ch ne peut contenir qu'un seul caractère
Label2.Caption := GetStrScan(aStr, '@');  <-- Fonctionne

ici '@' est automatiquement " transtypé " en Char par le compilateur
Et
Label2.Caption : = GetStrScan(aStr, Ch);   <-- Fonctionne

Un String est une suite de X caractères
Var Sa, Sb : String;Sa : '@';   =  Sa := #64;  Ici Sa ne contient qu'un seul cacartèremais n'est pas un Char pour autant

Sb := '5.00';             Ici Sb contient 4 caractèresSb :Sb + #64           on en ajoute 1 (4 + 1 5 )

Label2.Caption : = GetStrScan(aStr, Sa);  Erreur Type incompatible  String et Char


Pour utiliser une variable de Type String dans les deux procedures (GetStrScan & GetStrRScan)
Il faut acceder au caractère qui nous interesse ...

Solution:
Accède au premier caractère de Sa 
Label2.Caption := GetStrScan(aStr, Sa[1]);    <-- Fonctionne
Et
Accède au 5 ° caractère de Sb
Label2.Caption : = GetStrScan(aStr, Sb[5]);    <-- Fonctionne

@+
Cirec

<hr siz="" />
Messages postés
288
Date d'inscription
mardi 2 mai 2006
Statut
Membre
Dernière intervention
12 octobre 2011

je vous remercie beaucoup !
Messages postés
288
Date d'inscription
mardi 2 mai 2006
Statut
Membre
Dernière intervention
12 octobre 2011

y'a un problème de types ^^

<hr size= "2" width="100%" /> Function GetStrScan(Const aStr : String; Ch : Char): String;
<hr size ="2" width="100%" />Label2.Caption := GetStrScan(aStr, '@');
<hr size="2" width="100%" />donc @ est un string alors qu'on doit entrer un Char !
comment convertir le String en Char pour être traité, puis reconvertir en string !