|
Débuté par Kael, 25 mai 2004 22:14 - 9 réponses |
| |
| | | |
|
| |
Posté le 25 mai 2004 - 22:14 |
Bonjour ^^
J'ai un petit problème sur des découpages de chaines de caractère, je vous donne un exemple :
ch est une chaine ch = "fonction1(1,2,3).fonction2(1,2.3).fonction3(3.3,1).fonction4"
mon probleme c'est que les chiffres décimaux doivent être mis avec des "." (je ne peux rien y faire pour des raisons qui n'ont pas leur place ici) mais je dois trouver un moyen de stocker chanque fonction avec ses arguments dans des variables. S'il n'y avait pas cette histoire de chiffres décimaux, j'aurais utilisé un simple Extraitchaine...
Précision : le nombre de fonction dans ch n'est pas limité, je peux très bien avoir des cas allant à 7-8 fonctions facile.
L'un de vous a une idée ?
Merci d'avance ^^ |
| |
| |
| | | |
|
| | |
| |
Posté le 26 mai 2004 - 11:55 |
Ton nombre de parametre est t'il constant? Connias tu les nom de fonction à l'avances comme sur ton exemple? (fonction1 et fonction2....)
Mis à part ça une solution s'offre à toi un automate! Cette automate va te permettre de faire une analyse lexicale de ta chaine. (Recherche sur google : automate lex "anlalyse lexicale")
"Kael" <exkael@hotmail.com> a écrit dans le message de news: 40b443e1@news.pcsoft.fr...
Bonjour ^^
J'ai un petit problème sur des découpages de chaines de caractère, je vous donne un exemple :
ch est une chaine ch = "fonction1(1,2,3).fonction2(1,2.3).fonction3(3.3,1).fonction4"
mon probleme c'est que les chiffres décimaux doivent être mis avec des "." (je ne peux rien y faire pour des raisons qui n'ont pas leur place ici)
mais > je dois trouver un moyen de stocker chanque fonction avec ses arguments dans
des variables. S'il n'y avait pas cette histoire de chiffres décimaux, j'aurais
utilisé un simple Extraitchaine...
Précision : le nombre de fonction dans ch n'est pas limité, je peux très bien avoir des cas allant à 7-8 fonctions facile.
L'un de vous a une idée ?
Merci d'avance ^^
|
| |
| |
| | | |
|
| | |
| |
Posté le 26 mai 2004 - 12:08 |
Il faut effectuer des recherches avec l'instruction Position(), de la chaîne "fonction" pour délimiter le nombre de fonction dedans. Il ne faut pas effectuer des recherches sur le séparateur "." car il est aussi utilisé pour les décimaux.
Courage.
"Kael" <exkael@hotmail.com> wrote:
Bonjour ^^
J'ai un petit problème sur des découpages de chaines de caractère, je vous donne un exemple :
ch est une chaine ch = "fonction1(1,2,3).fonction2(1,2.3).fonction3(3.3,1).fonction4"
mon probleme c'est que les chiffres décimaux doivent être mis avec des "." (je ne peux rien y faire pour des raisons qui n'ont pas leur place ici)
mais >je dois trouver un moyen de stocker chanque fonction avec ses arguments dans
des variables. S'il n'y avait pas cette histoire de chiffres décimaux, j'aurais utilisé un simple Extraitchaine...
Précision : le nombre de fonction dans ch n'est pas limité, je peux très bien avoir des cas allant à 7-8 fonctions facile.
L'un de vous a une idée ?
Merci d'avance ^^
|
| |
| |
| | | |
|
| | |
| |
Posté le 26 mai 2004 - 12:49 |
"Kael" <exkael@hotmail.com> wrote:
Bonjour ^^
J'ai un petit problème sur des découpages de chaines de caractère, je vous donne un exemple :
ch est une chaine ch = "fonction1(1,2,3).fonction2(1,2.3).fonction3(3.3,1).fonction4"
mon probleme c'est que les chiffres décimaux doivent être mis avec des "." (je ne peux rien y faire pour des raisons qui n'ont pas leur place ici)
mais >je dois trouver un moyen de stocker chanque fonction avec ses arguments dans
des variables. S'il n'y avait pas cette histoire de chiffres décimaux, j'aurais utilisé un simple Extraitchaine...
Précision : le nombre de fonction dans ch n'est pas limité, je peux très bien avoir des cas allant à 7-8 fonctions facile.
L'un de vous a une idée ?
Merci d'avance ^^
Bonjour,
Si toutes tes fonctions ont des arguments alors tu as pour chacune d'elles une parenthése fermante et, dans ce cas, tu peux faire un ExtraîtChaîne(ch,<rang>,").") par exemple. Dans le cas contraire, recherche la position des "." grace aux fonctions Position ou PositionOccurrence et pour chaque point trouvé, teste si le caractére suivant est un chiffre (code ASCII de 48 à 57) ...
En espérant t'avoir aidé, Eric |
| |
| |
| | | |
|
| | |
| |
Posté le 26 mai 2004 - 14:10 |
Bonjour,
Juste une question stupide :
ch est une chaine ch = "fonction1(1,2,3).fonction2(1,2.3).fonction3(3.3,1).fonction4"
Pourquoi ne pas faire ch = "fonction1(1,2,3)"+TAB+"fonction2(1,2.3)"+TAB+ ....
Après un extraitchaine est facile a utiliser.
Ami Calmant Stéphane
--- Outgoing mail is certified Virus Free. Checked by AVG anti-virus system (http://www.grisoft.com). Version: 6.0.690 / Virus Database: 451 - Release Date: 22/05/2004 |
| |
| |
| | | |
|
| | |
| |
Posté le 26 mai 2004 - 17:16 |
"Eric Descatoire" <ericdescatoire@yahoo.fr> wrote:
"Kael" <exkael@hotmail.com> wrote:
Bonjour ^^
J'ai un petit problème sur des découpages de chaines de caractère, je vous donne un exemple :
ch est une chaine ch = "fonction1(1,2,3).fonction2(1,2.3).fonction3(3.3,1).fonction4"
mon probleme c'est que les chiffres décimaux doivent être mis avec des
"."
(je ne peux rien y faire pour des raisons qui n'ont pas leur place ici) mais je dois trouver un moyen de stocker chanque fonction avec ses arguments dans des variables. S'il n'y avait pas cette histoire de chiffres décimaux, j'aurais
utilisé un simple Extraitchaine...
Précision : le nombre de fonction dans ch n'est pas limité, je peux très bien avoir des cas allant à 7-8 fonctions facile.
L'un de vous a une idée ?
Merci d'avance ^^
Bonjour, Si toutes tes fonctions ont des arguments alors tu as pour chacune d'elles une parenthése fermante et, dans ce cas, tu peux faire un ExtraîtChaîne(ch,<rang>,").") par exemple. Dans le cas contraire, recherche la position des "." grace aux fonctions Position ou PositionOccurrence et pour chaque point trouvé, teste si le caractére
suivant est un chiffre (code ASCII de 48 à 57) ...
En espérant t'avoir aidé, Eric
suite à mon précédent message traîtement pour résoudre ton problème: chExtraite est un tableau de 4 chaînes // stockage des fonctions extraites
// Ajout d'un point à la fin de la chaîne ch ch est une chaîne = "Blop(1,2,3).flac(1,2.3).zoup.test(3.3,1)"+"." np est un entier = 1 // rang du "." dans la chaîne ch nf est un entier = 1 // rang de la fonction dans la chaîne ch pos est un entier = PositionOccurrence(ch,".",np) // position du point de rang np TANTQUE pos <> 0 chExtraite[nf] += ExtraitChaîne(ch,np,".") SI 47 < Asc(ch[[pos+1]]) < 58 ALORS // cas du point décimal chExtraite[nf] += "." SINON // cas du point séparateur de fonction nf++ FIN // rang et position du point suivant np++ pos = PositionOccurrence(ch,".",np) FIN Info(chExtraite[1],chExtraite[2],chExtraite[3],chExtraite[4])
Bon dev, Eric |
| |
| |
| | | |
|
| | |
| |
Posté le 26 mai 2004 - 20:02 |
Merci à tous pour toutes ces réponses (et plus particulièrement à Eric qui a trouvé une solution vraiment excellente). |
| |
| |
| | | |
|
| | |
| |
Posté le 26 mai 2004 - 21:10 |
Bon ben je vais continuer de vous embeter sur un autre probleme ^^ (désolé T_T)
maintenant que j'ai recupéré la n ième fonction que je veux, j'ai codé de quoi la modifier et maintenant il faut que je la réinjecte dans la chaine ch
sachant que je dispose de la fonction d'Eric (on doit pouvoir la réutiliser ou la modifier), de la chaine à infecter, du numéro de la fonction a remplacer.
petit schéma :
fonction1(1,2.5,3).fonction2.fonction3(1.5).fonction4(2.5,1) je récupère fonction3(1.5) et je sais que c'est la 3ieme fonction je la modifie en fonction3(1. il faut la remettre là ou il faut mainteant T_T
Merci d'avance .. ^^! |
| |
| |
| | | |
|
| | |
| |
Posté le 27 mai 2004 - 17:16 |
"Kael" <exKael@hotmail.com> wrote:
Bon ben je vais continuer de vous embeter sur un autre probleme ^^ (désolé T_T) maintenant que j'ai recupéré la n ième fonction que je veux, j'ai codé de quoi la modifier et maintenant il faut que je la réinjecte dans la chaine ch sachant que je dispose de la fonction d'Eric (on doit pouvoir la réutiliser ou la modifier), de la chaine à infecter, du numéro de la fonction a remplacer. petit schéma : fonction1(1,2.5,3).fonction2.fonction3(1.5).fonction4(2.5,1) je récupère fonction3(1.5) et je sais que c'est la 3ieme fonction je la modifie en fonction3(1. il faut la remettre là ou il faut mainteant T_T Merci d'avance .. ^^! Bonjour,
-Si les fonctions de ch sont toutes différentes, il suffit simplement d'utiliser l'instruction Remplace: ch = Remplace(ch,fonction3(1.5),fonction3(1.)
-Dans le cas contraire, j'ai créé un pointeur de position des points qui séparent les fonctions (posChExtraite). Ce qui donne (Lignes ajoutées suivies de <--): chExtraite est un tableau de 4 chaînes // stockage des fonctions extraites
posChExtraite est un tableau de 5 entiers // <-- posChExtraite[1] = 0 // <-- // Ajout d'un point à la fin de la chaîne ch ch est une chaîne = "Blop(1,2,3).flac(1,2.3).zoup.test(3.3,1)"+"." np est un entier = 1 // rang du "." dans la chaîne ch nf est un entier = 1 // rang de la fonction dans la chaîne ch pos est un entier = PositionOccurrence(ch,".",np) // position du point de rang np TANTQUE pos <> 0 chExtraite[nf] += ExtraitChaîne(ch,np,".") SI 47 < Asc(ch[[pos+1]]) < 58 ALORS // cas du point décimal chExtraite[nf] += "." SINON // cas du point séparateur de fonction nf++ posChExtraite[nf] = pos // <-- FIN // rang et position du point suivant np++ pos = PositionOccurrence(ch,".",np) FIN Info(chExtraite[1],chExtraite[2],chExtraite[3],chExtraite[4])
nfr est un entier = 3 // rang de la fonction à remplacer dans ch <-- FonctionModifiée est une chaîne = "#####" // <-- ch = ch[[A posChExtraite[nfr]]]+FonctionModifiée+ch[[posChExtraite[nfr+1] A]] // <-- Info(ch)
Bien sur dans tous les cas, ne pas oublier d'oter le point ajouté à la chaîne ch.
Bon dev, Eric |
| |
| |
| | | |
|
| | |
| |
Posté le 27 mai 2004 - 19:14 |
Merci infiniment |
| |
| |
| | | |
|
| | | | |
| | |
|