[Résolu] - Splitter efficacement une chaà®ne

skimpyskimpy Membre
mai 2013 modifié dans API AppKit #1

Bonjour,


 


J'utilise la méthode read de NSInputStream pour lire dans un stream. Cette méhode stocke les données lues dans un buffer de type (uint8_t *).


J'ai besoin de découper cette chaà®ne et je ne sais pas qu'est-ce qui est le plus efficace :


 


1. Convertir le buffer de type uint8_t * en NSString (stringWithCString:encoding) et utiliser la méthode componentsSeparatedByString:@\t


-> Si je ne me trompe pas, ça va allouer une nouvelle chaà®ne (pour le stringWithCString), puis un tableau puis des NSString pour les tronçons identifiées. Ca me semble gourmand ...


 


2. Utiliser une fonction C comme strtok pour splitter la chaà®ne


-> Le problème c'est que lorsqu'il y a 2 \t consécutifs, strtok ne me le signale pas, j'ai l'impression qu'il les "concatène" et de coup ça me fausse l'identification d'un champ.


 


 


Selon vous, qu'est-ce qui serait le plus efficace à  faire dans mon cas ?


 


Merci


 


 


 


 


Réponses

  • mpergandmpergand Membre
    mai 2013 modifié #2

    2. Utiliser une fonction C comme strtok pour splitter la chaà®ne


    -> Le problème c'est que lorsqu'il y a 2 \t consécutifs, strtok ne me le signale pas, j'ai l'impression qu'il les "concatène" et de coup ça me fausse l'identification d'un champ.


     



     


    Ouais bizarre, mais normal apparemment:



     


    A sequence of two or more contiguous delimiter bytes in the parsed string is considered to be a single delimiter. Delimiter bytes at the start or end of the string are ignored. Put another way: the tokens returned by strtok() are always nonempty strings.



     


    Donc, il faut utiliser autre chose (strchr par ex)


     


     


    Sinon perso j'ai pas de problème avec componentsSeparatedByString:


    c'est bien pratique et le fait que cela soit plus gourmand ou pas,  n'a que peu d'importance pour une appli Cocoa me semble-t-il.


  • skimpyskimpy Membre

    Merci. J'ai finalement opté pour le componentsSeparatedByString: qui comme indiqué est bien plus pratique !


Connectez-vous ou Inscrivez-vous pour répondre.