Isoler une partie d'une variable AnsiString

Signaler
Messages postés
13
Date d'inscription
dimanche 8 juin 2003
Statut
Membre
Dernière intervention
28 mai 2005
-
Messages postés
114
Date d'inscription
lundi 27 janvier 2003
Statut
Membre
Dernière intervention
5 avril 2012
-
Salut tout le monde ;)

Je voudrais poser une question :)

Vala g fais un bout de code dans une socket pour me connecter à mon ftp favorie... ;)

Cependant, après la connexion, le serveur me renvoie une suite de chiffre avec une phrase comme l'indique la rfc 959 ! ;)

Mais oila je cherche à isoler de mon AnsiString uniquement le code sans la phrase ;)

Alors j'en suis la !

AnsiString Reponse = Socket->ReceiveText();
RichEditAction->Lines->Add(Reponse);

Si quelqu'un voie comment soustirer le code d'un text lorsque le serveur m'affiche dans Reponse 220 ftp.central pour n'avoir plus que 220 ! Bien je suis preneur

Ensuite me restera à faire un traitement par des if, elseif voir case pour tester ce que me renvoie le serveur 220 310 etc en gerer les reponsesà envoyer a celui ci de facon à se loger et uploader un ou plusieurs fichier ;)

D'avance merci ;)

7 réponses

Messages postés
114
Date d'inscription
lundi 27 janvier 2003
Statut
Membre
Dernière intervention
5 avril 2012
1
tout simplement comme avec une chaîne de caratères banale :
Reponse[0] pour accéder au premier caratère...

un exemple de code donnerait :

AnsiString VraieReponse;
int i,j;

for (i=0; i<Reponse.Length;i++)
if (IsNumeric(Reponse[i]))
{
VraieReponse[j]=Reponse[i];
j++;
}

enfin bref...

6co
Messages postés
13
Date d'inscription
dimanche 8 juin 2003
Statut
Membre
Dernière intervention
28 mai 2005

Ok sauf que la boucle est déjacréer..... Et oui c'est ca le Borland y fais presque tout pour nous sauf la bouf et le lit !

Aller je vais donner mon chit bout de code qui va bien ^^

void __fastcall TFormFTP::ClientSocket1Read(TObject *Sender,
TCustomWinSocket *Socket)
{
AnsiString Reponse = Socket->ReceiveText();
RichEditAction->Lines->Add(Reponse);
}

Donc ma boucle est realiser par le socket directement donc g plus qu'a extraire le 220 avec un espace deriere avant un commentaire .....

Et oui ;) mais comment extraire ce code ?

D'avance merci ;)
Messages postés
114
Date d'inscription
lundi 27 janvier 2003
Statut
Membre
Dernière intervention
5 avril 2012
1
je ne vois pas le problème (et je ne vois pas de boucle d'ailleurs)

ajoute mon p'tit bout d'code entre les deux lignes que forment ta fonction et change Add(Reponse) en Add(VraieReponse) et dis moi ce que tu vois...

6co
Messages postés
13
Date d'inscription
dimanche 8 juin 2003
Statut
Membre
Dernière intervention
28 mai 2005

Bah ca marche pas car le code est pas reconu par Borland :(

D'avance merci ;)
Messages postés
114
Date d'inscription
lundi 27 janvier 2003
Statut
Membre
Dernière intervention
5 avril 2012
1
ok j'avais vu un peu simple,
la fonction IsNumeric se trouve dans un header mais je sais plus lequel
voici une petite parade
comme les ansistring me posent quelques soucis, je suis repassé par les char*...
(testée sur CBuilder6)

AnsiString Reponse;
char *szReponse,*szVraieReponse;
int i,j;
j=0;
// Reponse="220 ftp.central"; -> activé pour mon test
szReponse=Reponse.c_str();
for (i=0; i<Reponse.Length();i++)

if (szReponse[i]>='0' && szReponse[i]<='9')
{
szVraieReponse[j]=szReponse[i];
j++;
}
szVraieReponse[j+1]=0;

et je t'assure que szVraieReponse contient 220 en chaîne de caractères...

6co
Messages postés
13
Date d'inscription
dimanche 8 juin 2003
Statut
Membre
Dernière intervention
28 mai 2005

Ca a l'air de marcher mais voila ..... ca me renvoie 22A au lieux de 220 .....

Voila le code que g fais pour tester ;)

void __fastcall TFormFTP::ClientSocket1Read(TObject *Sender,
TCustomWinSocket *Socket)
{
AnsiString Reponse = Socket->ReceiveText();
RichEditAction->Lines->Add(Reponse);

char *szReponse, *szCode;
int i,j;
j = 0;
szReponse = Reponse.c_str();
for (i = 0; i<Reponse.Length(); i++)
if (szReponse[1]>='0' && szReponse[i]<='9')
{
szCode[j] = szReponse[i];
j++;
}
RichEditAction->Lines->Add(szCode);
szCode[j+1]=0;
}

Mais cette fois sous bcb6 effectivement ca me met mon code valide ;)

D'avance merci ;)
Messages postés
114
Date d'inscription
lundi 27 janvier 2003
Statut
Membre
Dernière intervention
5 avril 2012
1
j'imagine que tu as copié-collé ton code,
attention à
if (szReponse[1]>='0' && szReponse[i]<='9')
szReponse[i] et non szReponse[1]
sinon il risque d'y avoir des foirages...

6co