Stocker string en dans tableau

Tank01 Messages postés 106 Date d'inscription lundi 4 août 2003 Statut Membre Dernière intervention 10 novembre 2006 - 18 mai 2006 à 09:44
jlen100 Messages postés 1606 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 25 juillet 2014 - 18 mai 2006 à 22:17
Bonjour, je souhaitais savoir comment stocker une string dans un char

function stock_in_string(maString):string //Je passe ma string à stocker

var sequence_ESC:string; //string de sortie
var MonTableau: array [1..Length(maString)] of char;
begin
for i:=1 to Length(maString) do
begin
MonTableau[i]=i;
end;
result:=sequence_ESC;
end;

Je suis débutant en delphi et cherche une solution à un probleme assez compliqué, mon code vous parais -il bon ?

Merci

Tank
A voir également:

11 réponses

Tank01 Messages postés 106 Date d'inscription lundi 4 août 2003 Statut Membre Dernière intervention 10 novembre 2006
18 mai 2006 à 09:44
Correction je voulais dire, stocker une string dans un tableau de char !
0
jlen100 Messages postés 1606 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 25 juillet 2014 13
18 mai 2006 à 09:54
salut,

un string est déjà un tableau de char


tu peux accéder à chaque caractère par son indice le premier se trouvant à l'indice 1


var maString:string;


maString:='ceci est un test";

maString[1]--->c

maString[2]--->e

maString[3]--->c

maString[4]--->i .............................


si tu veux transferer dans un tableau il te suffit de faire:


  for i:=1 to Length(maString) do

    begin

    MonTableau[i]=maString[i];

    end;


@+

jlen
0
Tank01 Messages postés 106 Date d'inscription lundi 4 août 2003 Statut Membre Dernière intervention 10 novembre 2006
18 mai 2006 à 10:07
D'accord ! lol, donc si je comprend bien, aucun intéret de stocker un string dans un char :d Merci beaucoup !
Mais alors, prenons en exemple;

je possède un string,

je souhaite trouver un caractère spécial,
je fais comme suis:

for i:=1 to Length(string_to_test) do
begin
if string_to_test[i]=char_to_search then Trouve:=True; //test si caractère recherché est trouvé

// ce code fonctionne ,je l'ai testé,

Est il possible dans cette meme boucle de réutiliser le I en cour afin de "continuer" une recherche dans la meme string ( je dis bien continuer, cet a dire partir du caractère trouvé)

style

for i (donc i en cour )to string_to_test[i]=char_to_search

begin

Traitement....

end;

Merci beaucoup pour ton aide !!
0
jlen100 Messages postés 1606 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 25 juillet 2014 13
18 mai 2006 à 10:21
pour chercher un caractère dans une chaine il existe 2 fonction POS  et POSEX

pour Pos qui renvoie la première occurance

function Pos(Substr: string; S: string): Integer;


Description


Dans Delphi, la fonction Pos recherche une sous-chaîne, Substr, à
l'intérieur d'une chaîne S. Substr et S sont des expressions de type
chaîne.


Pos recherche Substr à l'intérieur de S et renvoie une valeur entière
correspondant à l'indice du premier caractère de Substr à l'intérieur
de S. Pos fait la distinction majuscules/minuscules. Si Substr est
introuvable, Pos renvoie zéro.


et pour PosEx qui renvoie l'indice à partir d'une position donnée:

function PosEx(const SubStr, S: string; Offset: Cardinal = 1): Integer;


Description


PosEx renvoie l'indice de SubStr dans S, en commençant la recherche à
Offset. Si Offset a pour valeur 1 (par défaut), PosEx équivaut à Pos.


PosEx renvoie 0 si SubStr n'est pas trouvée, si la valeur d'Offset est
supérieure à la longueur de S, ou si la valeur d'Offset est inférieure
à 1.


tu peux ainsi réutiliser l'indice comme offset pour la recherche suivante


@+

jlen
0

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

Posez votre question
Tank01 Messages postés 106 Date d'inscription lundi 4 août 2003 Statut Membre Dernière intervention 10 novembre 2006
18 mai 2006 à 10:33
Je suis entrain de tester tout cela, je crois que tu est mon sauveur :d:d:
Encore mercii milles fois !!!!

Tank
0
Tank01 Messages postés 106 Date d'inscription lundi 4 août 2003 Statut Membre Dernière intervention 10 novembre 2006
18 mai 2006 à 10:58
Encore une petite questions (toujours simple !! lol)

i=Pos(#27: string; string_to_test: string);//Cherche un ESC
j=PosEx(const #27, string_to_test: string; Offset: Cardinal = i);//cherche un deuxième ESC



Delphi accepterais t-il de construire une string a l'aide des contenus de mes indices récupérés dans Pos et PosEx ?

var NewString; //ma string a construire
i étant un numéro d'index m'ayant trouvé mon caractère(avec POS)
j étant un numéro d'index m'ayant trouvé mon secon caractère. (avec poSEX)
je souhaiterais stocker dans "NewString" ce qu'il y a entre i et J

Prenom l'exemple ou i est à 5 et J à 14, je voudrais stocker dans ma string, les caractères allant de i à j ( soit des indices 5 à 14) !

Encore Merci pour ton aide !

TanK
0
jlen100 Messages postés 1606 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 25 juillet 2014 13
18 mai 2006 à 11:05
utilise un copy:

function Copy(S; Index, Count: Integer): string;


Description


S est une expression de type chaîne ou tableau dynamique. Index et
Count sont des expressions de type entier. Copy renvoie une sous-chaîne
ou un sous-tableau contenant Count caractères ou éléments en partant de
S[Index]. La sous-chaîne ou le sous-tableau est une copie unique
(c'est-à-dire qu'il/elle ne partage pas de mémoire avec S ; même
si les éléments du tableau sont des pointeurs ou des objets, ils ne
sont pas copiés non plus).


Si Index est plus grand que la taille de S, Copy renvoie une chaîne ou un tableau vide.


Si Count indique plus de caractères ou d'éléments de tableau que le
nombre disponible, seuls les caractères ou les éléments compris entre
S[Index] et la fin de S sont renvoyés.

il te suffit de calculer count entre tes 2 indices


@+


jlen
0
Tank01 Messages postés 106 Date d'inscription lundi 4 août 2003 Statut Membre Dernière intervention 10 novembre 2006
18 mai 2006 à 11:21
aaaa d'accord, cette fonction est beaucoup plus simple que l'usine à gaz que j'éssayais de coder ( en passant avec des for imbriqués.....). Cependant j'ai du mal a comprendre l'aide de delphi, pour utiliser la fonction COPY, si j'ai bien compris, elle permet de "Renvoyer une sous-chaîne d'une chaîne ou un segment de tableau dynamique". donc dans mon cas, je possède ma chaine (string_to_test) également i (contenant l'indice de la position de mon caractère recherché ) puis j (contenant l'indice de la positions de mon second caractère recherche) si je souhaite en extraire la chaine entre ses deux indices

ma_chaine_recuperee:=Copy(string_to_read;j,((j-i)-1))


quand penses tu ? (( j-i)-1), le moins 1 est la pour ne pas garder le dernier caractère !
0
jlen100 Messages postés 1606 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 25 juillet 2014 13
18 mai 2006 à 11:28
je pense que cela devrait aller.

pour vérifier si c'est bien ce que u cherches met un memeo sur ta fiche et ce bout de code qui te permettras de visualiser:


Memo.clear

for i:=1 to........

begin

..

..

ma_chaine_recuperee:=Copy(string_to_read;j,((j-i)-1));

Memo1.add(ma_chaine_recuperee);


end;


tu auras ainsi le résultat de l'opération


@+

jlen
0
cs_neko Messages postés 135 Date d'inscription jeudi 14 août 2003 Statut Membre Dernière intervention 12 octobre 2006 1
18 mai 2006 à 22:04
Juste pour préciser que pour transférer une chaine dans un tableau ya quand même vachement plus simple que :

for i:=1 to Length(maString) do

begin

MonTableau[i]=maString[i];

end;

suffit de faire:

System.move(maString, MonTableau, Length(maString));

bouh
0
jlen100 Messages postés 1606 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 25 juillet 2014 13
18 mai 2006 à 22:17
sauf qu'avec ta méthode tu ne tiens pas compte des critères de recherche


@+

jlen
0
Rejoignez-nous