Accueil > Forum > > > > strtok - probleme d'encapsulation?
strtok - probleme d'encapsulation?
mercredi 23 juillet 2008 à 17:56:17 |
strtok - probleme d'encapsulation?

Chris8412
|
Bonjour a toutes et a tous!
Voici mon premiere message sur votre forum. Avant de poser ma question, félicitations et merci a tous pour cette source d'infos gigantesque qu'est cppfrance! Ca fait environ un mois que je le parcours tous les jours pour trouver des solutions a mes problemes et apprendre le C++ ....
Malgres tout, j'ai un probleme et je n'ai pas trouvé comment le résoudre, ou du moins pas encore, mais apres un gros mal de tete, me suis dis que peut-etre vous pourriez éclairer la lanterne d'un tout jeune programmeur en C++.
Voila, j'utilise strtok pour trouver des chaines de caracteres dans un fichier que j'ouvre au préalable. Ce fichier ressemble a ceci :
toto titi tata tutu toto2 titi2 tata2 tutu2 ...
chacune des chaines de caracteres est séparée par une tabulation et chaque ligne par un retour a la ligne... rien d'extraordinaire.
J'ai testé strtok sur une ligne, cela marche nickel. J'ai testé sur une colonne, cela marche nickel. Mais quand je mixe els 2 cela ne marche pas....
Voici mon bout de code :
char *p1, *p2; char *input = Buffer; p1 = strtok (input,"\r\n"); while (p1 != NULL) { TListItem *pItem = ListViewText->Items->Add(); p2 = strtok(p1, "\t"); while (p2 != NULL) { pItem->SubItems->Add (p2); p2 = strtok (NULL, "\t"); } p1 = strtok(NULL,"\r\n"); } En fait lorsque j'execute la ligne p2 = strtok(p1, "\t"); p1 qui jusque la contenait bien ma ligne en entier, passe subitement a la valeur de p2 ... soit le premier élement de ma ligne.
Quelqu'un aurait-il une idée sur la question?
PS : si jamais la réponse existe déja et que je ne l'ai tout simplement pas trouve sur le forum, je m'en excuse ...
Merci beaucoup  Chris
|
|
mercredi 23 juillet 2008 à 21:20:15 |
Re : strtok - probleme d'encapsulation?

Lucky92
|
Bonsoir,
une des possibilités pour résoudre ton problème est d'utiliser du vrai C++ standard ( en effet strtok c'est une fonction C ).
#include <fstream> #include <iostream> #include <sstream> using namespace std; ... ifstream file( "input.txt" ) ; string line ; while ( getline( file , line ) ) { TListItem *pItem = ListViewText->Items->Add(); istringstream iss( line ); string word ; while ( iss >> word ) { pItem->SubItems->Add( word.c_str() ); } } ...
Personnellement, je trouve que la résolution de ce type de problème est nettement plus simple en C++ standard. Désolé si je ne répond pas vraiment à ta question... j'ai essayé de débugger ton programme, mais finalement, c'est plus rapide d'écrire le code ci-dessus que de se replonger dans la doc de strtok.
|
|
jeudi 24 juillet 2008 à 09:31:32 |
Re : strtok - probleme d'encapsulation?

Liverion
|
Réponse acceptée !
Il me semble que c'est indiqué dans la doc du strtok , mais voila l'explication : strtok modifie la chaine qu'on lui passe en entrée, tout le temps. Il te suffit donc d'utiliser une variable temporaire dans laquelle tu stockerais la valeur de ton p1 : char *p1, *p2,*tmp; char *input = Buffer; p1 = strtok (input,"\r\n"); while (p1 != NULL) { TListItem *pItem = ListViewText->Items->Add(); *tmp1 = *p1; p2 = strtok(tmp1, "\t"); while (p2 != NULL) { pItem->SubItems->Add (p2); p2 = strtok (NULL, "\t"); } p1 = strtok(NULL,"\r\n"); } ~~ Les trois lois de Codes-Sources : Loi 1) Tu lis et respectes le reglement Loi 2) Tu penses à valider si une reponse apportée à ton problème t'a aidé Loi 3) Si tu ne respectes pas les 2 premières ....TU SORS !!
|
|
jeudi 24 juillet 2008 à 11:06:30 |
Re : strtok - probleme d'encapsulation?
|
jeudi 24 juillet 2008 à 11:07:45 |
Re : strtok - probleme d'encapsulation?

Chris8412
|
PS : j'ai mis les deux réponses en accepté, car elles répondent toutes les 2 a mon probleme...  Chris 
|
|
jeudi 24 juillet 2008 à 20:11:13 |
Re : strtok - probleme d'encapsulation?

Lucky92
|
Réponse acceptée !
Salut,
si ton path est délimité par des guillemets voici une adaptation possible du code :
#include <fstream> #include <iostream> #include <sstream> using namespace std; ... ifstream file( "input.txt" ) ; string line ; while ( getline( file , line ) ) { TListItem *pItem = ListViewText->Items->Add(); istringstream iss( line ); string word ; while ( iss >> word ) { if ( *word.begin() == '\"' && *word.rbegin() !='\"' ) { string suite; while( *word.rbegin() != '\"' && iss >> suite ) { word += " " + suite; } } pItem->SubItems->Add( word.c_str() ); } } ...
la traduction est la suivante : si le mot lu commence par un " et ne se termine pas par un ", alors c'est qu'il y a une suite ; tant que le mot ne se termine pas par un " et que j'arrive à extraire une suite, je concatène un espace et la suite à mon mot.
|
|
lundi 28 juillet 2008 à 12:44:49 |
Re : strtok - probleme d'encapsulation?

Chris8412
|
Désolé j'ai pris un long weekend ;) Effectivement ca marche et en plus c'est on ne peut plus simple ... merci milles fois Lucky92 !!  Chris 
|
|
Cette discussion est classée dans : ligne, probleme, p1, p2, strtok
Répondre à ce message
Sujets en rapport avec ce message
bug de gcc ? (constructeur C++) [ par vinc1008881 ]
Bonjour, je rencontre un problème de constructeur avec gcc, à n'y rien comprendre : J'ai : class point{public : point (int, int, int); //constructeur.
à l'aide pour fusioné la fonction getline + fct strtok [ par yanlou ]
salut,voici mon problmé, je veux lire un fichier txt, je le fais avec la fonction getline. voici le code :#include #include #include int main(){
probleme de codage. [ par bigoctets ]
Bonjour a toutes et a tous. Tout d'abord je suis désolé si ce message n'est pas dans le bon theme, mais il y en a tellement que ca m'a un peu perdu.Je
tableau de chaine de caractère [ par fiorellafatma ]
salut à tous je cherche à inverser les caractère des mot dans un tableau de mot voici montravail qui n'a pas marché et je vous demande de l'aide [^^p
Probleme boucles Fstream comparaison [ par nerone21 ]
Bonsoir a vous les serials codeurs, alors j'aurais besoin de vos lumiere car j'ai un petit gros probleme que je ne comprend pas.voici mon code en dess
utilisation de la stl vector + la stl pair [ par anthony65 ]
Bonjour,je voudrais savoir comment je peux lire les elements qui se trouve dans mon vector.Dans mon vector j'ajoute des pair, mon probleme est que je
Probleme de pointeur [ par romainbisson ]
if(ptr != NULL){ char s1[26]; strncpy(s1, ptr, 25); ptr1 = strstr(s1, "="); char *p1 = strtok(ptr1+1, esp);
Probleme d'execution CreateProcess [ par Dryko ]
BonjourJe souhaite realiser une conversion d'image dans un programme en c++ en utilisant la ligne de commande suivant : convert -size 640x480 test.uyv
probleme avec une chaine de caractere [ par joben22 ]
Bonsoir, j'ai un petit soucis avec une fonction que j'essaie de coder. En fait, je lis le contenue d'un fichier, le place dans un char* et la j'aimer
Probleme un peu bidon [ par romainbisson ]
Bonjour,je souhaite ecrire dans monn fichier au début de chaque ligne,7, 7,7,mais je souhaite que sur la dernier ligne, il ne m'affiche pas le 7,f
Livres en rapport
|
Derniers Blogs
POUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDNPOUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDN par neodante
Quelle est le point commun entre : Microsoft il y a 10 ans et Apple aujourd'hui ? Réponse: avoir une politique de protocoles propriétaires et fermés :) Car pour rappel (si si je vous assure c'est important de le rappeler), la majorité des spécifications e...
Cliquez pour lire la suite de l'article par neodante JOYEUX ANNIVERSAIRE NIXJOYEUX ANNIVERSAIRE NIX par ebartsoft
Souhaitons un bon et joyeux anniversaire à notre hôte à tous, Nix.
Je ne le répéterais jamais assez mais sans lui rien ne serait possible. Il défit en permanence les lois de la gravité et comme il le dit si bien, si tu lui fais confiance ça devra...
Cliquez pour lire la suite de l'article par ebartsoft IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc
Forum
MATLAB PROGRAMME MATLAB PROGRAMME par wahab1087
Cliquez pour lire la suite par wahab1087 RGB2GRAYRGB2GRAY par musa18
Cliquez pour lire la suite par musa18
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|