|
Bas de page | |
---|---|
Auteur | Sujet : Existe-t-il une fonction qui cherche dans un flux ? |
![]() Publicité | Posté le 06-02-2006 à 13:28:42 ![]() ![]() |
Sebou77 French Tech powaa :-) | j'ai pas bien compris |
Elmoricq Modérateur | Je te conseille de placer la liste de tes champs dans un tableau de caractères (dans le fichier en-tête, par exemple, ou dans la fonction même, à toi de voir), et de stocker les résultats dans un tableau dynamiquement alloué.
Message édité par Elmoricq le 06-02-2006 à 13:50:08 |
Sve@r |
|
e-miel |
Facile : j'attends des entiers, et scanf sait très bien s'arrêter là où il faut, du moment qu'on lui montre exactement là où il doit commencer. Le problème, c'est pas de trouver la fin de "bidule", mais c'est de trouver le début de "bidule". Tout ce que je sais, c'est qu'avant la valeur entière de bidule, il y a écrit " bidule=" (c'est-à-dire : espace, b, i, d, u, l, e, =).
j'aimerai obtenir la valeur entière 12. J'arrive à obtenir ce 12 avec le code suivant :
|
skelter | ouai flux et chaine c'est deux conceptes différents, la fonction devrait plutot s'appeler fignore |
e-miel |
Elmoricq Modérateur | Dans la libC, il n'y a pas grand chose, au fur et à mesure on se constitue souvent une bibliothèque personnelle, d'ailleurs, pour éviter de devoir ré-écrire plusieurs fois les mêmes fonctions. Message édité par Elmoricq le 07-02-2006 à 13:20:29 |
Sve@r |
Et tu ne trouveras jamais "bidule=". Le seul algo que je vois serait de lire ton flux octet par octet jusqu'à trouver le premier caractère d'un token. Puis voir si à partir de là on a le token en intégral. Si c'est le cas, tu renvoies ta position dans le fichier. Et si ta fonction doit être indépendante, il faut qu'elle fasse aussi l'ouverture+fermeture du flux. Ca risque d'être lourd...
--------------- Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche. |
e-miel |
Pas vraiment, il y a des séquences qui n'ont rien de textuel (même si c'est fait avec des caractères ASCII) et les champs "tocken=nb" sont en plein milieu d'autre chose qui n'a pas la même apparence. Des fois, je dois lire des valeurs entre parenthèses, du type "tocken=(2,54)" alors qu'ailleurs, c'est simplement "tocken=12". Et comme lire un flux caractère par caractère me parait plus coûteux, et plus difficile à comprendre qu'un strstr dans le code source, je vais rester avec mon gros buffer et mon strstr.
Message cité 1 fois Message édité par e-miel le 07-02-2006 à 21:59:06 |
![]() Publicité | Posté le 07-02-2006 à 21:49:42 ![]() ![]() |
skelter | tu peux toujours implémenté ton fignore, et lire cararctere par carctere c'est pas tellement plus couteux, les flux sont bufferisés et meme si c'est un appel de fonction c'est pas comme si c'était un appel systeme. |
Sve@r |
Message cité 1 fois Message édité par Sve@r le 07-02-2006 à 23:13:22 --------------- Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche. |
0x90 → | pkoi ne pas utiliser flex ? --------------- Me: Django Localization, Yogo Puzzle, Chrome Grapher, C++ Signals, Brainf*ck. |
skelter | ou implementer un fignore, ca fait se fait en 3 lignes et c'est la question de départ |
Sve@r |
--------------- Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche. |
skelter | tu boucles sur le resultat de fgetc et tu te sers d'un curseur, c'est franchement pas compliqué ?? |
0x90 → |
--------------- Me: Django Localization, Yogo Puzzle, Chrome Grapher, C++ Signals, Brainf*ck. |
skelter | tu devrais faire le test (ret == EOF) avant, ret pourrait valoir EOF mais quand meme satisfaire le test (ret == str[i]) non ?
|
0x90 → |
Message édité par 0x90 le 08-02-2006 à 00:44:28 --------------- Me: Django Localization, Yogo Puzzle, Chrome Grapher, C++ Signals, Brainf*ck. |
0x90 → | Au passage, mon algo est faux mais le tient aussi, teste le avec :
--------------- Me: Django Localization, Yogo Puzzle, Chrome Grapher, C++ Signals, Brainf*ck. |
skelter | bien vu, j'avais pas du tout penser à ca |
skelter | en fait ca se fait assez simplement (c'est meme encore plus simple) avec memmove
|
e-miel |
Si la chaîne recherchée est "bidule=(" puis "," il n'y a aucun problème. Faut bricoler, mais ça marche.
J'aurai plutôt dit une limite à 8 Mo (taille de la pile)... en supposant que les fonctions déjà empilées (fonctions appelantes) ne prennent pas beaucoup de place dans la pile (par chance, c'est le cas).
Les noms et l'aspect des champs n'est pas si régulier que ça, je me retrouverai avec un sed compliqué. Sinon, le awk c'est comme du C interprété, donc aurant rester au C.
Message édité par e-miel le 08-02-2006 à 22:41:18 |
![]() Publicité | Posté le ![]() ![]() |
Sujets relatifs | |
---|---|
Rediriger en fonction de la date? | passer un parametre a une fonction |
fonction qui retourne code HTML d'un char spécial | [résolu] Fonction mail, je ne reçois rien... |
suite d'action dans une fonction | Cherche une fonction pour 'aspirer' un fichier HTTP (une page, par ex) |
Recherche d'une fonction qui ajoute les slashs. | problème avec la fonction onBlur |
fonction Timer vide, problème ??? | |
Plus de sujets relatifs à : Existe-t-il une fonction qui cherche dans un flux ? |