[Cocoa] Substitution de chaines

Didier Guillion

Membre expert
Club iGen
20 Juillet 2001
3 244
164
62
Toulouse
www.myriad-online.com
Bonjour,

J'en appelle au spécialistes de Cocoa !
J'utilise pour substituer une sous-chaine les m"thodes "componentsSeparatedByString" et "componentsJoinedByString".
Cela fonctionne parfaitement avec tous les langages comme le Francais, le Japonais, le Chinois mais pas le Thai...

Voici ma fonction:

- (NSString *) SubstituteString:(NSString *)source fromTable:(NSString *)tag fromTable:(NSString *)substWith
{
NSArray *listItems;

listItems=[source componentsSeparatedByString:tag];
if(listItems)
source=[listItems componentsJoinedByString:substWith];
return(source);
}

Toute idée est bienvenue...

Cordialement
 
la méthode replaceOccurrencesOfString:withString:eek:ptions:range: de NSMutableString ne te convient pas ?
 
BooBoo a dit:
la méthode replaceOccurrencesOfString:withString:eek:ptions:range: de NSMutableString ne te convient pas ?


Merci de ton aide, je ne connaissait pas cette methode, la fonction devient :
- (NSString *) SubstituteString:(NSString *)source fromTable:(NSString *)tag fromTable:(NSString *)substWith
{
NSMutableString* escaped = [[source mutableCopy] autorelease];

[escaped replaceOccurrencesOfString:tag withString:substWith options:0 range:NSMakeRange(0, [escaped length])];
return [escaped copy];
}

C'est en effet plus élégant. Malheureusement, cela ne resoud pas le probleme avec le Thai...
Le resultat est le meme.

Cordialement
 
Bonjour,
n'y aurait-il pas un probleme avec le type d'encodage de ta chaine en Thai ? Les chaines de caracteres dans les differentes langues sont-elles toutes encodees de la meme manieres ? UTF-8, UTF-16, ... ?
 
ntx a dit:
Bonjour,
n'y aurait-il pas un probleme avec le type d'encodage de ta chaine en Thai ? Les chaines de caracteres dans les differentes langues sont-elles toutes encodees de la meme manieres ? UTF-8, UTF-16, ... ?


C'est fort probable, apparemment le Thai et le Chinois n'ont pas le meme encodage. Je travaille la dessus. Merci de ton aide.

Cordialement
 
Didier Guillion a dit:
Bon, je crois que j'ai trouvé, c'était un probleme de transtypage.
Merci à tous !
Cordialement

si tu as résolu ton problème, peux tu expliquer comment ici ? des fois que qq d'autre ait le même souci !
 
BooBoo a dit:
si tu as résolu ton problème, peux tu expliquer comment ici ? des fois que qq d'autre ait le même souci !

En fait le probleme ne venait pas de la fonction C utilisant Cocoa (bien que l'avoir réécrit avec replaceOccurrencesOfString comme le suggerait Booboo soit plus élégant et je vais donc la laisser comme cela) mais de l'appel de cette fonction via AppleScript.

Ecrire :
set str to call method "SubstituteString:fromTable:fromTable:" with parameters {page_template, the_tag, the_string}

Fonctionne dans la plupart des langages mais pas pour le Thai. Les chaines passées sont par defaut des "string".

J'ai donc écrit:

set str to call method "SubstituteString:fromTable:fromTable:" with parameters {page_template as Unicode text, the_tag as Unicode text, the_string as Unicode text}

En forcant le type en Unicode Text, cela fonctionne.

Cordialement