IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

recuperer des fichier via le net, et les manipuler en C


Sujet :

C

  1. #1
    Nouveau membre du Club
    Inscrit en
    Mars 2006
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 53
    Points : 25
    Points
    25
    Par défaut recuperer des fichier via le net, et les manipuler en C
    plop,

    alors voila, tout d'abord j'utilise LCC-win32.

    j'arrive a recuperer des fichier sur internet, ce que je voudrais maintenant faire c'est les manipuler.
    je m'explique, je recupere des fichier html, j'aimerai pouvoir les "explorer" et recuperer des url dedans que je stockerais dans des chaine de caractere.

    j'aimerais aussi pouvoir creer des dossier sur n'importe quel disque dur

    voila le code qui me permet de recuperer une page html que je stocke en fichier texte, le fichier est placé dans le dossier ou se trouve le programme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    #include <stdio.h>
    #include <netutils.h>
     
    int GetHttpUrl(char *URL, char *localfilename); // doit etre linké avec netutils.lib et winhttp.lib
     
    void main(){
     
    	printf("en cours\n\n");
    	GetHttpURL( "http://www.google.fr/index.html","indexgoogle.txt");
    	printf("done\n\n\n\n");
     
    }
    connaitrier vous les fonction qui permette de faire ça, je n'en ai pas trouver dans l'aide

    merci

  2. #2
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par sliders_alpha Voir le message
    alors voila, tout d'abord j'utilise LCC-win32.

    j'arrive a recuperer des fichier sur internet, ce que je voudrais maintenant faire c'est les manipuler.
    je m'explique, je recupere des fichier html, j'aimerai pouvoir les "explorer" et recuperer des url dedans que je stockerais dans des chaine de caractere.
    Pour ça, il faut créer une fonction suffisamment intelligente pour repérer les balises <A href="url">texte</A> et extraire 'url'. C'est pas bien dur...

    j'aimerais aussi pouvoir creer des dossier sur n'importe quel disque dur
    Rien de standard, mais il y a les fonctions POSIX.1 :
    • chdir() pour changer de répertoire et/ou d'unité
    • mkdir() pour créer un répertoire
    Pas de Wi-Fi à la maison : CPL

  3. #3
    Nouveau membre du Club
    Inscrit en
    Mars 2006
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 53
    Points : 25
    Points
    25
    Par défaut
    Citation Envoyé par Emmanuel Delahaye Voir le message
    Pour ça, il faut créer une fonction suffisamment intelligente pour repérer les balises <A href="url">texte</A> et extraire 'url'. C'est pas bien dur...


    Rien de standard, mais il y a les fonctions POSIX.1 :
    • chdir() pour changer de répertoire et/ou d'unité
    • mkdir() pour créer un répertoire
    merci pour les deux fonction.

    oui, je comptais reperer les url comme ça, mais le problemme, c'est comment extraire chaque ligne sous forme de variable chaine pour ensuite utiliser les fonction de recherche dessus? en plus les ligne son enorme (lcc les stocke en gros paté, au moins 300 cara voire plus par lignes)

  4. #4
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par sliders_alpha Voir le message
    oui, je comptais reperer les url comme ça, mais le problemme, c'est comment extraire chaque ligne sous forme de variable chaine pour ensuite utiliser les fonction de recherche dessus? en plus les ligne son enorme (lcc les stocke en gros paté, au moins 300 cara voire plus par lignes)
    Tu va voir directement dans le paté. La notion de 'lignes' n'existe pas vraiment en html.
    Pas de Wi-Fi à la maison : CPL

  5. #5
    Nouveau membre du Club
    Inscrit en
    Mars 2006
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 53
    Points : 25
    Points
    25
    Par défaut
    je peux stocker tout le paté dans une chaine? il y a 50Ko de texte quand meme

  6. #6
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par sliders_alpha Voir le message
    je peux stocker tout le paté dans une chaine? il y a 50Ko de texte quand meme
    Du moment qu'il y a un 0 à la fin 'ou que tu connais sa longueur), pas de problèmes. C'est vrai que le C90 ne garantit que 32k, et le C99, 64k. Dans la pratique, c'est certainement beaucoup plus sur PC avec un OS 32-bit. C'est écrit dans la doc de ton compilateur.
    Pas de Wi-Fi à la maison : CPL

  7. #7
    Nouveau membre du Club
    Inscrit en
    Mars 2006
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 53
    Points : 25
    Points
    25
    Par défaut
    j'ai trouver quelque commande pour ouvrir le fichier et le lire (et ecrire) :

    fopen
    fscanf
    fprintf
    fclose

    seul problemme, je dois stocker la chaine lu par fscanf dans une chaine de caractere, mais j'ignore totalement la longeur de la chaine (or, je crois que lcc nous oblige a preciser une taille limites de la chaine)

    de plus, je vien de telecharger une autre page et elle fait 210ko, je suis sur que je pourrais un jour tomber sur des page de 400Ko et plus.

    je joint un exemple de fichier que je recupere pour ensuite fouiller dedans

    le question est donc, comment determiner la longeur de la ligne avant?

  8. #8
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par sliders_alpha Voir le message
    j'ai trouver quelque commande pour ouvrir le fichier et le lire (et ecrire) :

    fopen
    fscanf
    fprintf
    fclose

    seul problemme, je dois stocker la chaine lu par fscanf dans une chaine de caractere, mais j'ignore totalement la longeur de la chaine (or, je crois que lcc nous oblige a preciser une taille limites de la chaine)

    de plus, je vien de telecharger une autre page et elle fait 210ko, je suis sur que je pourrais un jour tomber sur des page de 400Ko et plus.

    je joint un exemple de fichier que je recupere pour ensuite fouiller dedans

    le question est donc, comment determiner la longeur de la ligne avant?
    Pas besoin. De plus, je t'ai déjà dit qu'il n'y avait pas forcément de lignes dnas un fichier html et que de toutes façons (sauf entre les balises <pre></pre>) elle n'ont pas de sémantique particulière.

    Tu fais une lecture bouclée avec fgets() et tant qu'il n'y a pas de '\n', tu agrandis au fur et à mesure des besoins en doublant la taille (ou en multipliant par le nombre d'or, 1.6...)
    malloc(), realloc()...

    Mais à mon avis, le problème est mal posé. Pour veux-tu charcher tout le fichier en mémpire pour ensuite le lire séquenciellement . Il suffit de lire le fichier séquenciellement directement et de repérer les balises qui t'intéressent, comme <a ref=""> et </a>. Tu enregistre alors ce qu'il y a dans les ". C'est assez simple. Il suffit d'écrire une petite machine à états (ici, plutôt un séquenceur de caractères):

    1. activer la mise en minuscule
    2. attendre '<'
    3. attendre 'a'
    4. attendre 'blank'
    5. ignorer autres 'blank'
    6. attendre 'r'
    7. attendre 'e'
    8. attendre 'f'
    9. ignorer les 'blank'
    10. attentre '='
    11. ignorer les 'blank'
    12. attendre '"'
    13. désactiver la mise en minuscule
    14. stocker tous les caractères jusqu'à '"'
    15. fermer la chaine
    16. activer la mise en minuscule
    17. attendre '<'
    18. attendre '/'
    19. attendre 'a'
    20. attendre '>'
    21. reinitialiser la recherche d'url

    etc.
    Pas de Wi-Fi à la maison : CPL

  9. #9
    Nouveau membre du Club
    Inscrit en
    Mars 2006
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 53
    Points : 25
    Points
    25
    Par défaut
    j'ai fait un truc dans le genre, un chaine de 40 caractere qui se rempli avec les caractere du texte et dont le texte a l'interieur se decale tout a gauche a chaque fois que j'ajoute un caratere.

    donc a un moment, je devrai avoir if "Reply" dans ls[35 a 39], j'ai esseyer de le detecter comme ça :

    if (ls[39]=='y' && ls[38]=='l' && ls[37]=='p' && ls[36]=='e' && ls[35]=='R')
    {
    blablabla:
    }

    mais ça ne marche pas, j'ai regarder en debugant, a un moment j'ai bien Reply dedans, mais la condition n'est pas validé et blablabla n'est pas executé

    il y a une erreur?

  10. #10
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par sliders_alpha Voir le message
    j'ai fait un truc dans le genre, un chaine de 40 caractere qui se rempli avec les caractere du texte et dont le texte a l'interieur se decale tout a gauche a chaque fois que j'ajoute un caratere.

    donc a un moment, je devrai avoir if "Reply" dans ls[35 a 39], j'ai esseyer de le detecter comme ça :

    if (ls[39]=='y' && ls[38]=='l' && ls[37]=='p' && ls[36]=='e' && ls[35]=='R')
    {
    blablabla:
    }

    mais ça ne marche pas, j'ai regarder en debugant, a un moment j'ai bien Reply dedans, mais la condition n'est pas validé et blablabla n'est pas executé

    il y a une erreur?
    Déjà, tu peux utiliser strncmp() :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    if (strncmp (ls + 35, "Reply", 5) == 0)
    {
       blablabla:
    }
    Mais il vaut mieux limiter le stockage et travailler en séquence, caractère par caractère.
    Pas de Wi-Fi à la maison : CPL

  11. #11
    Nouveau membre du Club
    Inscrit en
    Mars 2006
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 53
    Points : 25
    Points
    25
    Par défaut
    je lis caractere par caractere, et je les stocke dans un tableau de 40 cases,
    chaque caractere rentre par la case 40 et decale les autre vers 0, ceux qui depasse 0 sont effacé, ça me permet de detecter reply, merci pour ton bout de code, il marche a meirveille.

    je suis confronté a un autre problemme, je vousdrais faire un tableau a plusieur dimention, mais je n'y arrive pas, le tableau sera agencé de la façon suivante :

    char tab[X,Y,Z] X=numero de 1 a 50 (je rentrerais leur equivalent en caractere)
    Y= URL (35 a stocker)
    Z autre URL (35 a stocker)

    ###edit

    c'est bon, je me suis debrouiller avec 3 tableau different

    j'utilise getc pour recuperer les caractere, donc, getc deplace a chaque fois un "curseur" est-il possible d'effacer (ou remplacer par '0') tous les caractere se trouvant avant ce curseur, si on ne connais pas sa position?

  12. #12
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par sliders_alpha Voir le message
    je lis caractere par caractere, et je les stocke dans un tableau de 40 cases,
    chaque caractere rentre par la case 40 et decale les autre vers 0, ceux qui depasse 0 sont effacé, ça me permet de detecter reply,
    C'est une méthode horriblement lente et pas efficace du tout. encore une fois, la méthode de la machine à état évite tout ce bazar et est bien plus efficace.

    je suis confronté a un autre problemme, je vousdrais faire un tableau a plusieur dimention, mais je n'y arrive pas, le tableau sera agencé de la façon suivante :

    char tab[X,Y,Z] X=numero de 1 a 50 (je rentrerais leur equivalent en caractere)
    Y= URL (35 a stocker)
    Z autre URL (35 a stocker)
    Si tu veux coder en C, le minimum est d'en apprendre la syntaxe de base...
    c'est bon, je me suis debrouiller avec 3 tableau different
    Ça n'a rien à voir avec un tableau à 3 dimensions...

    j'utilise getc pour recuperer les caractere, donc, getc deplace a chaque fois un "curseur" est-il possible d'effacer (ou remplacer par '0') tous les caractere se trouvant avant ce curseur, si on ne connais pas sa position?
    Encore une fois, tu cherches des solutions compliquées à des faux problèmes. avec une analyse séquentielles, ces problèles ne se posent pas.

    La logique séquentielle est un principe de programmation extrêmement puissant et comme souvent, pas du tout enseigné (ou alors dans le cadre de la théorie des langages au niveau Mastère)

    Je l'aborde ici :

    http://emmanuel-delahaye.developpez.com/fsm_um.htm
    Pas de Wi-Fi à la maison : CPL

  13. #13
    Nouveau membre du Club
    Inscrit en
    Mars 2006
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 53
    Points : 25
    Points
    25
    Par défaut
    merci, je vais lire ça. ben je dois te dire que je n'ai jamais etudié de C "pour pc" mais connaissance sont proche de 0 et je n'ai aucune experience.

    je m'y suis lancer il y 3 jours en lisant le fichier d'aide d'un compilateur.

    je suis en electronique, je suis plutot habitué a programmer des microcontrolleur et notre compilo declare les tableau a plusieur dimension ainsi.

    Ça n'a rien à voir avec un tableau à 3 dimensions...
    oui, je m'en suis rendu compte apres

    apres lecture de ton lien, je ne vois pas du tout comment appliquer ça a mes besoin. je vais regarder sur google si j'ai pas des exemple avec de la recher du texte

Discussions similaires

  1. Réponses: 1
    Dernier message: 09/11/2006, 09h21
  2. Réponses: 4
    Dernier message: 08/07/2006, 14h11
  3. [Windows XP] Comment récupérer des fichiers cryptés ?
    Par fantomchris dans le forum Sécurité
    Réponses: 16
    Dernier message: 14/12/2005, 09h45
  4. recuperer des fichiers supprimés de USB
    Par spopo dans le forum Autres Logiciels
    Réponses: 3
    Dernier message: 07/11/2005, 11h57
  5. Uploader des fichiers via ssh
    Par Michaël dans le forum Réseau
    Réponses: 3
    Dernier message: 13/05/2005, 20h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo