Isoler une partie d'une variable AnsiString

almisuifre Messages postés 13 Date d'inscription dimanche 8 juin 2003 Statut Membre Dernière intervention 28 mai 2005 - 13 nov. 2004 à 10:24
cs_6co Messages postés 114 Date d'inscription lundi 27 janvier 2003 Statut Membre Dernière intervention 5 avril 2012 - 15 nov. 2004 à 18:28
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

cs_6co Messages postés 114 Date d'inscription lundi 27 janvier 2003 Statut Membre Dernière intervention 5 avril 2012 1
13 nov. 2004 à 11:20
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
0
almisuifre Messages postés 13 Date d'inscription dimanche 8 juin 2003 Statut Membre Dernière intervention 28 mai 2005
13 nov. 2004 à 11:43
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 ;)
0
cs_6co Messages postés 114 Date d'inscription lundi 27 janvier 2003 Statut Membre Dernière intervention 5 avril 2012 1
13 nov. 2004 à 12:07
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
0
almisuifre Messages postés 13 Date d'inscription dimanche 8 juin 2003 Statut Membre Dernière intervention 28 mai 2005
13 nov. 2004 à 12:29
Bah ca marche pas car le code est pas reconu par Borland :(

D'avance merci ;)
0

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

Posez votre question
cs_6co Messages postés 114 Date d'inscription lundi 27 janvier 2003 Statut Membre Dernière intervention 5 avril 2012 1
13 nov. 2004 à 13:15
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
0
almisuifre Messages postés 13 Date d'inscription dimanche 8 juin 2003 Statut Membre Dernière intervention 28 mai 2005
13 nov. 2004 à 13:39
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 ;)
0
cs_6co Messages postés 114 Date d'inscription lundi 27 janvier 2003 Statut Membre Dernière intervention 5 avril 2012 1
15 nov. 2004 à 18:28
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
0
Rejoignez-nous