nethacker
Messages postés288Date d'inscriptionmardi 2 mai 2006StatutMembreDernière intervention12 octobre 2011
-
21 sept. 2007 à 19:57
Cirec
Messages postés3833Date d'inscriptionvendredi 23 juillet 2004StatutModérateurDernière intervention18 septembre 2022
-
22 sept. 2007 à 18:11
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 !
Cirec
Messages postés3833Date d'inscriptionvendredi 23 juillet 2004StatutModérateurDernière intervention18 septembre 202250 22 sept. 2007 à 01:29
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;
{
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
Messages postés3833Date d'inscriptionvendredi 23 juillet 2004StatutModérateurDernière intervention18 septembre 202250 22 sept. 2007 à 18:11
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
nethacker
Messages postés288Date d'inscriptionmardi 2 mai 2006StatutMembreDernière intervention12 octobre 2011 22 sept. 2007 à 15:33
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 !