Format scanf

Format scanf - C - Programmation

Marsh Posté le 27-10-2003 à 15:47:02    

Bon, toujours dans mon problème d'extraction de logs, je suis confronté à la ligne suivante :
 

Citation :

2003-10-27 15:37:12 Truc Machin envoit: Blablabla
2003-10-27 15:37:57 Bidule Chose envoit: Hop hop hop
2003-10-27 15:38:39 Machin Chose envoit: Tadam


 
Et le jeu, bin c'est de récupérer "Truc Machin", "Bidule Chose" et "Machin Chose".
 
Les noms peuvent contenir des lettres (accentuées ou nom), des chiffres, certains caractères spéciaux et bien sûr, des espaces. Ils font entre 3 et 18 caractères de long.
 
Et voila le soucis : quel format je peux bien utiliser pour récupérer le nom ? :sweat:
 
Si j'utilise %s, il ne me récupère que les noms composés d'un seul "bloc", si j'utilise %18s (longueur max.), il récupère un bout du "envoit" si le nom est plus court et ça capote.
 
Pour l'instant, j'utilise :

Code :
  1. scanf("%4s-%2s-%2s %8s %18s envoit: %[^\n]" );


 
(bien sûr, ça ne va pas...)
 
Quelqu'un a-t-il déjà été confronté à ce problème ?


Message édité par meerthyl le 27-10-2003 à 16:38:45
Reply

Marsh Posté le 27-10-2003 à 15:47:02   

Reply

Marsh Posté le 27-10-2003 à 16:36:10    

jai eu ce prob ya pas longtemp pour  un logiciel de chat ou les nickname envoyes par le serveur pouvait contenir des espaces;
 
jlai fait a la main finalement (peu etre pas la meilleure solution...)

Reply

Marsh Posté le 27-10-2003 à 16:39:35    

Comment ça "fait à la main" ?

Reply

Marsh Posté le 27-10-2003 à 16:53:35    

ben caractere par caractere
par exemple le serveur recoit un truc comme ca :
 
 

Code :
  1. Red faction\n Nick name 1\n Te st\n
  2. while(*str!='\n'){
  3.     str++;
  4. }
  5. ...


Message édité par red faction le 27-10-2003 à 16:53:55
Reply

Marsh Posté le 27-10-2003 à 16:57:50    

S'il faut le faire à la main, je vais chercher du côté de <string.h> pour vérifier si la chaine "envoit:" est présente, et le cas échéant, récupérer le texte alors, merci :jap:

Reply

Marsh Posté le 27-10-2003 à 17:08:21    

envoyer est un verbe du premier groupe. Il envoie.


---------------
Le site de ma maman
Reply

Marsh Posté le 27-10-2003 à 17:19:00    

T'es cruel, j'espérais que t'avais une solution. :'(
Enfin j'avais un doute mais la flemme de vérifier. :/
Merci tout de même.

Reply

Marsh Posté le 27-10-2003 à 17:31:37    

Effectivement je pense que la solution c'est "à la main". Perso, je récupèrerais toute la ligne. Je prendrais une sous-chaine en enlevant les 19 premiers chars, puis je ferais une recherche de la première occurence du mot "envoie" ce qui me permettrait de spliter en deux partie : le nom et le message. En Java c'est dix lignes.


---------------
Le site de ma maman
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed