[C] Traitement d'un fichier texte
Utilisateur anonyme
-
fiddy Messages postés 11069 Date d'inscription Statut Contributeur Dernière intervention -
fiddy Messages postés 11069 Date d'inscription Statut Contributeur Dernière intervention -
Salut !
Je suis actuellement en train de programmer un petit logiciel et j'aimerais connaître les méthodes/fonctions qui permettent de naviguer dans un fichier texte et de récupérer une partie du fichier.
Merci d'avance de votre aide.
Je suis actuellement en train de programmer un petit logiciel et j'aimerais connaître les méthodes/fonctions qui permettent de naviguer dans un fichier texte et de récupérer une partie du fichier.
Merci d'avance de votre aide.
A voir également:
- [C] Traitement d'un fichier texte
- Fichier bin - Guide
- Comment réduire la taille d'un fichier - Guide
- Comment ouvrir un fichier epub ? - Guide
- Fichier rar - Guide
- Fichier .dat - Guide
8 réponses
Salut,
Pour te positionner dans le fichier, tu as :
Pour connaître l'utilisation, tu consultes le man ou sur google.
Pour lire le fichier, tu as fgets ou fscanf.
Cdlt
Pour te positionner dans le fichier, tu as :
int fseek(FILE *stream, long offset, int whence); int fsetpos(FILE *stream, fpos_t *pos);
Pour connaître l'utilisation, tu consultes le man ou sur google.
Pour lire le fichier, tu as fgets ou fscanf.
Cdlt
En fait je suis dans un fichier html, et je cherche à trouver une balise comme <div id="menu"> pour sortir d'une boucle.
Je ne sais pas comment mettre ça en place ...
Je ne sais pas comment mettre ça en place ...
Non, ta condition du while est mauvaise.
Si tu veux sortir de la boucle while, tu peux mettre un break; tout simplement.
Cdlt
FILE * fp = fopen("./startpage.html", "r"); if(fp==NULL) { fputs("erreur lecture fichier\n",stderr); exit(1); } while(fgets(chaine, sizeof chaine, fp)!=NULL) { if (strstr(chaine, "<div id=\"menu\">") != NULL) { // Suite des instructions } } fclose(fp),fp=NULL;
Si tu veux sortir de la boucle while, tu peux mettre un break; tout simplement.
Cdlt
Ensuite j'ai dans la page
Je reconnait la ligne grâce à :
Je voudrais récupérer le lien qui se trouve après <li><a href="
Comment dois-je procéder sachant que le lien n'a pas une longueur constante ?
Merci beaucoup
<li><a href="http://***.***.***/" onclick="window.open(this.href); return false;">***</a></li>
Je reconnait la ligne grâce à :
while(fgets(chaine, sizeof chaine, fp)!=NULL) { if (strstr(chaine, "<li><a href=\"") != NULL) { } }
Je voudrais récupérer le lien qui se trouve après <li><a href="
Comment dois-je procéder sachant que le lien n'a pas une longueur constante ?
Merci beaucoup
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
La chaîne que tu veux récupérer est comprise entre // et /.
Tu peux donc t'en servir comme délimiteur.
Dans chaine tu as <li>...</li>
Tu peux donc faire : strstr pour avoir un pointeur sur //xxx.xxx.xxx/........</li>
Et ensuite un sscanf pour récupérer xxx.xxx.xxx
Ce qui donne par exemple :
Tu peux donc t'en servir comme délimiteur.
Dans chaine tu as <li>...</li>
Tu peux donc faire : strstr pour avoir un pointeur sur //xxx.xxx.xxx/........</li>
Et ensuite un sscanf pour récupérer xxx.xxx.xxx
Ce qui donne par exemple :
char adresse[50]; char *p=strstr(chaine,"//"); if(p) { sscanf(p,"//%49[^/]",adresse); } puts(adresse);
Je te remercie, grâce à toi j'ai quelque chose qui fonctionne ;)
Mais pourtant j'ai beau chercher sur internet depuis ta dérnière réponse, je ne trouve pas comment utilise sscanf pour faire un tel découpage ... peux-tu m'expliquer son fonctionnement exacte s'il te plait ?
Et je pense qu'après je ne t'embête plus ^^
Merci encore.
Mais pourtant j'ai beau chercher sur internet depuis ta dérnière réponse, je ne trouve pas comment utilise sscanf pour faire un tel découpage ... peux-tu m'expliquer son fonctionnement exacte s'il te plait ?
Et je pense qu'après je ne t'embête plus ^^
Merci encore.
Salut,
L'explication tu la trouves dans man sscanf
L'explication tu la trouves dans man sscanf
[ Correspond à une séquence non vide de caractères appartenant à un ensemble donné. Le pointeur correspondant doit être un pointeur vers un char et il doit y avoir suffisamment de place dans le tableau de caractères pour accueillir la chaîne ainsi qu'un octet nul final. Les caractères blancs du début ne sont pas supprimés. La chaîne est constituées de caractères inclus ou exclus d'un ensemble donné. L'ensemble est composé des caractères compris entre les deux crochets [ et ]. <gras>L'ensemble exclut ces caractères si le premier après le crochet ouvrant est un accent circonflexe (^). Pour inclure un crochet fermant dans l'ensemble, il suffit de le placer en première position après le crochet ouvrant, ou l'accent circonflexe ; à tout autre emplacement il servira à terminer l'ensemble. Le caractère tiret - a également une signification particulière. Quand il est placé entre deux autres caractères, il ajoute à l'ensemble les caractères intermédiaires. Pour inclure un tiret dans l'ensemble, il faut le placer en dernière position avant le crochet fermant. Par exemple, [^]0-9-] correspond à l'ensemble « Tout sauf le crochet fermant, les chiffres de 0 à 9, et le tiret ». La chaîne se termine dès l'occurrence d'un caractère exclu (ou inclus s'il y à un accent circonflexe ) de l'ensemble, ou dès qu'on atteint la longueur maximale du champ.