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 :

Match des url


Sujet :

C

  1. #1
    Membre confirmé Avatar de mackla
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 140
    Par défaut Match des url
    bonjours,

    Depuis hier j'esseye de trouver une solution à mon problème mais en vain. je vous explique:

    j'ai un tableau contenant des url de type:

    /blabla/index.html
    /toto/blabla/index.html
    /toto/blabla

    j'ai une variable qui contient par exemple index.html (char *var="index.html").

    je veut savoir si index.html se trouve sur cette table. si oui, prendre l'entrée la plus longue .

    j'ai voulu tenter avec les expressions régulières mais ces impossible vue que la "var" change à chaque fois

    PS: je veut éviter le parcours du tableau caractère par caractère.

    merci pour votre aide.

  2. #2
    Membre émérite Avatar de valefor
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    711
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 711
    Par défaut
    PS: je veut éviter le parcours du tableau caractère par caractère.
    Je suggère de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    char *tableau[] = {"foo/index.html", "bar/index.html", "foobar/index.html", NULL};
    char *var = "index.html";
    - pour chaque élément du tableau :
    - chercher si il contient la chaine var avec strstr(tableau[i], var)
    - calculer la longueur de tableau [i] avec strlen(tableau[i])
    - comparer la longueur avec la longueur max

  3. #3
    Membre Expert Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Par défaut
    Citation Envoyé par valefor Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    char *tableau[] = {"foo/index.html", "bar/index.html", "foobar/index.html", NULL};
    char *var = "index.html";
    plutôt
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    char const *tableau[] = {"foo/index.html", "bar/index.html", "foobar/index.html"}; /* le NULL est inutile ici */
    char const *var = "index.html";

  4. #4
    Membre confirmé Avatar de mackla
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 140
    Par défaut
    Je suggère de faire :

    Code :

    char *tableau[] = {"foo/index.html", "bar/index.html", "foobar/index.html", NULL};
    char *var = "index.html";
    - pour chaque élément du tableau :
    - chercher si il contient la chaine var avec strstr(tableau[i], var)
    - calculer la longueur de tableau [i] avec strlen(tableau[i])
    - comparer la longueur avec la longueur max
    avant de poster mon problème j'ai esseyé le meme truc avec strstr et la longeur max; mais ca ne marche pas.

    je crois que je me suis mal exprimé,je réexpose:

    j'ai un tableau contenant des url de type:

    /blabla/index.html
    /toto/blabla/index.html
    /toto/blabla

    j'ai une variable qui contient par exemple index.ht (char *var="index.ht").

    je veut savoir si index.ht se trouve sur cette table. si oui, prendre l'entrée la plus longue, mais dans l'exemple que j'ai présenté, index.ht, ne figure pas ,or qu'avec strstr elle indique que index.ht est présente..

  5. #5
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par mackla Voir le message
    je veut savoir si index.ht se trouve sur cette table. si oui, prendre l'entrée la plus longue, mais dans l'exemple que j'ai présenté, index.ht, ne figure pas ,or qu'avec strstr elle indique que index.ht est présente..
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    int   Numero ;
    int   longmax = 0 ;
    int   long1 = strlen(Variable);
    char  *p = NULL ;
     
     
    for ( i = 0 ; i < N_Entrees ; i++ )
    {
       if ( (p = strstr(entree[i], variable)) != NULL ) /* Est-ce que la sous-chaîne existe ??*/
         {
            if ( strcmp(p, variable) == 0 ) /* Est-ce que l on a exactement la chaîne recherchée ?? */
              {
                 if ( strlen(entree[i]) > longmax ) /* Est-ce que c est la + grande ? */
                   {
                      longmax = strlen(entree[i]);
                      Numero = i ;
                   }
             } 
        }
    }

  6. #6
    Membre confirmé Avatar de mackla
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 140
    Par défaut
    Envoyé par souviron34
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    int   Numero ;
    int   longmax = 0 ;
    int   long1 = strlen(Variable);
    char  *p = NULL ;
     
     
    for ( i = 0 ; i < N_Entrees ; i++ )
    {
       if ( (p = strstr(entree[i], variable)) != NULL ) /* Est-ce que la sous-chaîne existe ??*/
         {
            if ( strcmp(p, variable) == 0 ) /* Est-ce que l on a exactement la chaîne recherchée ?? */
              {
                 if ( strlen(entree[i]) > longmax ) /* Est-ce que c est la + grande ? */
                   {
                      longmax = strlen(entree[i]);
                      Numero = i ;
                   }
             } 
        }
    }
    __________________
    je l'ai modifier pour qu'il marche ;mais il marche que si on a une chaine qui se trouve à la fin tel que l'exemple précedant (index.html).

    si on veut chercher blab au lien de blabla ce code ne fonctionne pas.

  7. #7
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    ben à ce conpte-là fallait préciser ton problème correctement .

    La solution correspond à ce que tu demandais

  8. #8
    Membre confirmé Avatar de mackla
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 140
    Par défaut
    bonjours,

    apparament j'ai toujours le meme problème
    tableau contenant des url de type:

    /blabla/index.html
    /toto/blabla/index.html
    /toto/blabla

    je n'arrive pas à testé si blab et non blabla existe sur la table


  9. #9
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    mais quel serait ton séparateur ?

    tu dis que tu veux blab et non blabla, c'est ça ?

    Alors il te faut bien quelque chose pour séparer les 2 cas..

  10. #10
    Membre confirmé Avatar de mackla
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 140
    Par défaut
    je n'est aucun séparateur, c'est ça le problème.

  11. #11
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    ben alors c'est impossible..

    Si tu veux tester une sous-chaîne tu auras forcément les chaînes l'englobant.

    A moins que tu puisses définir un séparateur (blanc, /, \0, , ou autre chose)

  12. #12
    Membre chevronné Avatar de cmoibal
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    361
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations forums :
    Inscription : Avril 2007
    Messages : 361
    Par défaut
    Citation Envoyé par mackla Voir le message
    bonjours,

    apparament j'ai toujours le meme problème
    tableau contenant des url de type:

    /blabla/index.html
    /toto/blabla/index.html
    /toto/blabla

    je n'arrive pas à testé si blab et non blabla existe sur la table

    Mais, si tu veut avoir le nom blab, utilise strncmp() sur le résultat du strstr()..... ???????

  13. #13
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par cmoibal Voir le message
    Mais, si tu veut avoir le nom blab, utilise strncmp() sur le résultat du strstr()..... ???????
    non, il ne veut pas avoir blabla ...

    Or le strncmp retournera OK..

  14. #14
    Membre confirmé Avatar de mackla
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 140
    Par défaut
    Enoyé par souviron34
    ben alors c'est impossible..
    y'a pas un autre moyen?!!

  15. #15
    Membre chevronné Avatar de cmoibal
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    361
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations forums :
    Inscription : Avril 2007
    Messages : 361
    Par défaut
    Citation Envoyé par souviron34 Voir le message
    non, il ne veut pas avoir blabla ...

    Or le strncmp retournera OK..

    Oui,je sais, il veut avoir bla a partir du blabla, le strcmp() est suffisante dans ce cas. et le retour de strncmp() est comme indiqué dans le man :
    The strcmp() function compares the two strings s1 and s2. It returns an integer less than, equal to, or greater than zero if s1 is found, respec‐
    tively, to be less than, to match, or be greater than s2.

    The strncmp() function is similar, except it only compares the first (at most) n characters of s1 and s2.
    Donc, s'il y a une occurence seulement de la chaine recherché, le retour sera negative !!!!!!!!
    Non ?

  16. #16
    Membre confirmé Avatar de mackla
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 140
    Par défaut
    Envoyé par cmoibal
    <....>
    ce que tu propose est juste mais je ne veut pas avoir blab, je veut testé si blab existe
    exemple:
    /toto/blab/index.html

    mais ce n'est pas le cas parceque j'ai /toto/blabla/index.html

  17. #17
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par cmoibal Voir le message
    Oui,je sais, il veut avoir bla a partir du blabla, le strcmp() est suffisante dans ce cas. et le retour de strncmp() est comme indiqué dans le man :

    Donc, s'il y a une occurence seulement de la chaine recherché, le retour sera negative !!!!!!!!
    Non ?
    NON il veut bla SANS AVOIR blabla

  18. #18
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par mackla Voir le message
    y'a pas un autre moyen?!!
    tant que tu ne détermines pas un certain séparateur, non, puisque "blab" est contenu aussi bien dans "blab" que dans "blabla"..

    Si c'est la fin d'un nom de répertoire, ou de fichier, tu peux.. (le séparateur est / ou .)

    Sinon , sans séparateur défini, la réponse est NON il n'y a pas de moyen..

    Mais en fait, je pense qu'il serait bien que tu nous soumettes le problème original, car je crois que ton idée de solution est biaisée...

  19. #19
    Membre confirmé Avatar de mackla
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 140
    Par défaut
    Enoyé par souviron34
    Mais en fait, je pense qu'il serait bien que tu nous soumettes le problème original, car je crois que ton idée de solution est biaisée...
    j'ai un client qui tape sur son browser http://monsite/blabla/index.html
    Cette requete est diriger vers un serveur1 (ce n'est pas un serveur web) qui va extraire seulement ce qui se trouve après monsite cad extraire /blabla/index.html
    Sur le serveur1, se trouve une table de correspondance entre les urls extraites (/blabla/index.html) et leurs correspondante qui se trouve sur un autre serveur web.

    donc si le client tape http://monsite/blab/index.html, comment tester que cette url n'existe pas tout en évitant le parcours caractère par caractère, vue que j'ai une table de 500 entrée sans oublier qu'il faut matcher l'entrée la plus longue.

  20. #20
    Membre chevronné Avatar de cmoibal
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    361
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations forums :
    Inscription : Avril 2007
    Messages : 361
    Par défaut
    je pense que le parcours est nécéssaire, reste a verifier la longueur de vos mot stocké:

    anisi, tu peut faire:
    1- récuperer l'URL
    2- découper l'URL selon la RFC
    3- recherche les mot commencant par la meme lettre et ayant la meme longeur
    4- comparer les deux mots

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Comment récupérer les icones des URL?
    Par Blo0d4x3 dans le forum Windows
    Réponses: 3
    Dernier message: 26/05/2006, 16h29
  2. [EasyPHP] impossible de faire des URLS avec variable
    Par SandraG dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 9
    Dernier message: 30/03/2006, 18h38
  3. [MFC] Decoder des URLs
    Par MrMaze dans le forum MFC
    Réponses: 4
    Dernier message: 23/02/2006, 16h03
  4. [Référencement] Pourquoi des URL longues et explicites ?
    Par bibile dans le forum Référencement
    Réponses: 19
    Dernier message: 09/12/2005, 16h09

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