Parser une NSString
UniX
Membre
Salut.
Voilà , j'ai des données qui arrivent sous forme de NSString. Ces données sont morcellées dans la string, avec des virgules pour séparer chaque bout de donnée. Exemple :
Chaque morceau entre virgules représente donc un morceau de la donnée. Mon but est de séparer le tout, pour obtenir :
Quelle est la meilleure façon de s'y prendre ?
J'ai pensé découper les strings X fois avec des NSRange, mais je sais pas si c'est la meilleure façon de faire ...
Voilà , j'ai des données qui arrivent sous forme de NSString. Ces données sont morcellées dans la string, avec des virgules pour séparer chaque bout de donnée. Exemple :
AAAA,12587,F,65874,8954123
Chaque morceau entre virgules représente donc un morceau de la donnée. Mon but est de séparer le tout, pour obtenir :
NSString *toto = AAAA<br />int titi = 12587<br />...
Quelle est la meilleure façon de s'y prendre ?
J'ai pensé découper les strings X fois avec des NSRange, mais je sais pas si c'est la meilleure façon de faire ...
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Pour moi le mieux c'est componentsSeparatedByString: de la classe NSString. Ca va te renvoyer un NSArray, et ensuite tu récupères tes données dans l'ordre Tu peux aussi mettre tes données dans un dictionnaire pour les récupérer plus proprement ensuite, avec dictionaryWithObjects:(NSArray *)objects forKeys:(NSArray *)keys, avec un code du genre : Ceci dit toutes les données dans le dico dans ce cas seront des NSString et il faudra bien que tu récupères leur intValue pour les clés "nombre", "n2" et "n3"...
Ou alors une classe personnalisée qui représente les données que tu veux récupérer, avec un constructeur prennant un NSArray en paramètre...
Le coup du dictionnaire ou de la classe personnalisée, c'est pour être plus propre côté modèle objet si tes données représentent qqch de particulier, pour manipuler des "objets" plus proprement qu'en manupilant leurs composantes séparées... Je ne sais pas ce que représentent ets valeurs de ta chaà®ne à virgules, mais ça peut être utile si elles représentent des valeurs décrivant un objet particulier par exemple, de lui faire une classe dédiée... Après c'est toi qui voit.
Mais effectivement ça a l'air d'être exactement ce dont j'ai besoin .....
C'est un peu le sscanf du C/C++, si tu veux
Le NSScanner sert plus à retrouver un "motif" au sein d'une chaà®ne (par exemple, extraire un numérique logé au sein d'une phrase), plutôt que d'éclater une chaà®ne en sous-chaà®ne (componentsSeparatedByString: de NSString que tu as donné comme solution dans ton 1er post est parfait pour ça).
Un petit exemple d'utilisation de NSScanner ici-même.
.
Y a-t-il un équivalent à scanf (ou fscanf ou sscanf) en Cocoa ?
Bon ok on peut utiliser scanf directement, mais bon, un équivalent en Cocoa-pur, qui fonctionnerait sur dse NSString, genre Enfin qqch dans ce gout là quoi. Une sorte de fonction inverse de la fonction stringWithFormat en somme :P
1) Autant faire une catégorie plutôt qu'une sous-classe
2) Ce qui me gêne de passer par une fonction C genre scanf si jamais on implémente ça nous même, c'est le risque que ça peut engendrer pour les chaà®nes UTF8 ou UTF16 et les caractères spéciaux... Mais bon s'il n'y a que ça, et puisque l'utilisation de scanf se fera sans doute pas sur du texte en japonais...