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 :

Recherche de l'indice où débute une sous chaine dans un char*.


Sujet :

C

  1. #21
    Rédacteur
    Avatar de Vincent Rogier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 373
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 373
    Points : 5 307
    Points
    5 307
    Par défaut
    tu as un fichier *.emi que l'on peut tester ?
    Vincent Rogier.

    Rubrique ORACLE : Accueil - Forum - Tutoriels - FAQ - Livres - Blog

    Vous voulez contribuer à la rubrique Oracle ? Contactez la rubrique !

    OCILIB (C Driver for Oracle)

    Librairie C Open Source multi-plateformes pour accéder et manipuler des bases de données Oracle

  2. #22
    Rédacteur
    Avatar de Vincent Rogier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 373
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 373
    Points : 5 307
    Points
    5 307
    Par défaut
    ton code mentionne str_istr() et non my_strstr()
    Vincent Rogier.

    Rubrique ORACLE : Accueil - Forum - Tutoriels - FAQ - Livres - Blog

    Vous voulez contribuer à la rubrique Oracle ? Contactez la rubrique !

    OCILIB (C Driver for Oracle)

    Librairie C Open Source multi-plateformes pour accéder et manipuler des bases de données Oracle

  3. #23
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 49
    Points : 11
    Points
    11
    Par défaut
    oui bien sûr. Je l'ai mis sur un site d'upload.

    http://dl.free.fr/getfile.pl?file=/yHlmONxv/fichier.emi
    Par contre pour l'ouvrir, il faut emispec. (Mais il n'y a pas besion de l'ouvrir pour tester)

  4. #24
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 49
    Points : 11
    Points
    11
    Par défaut
    désolé j'ai oublier de montrer une partie de mon code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    int str_istr ( char *cs,  char *ct, size_t size) {
    	int index = -1;
    	if (cs != NULL && ct != NULL) {
    		char *ptr_pos = NULL;
    		ptr_pos = my_strstr (cs, ct,size);
    		if (ptr_pos != NULL) {
    			index = ptr_pos - cs;
    		}
    	}
    	return index;
    }
    ps: j'avais testé en mettant à la place mys_strstr et ça renvoyais NULL

    Là la fonction my_strstr est appelée par str_istr

  5. #25
    Rédacteur
    Avatar de Vincent Rogier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 373
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 373
    Points : 5 307
    Points
    5 307
    Par défaut
    Hummm...

    J'ai parcouru ton fichier binaire et il ne contient pas le mot Camera !!!

    Il contient : "Scanning Acquire", "Image Display", "Normal Image Display", "Normal", "Acquire HAADF Scanning Display", "Acquire HAADF".....

    Mais pas camera...
    Vincent Rogier.

    Rubrique ORACLE : Accueil - Forum - Tutoriels - FAQ - Livres - Blog

    Vous voulez contribuer à la rubrique Oracle ? Contactez la rubrique !

    OCILIB (C Driver for Oracle)

    Librairie C Open Source multi-plateformes pour accéder et manipuler des bases de données Oracle

  6. #26
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 49
    Points : 11
    Points
    11
    Par défaut
    Si il contient bien le mot Camera vers la fin du fichier. Plus précisément à cette adresse hexa: $8007f8

  7. #27
    Rédacteur
    Avatar de Vincent Rogier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 373
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 373
    Points : 5 307
    Points
    5 307
    Par défaut
    le code suivant :


    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    #include "stdlib.h"
    #include "stdio.h"
    #include "string.h"
    #include "ctype.h"
     
    char * my_strstr (const char * str1, const char * str2, size_t size)
    {
            char *cp = (char *) str1;
            char *s1, *s2;
            size_t n;
     
            if ( !*str2 )
                return((char *)str1);
     
            while (size)
            {
                    s1 = cp;
                    s2 = (char *) str2;
                    n  = size;
     
                    while (n && (toupper(*s1) == toupper(*s2)))
                            n--, s1++, s2++;
     
                    if (!*s2)
                            return(cp);
     
                    cp++;
                    size--;
            }
     
            return(NULL);
    }
     
    int main(int argc, char* argv[])
    {
        FILE *f = fopen("fichier.emi", "rb");
     
        if (f)
        {
            int size;
            char *buf;
     
            fseek(f, 0, SEEK_END);
            size = ftell(f);
            rewind(f);
     
            buf = malloc(size);
     
            if (buf)
            {
                char *str;
                char *tag = "Acquire HAADF Scanning Display";
     
                fread(buf, size, 1, f);
     
                str = my_strstr(buf, tag, size);
     
                if (str)
                    printf("'%s' found in file at pos %d\n", tag, str-buf);
                else
                    printf("'%s' not found in file\n", tag);
     
               free(buf);
            }
        }
    }


    me donne ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    'Acquire HAADF Scanning Display' found in file at pos 498
    Vincent Rogier.

    Rubrique ORACLE : Accueil - Forum - Tutoriels - FAQ - Livres - Blog

    Vous voulez contribuer à la rubrique Oracle ? Contactez la rubrique !

    OCILIB (C Driver for Oracle)

    Librairie C Open Source multi-plateformes pour accéder et manipuler des bases de données Oracle

  8. #28
    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 funkyKong Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
         char * bufferFichier = new char[size];
         f_in.read(bufferFichier,size);
     
         int ind = getIndStrStr (bufferFichier, "Camera");
         cout  <<  endl << "Enfin voici l'indice => " << ind << endl;
     
    }
    Pas du C... Je déplace ?
    Pas de Wi-Fi à la maison : CPL

  9. #29
    Rédacteur
    Avatar de Vincent Rogier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 373
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 373
    Points : 5 307
    Points
    5 307
    Par défaut
    Citation Envoyé par funkyKong Voir le message
    Si il contient bien le mot Camera vers la fin du fichier. Plus précisément à cette adresse hexa: $8007f8

    NON ! j'ai édité ton fichier avec un éditeur en binaire, en hexa et en texte....

    Pas de mot "camera" !
    Vincent Rogier.

    Rubrique ORACLE : Accueil - Forum - Tutoriels - FAQ - Livres - Blog

    Vous voulez contribuer à la rubrique Oracle ? Contactez la rubrique !

    OCILIB (C Driver for Oracle)

    Librairie C Open Source multi-plateformes pour accéder et manipuler des bases de données Oracle

  10. #30
    Rédacteur
    Avatar de Vincent Rogier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 373
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 373
    Points : 5 307
    Points
    5 307
    Par défaut
    Citation Envoyé par Emmanuel Delahaye Voir le message
    Pas du C... Je déplace ?

    Ok pour moi, après tout c'est du C++...
    Vincent Rogier.

    Rubrique ORACLE : Accueil - Forum - Tutoriels - FAQ - Livres - Blog

    Vous voulez contribuer à la rubrique Oracle ? Contactez la rubrique !

    OCILIB (C Driver for Oracle)

    Librairie C Open Source multi-plateformes pour accéder et manipuler des bases de données Oracle

  11. #31
    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 funkyKong Voir le message
    oui bien sûr. Je l'ai mis sur un site d'upload.

    http://dl.free.fr/getfile.pl?file=/yHlmONxv/fichier.emi
    Par contre pour l'ouvrir, il faut emispec. (Mais il n'y a pas besion de l'ouvrir pour tester)
    8Mo ... Euh, c'est un bon vieux fichier binaire... Si tu n'as pas la spécification du fichier, tu vas faire n'importe quoi...

    En tout cas, les fonctions de recherches de chaines ne fonctionnent pas, c'est clair.

    Si tu cherches une certaine séquence dans ce code, il faut lire caractères par caractères et implémenter un automate qui détecte la chaine, puis lit les caractères suivants et en tire les données intéressantes (pour peu que leur spécifications soient claires).
    Pas de Wi-Fi à la maison : CPL

  12. #32
    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 funkyKong Voir le message
    Si il contient bien le mot Camera vers la fin du fichier. Plus précisément à cette adresse hexa: $8007f8
    Le fichier s'arrête à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    007fbc90h: 81 D0 81 1D 81 58 81 21 81 75 81 F8 81 95 82    ; Ð.X!uø•‚
    Pas de Wi-Fi à la maison : CPL

  13. #33
    Rédacteur
    Avatar de Vincent Rogier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 373
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 373
    Points : 5 307
    Points
    5 307
    Par défaut
    Citation Envoyé par Emmanuel Delahaye Voir le message
    8Mo ... Euh, c'est un bon vieux fichier binaire... Si tu n'as pas la spécification du fichier, tu vas faire n'importe quoi...

    En tout cas, les fonctions de recherches de chaines ne fonctionnent pas, c'est clair.

    Si tu cherches une certaine séquence dans ce code, il faut lire caractères par caractères et implémenter un automate qui détecte la chaine, puis lit les carctères suivantys et en tire les données intéressantes (pour peu que leur spécifications soient claires).
    On est d'accord.

    Je lui ai fourni un code basique qui permet cette recherche, mais son fichier ne contient pas le mot 'Camera' comme il le soutient...

    J'ai édité son fichier comme précédemment dit avec en mode binaire, hexa et texte, ce mot n'y est pas...

    le fichier va jusqu'a 00801D20 mais le contenu est null à partir de 00301800
    Vincent Rogier.

    Rubrique ORACLE : Accueil - Forum - Tutoriels - FAQ - Livres - Blog

    Vous voulez contribuer à la rubrique Oracle ? Contactez la rubrique !

    OCILIB (C Driver for Oracle)

    Librairie C Open Source multi-plateformes pour accéder et manipuler des bases de données Oracle

  14. #34
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 49
    Points : 11
    Points
    11
    Par défaut
    merci vicenzo , je vais tester ton code.


    Pour le mot "Camera" moi jele trouve bien à l'adresse $8007f8.

    Le fichier s'arrête à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    007fbc90h: 81 D0 81 1D 81 58 81 21 81 75 81 F8 81 95 82    ; Ð.X!uø•‚
    Aujourd'hui 15h56
    ah bon . Moi le fichier il est plus grand que ca

  15. #35
    Rédacteur
    Avatar de Vincent Rogier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 373
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 373
    Points : 5 307
    Points
    5 307
    Par défaut
    vérifies donc ton fichier sur le ftp, il est à 8mo...
    Vincent Rogier.

    Rubrique ORACLE : Accueil - Forum - Tutoriels - FAQ - Livres - Blog

    Vous voulez contribuer à la rubrique Oracle ? Contactez la rubrique !

    OCILIB (C Driver for Oracle)

    Librairie C Open Source multi-plateformes pour accéder et manipuler des bases de données Oracle

  16. #36
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 49
    Points : 11
    Points
    11
    Par défaut
    Si tu cherches une certaine séquence dans ce code, il faut lire caractères par caractères et implémenter un automate qui détecte la chaine, puis lit les caractères suivants et en tire les données intéressantes (pour peu que leur spécifications soient claires).
    La lecture séquentiel, c'est exactement ce que je cherche à éviter. Si je lit octet par octet, le fichier est lu en 8h (je l'avais testé)...
    Mon logicielle doit être executé en moins de 5 secondes.
    Le traitement des .emi doit être fait en 1s.


    Pour les tags à récupéré, je sais exactement où ils se trouvent via l'éditeur hexadecimal. Le problème c'est le temps que le programme doit mettre pour les récupérer.
    Je veut récupéré la valeur de quelques tags précis. Donc pour cela je dois repérer les tags name. Et c'est là le programme puisque la recherche de caractère ne fonctionne pas.

    Pour le format emi il n'y a aucune infos nulle part. Mais j'ai pu récupéré la partie data de l'image sans problème.

  17. #37
    Rédacteur
    Avatar de Vincent Rogier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 373
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 373
    Points : 5 307
    Points
    5 307
    Par défaut
    Citation Envoyé par funkyKong Voir le message
    La lecture séquentiel, c'est exactement ce que je cherche à éviter. Si je lit octet par octet, le fichier est lu en 8h (je l'avais testé)...
    Mon logicielle doit être executé en moins de 5 secondes.
    Le traitement des .emi doit être fait en 1s.


    Pour les tags à récupéré, je sais exactement où ils se trouvent via l'éditeur hexadecimal. Le problème c'est le temps que le programme doit mettre pour les récupérer.
    Je veut récupéré la valeur de quelques tags précis. Donc pour cela je dois repérer les tags name. Et c'est là le programme puisque la recherche de caractère ne fonctionne pas.

    Pour le format emi il n'y a aucune infos nulle part. Mais j'ai pu récupéré la partie data de l'image sans problème.
    Combien de tags dois tu rechercher ?
    As tu replacé le bon fichier sur le ftp ?
    Vincent Rogier.

    Rubrique ORACLE : Accueil - Forum - Tutoriels - FAQ - Livres - Blog

    Vous voulez contribuer à la rubrique Oracle ? Contactez la rubrique !

    OCILIB (C Driver for Oracle)

    Librairie C Open Source multi-plateformes pour accéder et manipuler des bases de données Oracle

  18. #38
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 49
    Points : 11
    Points
    11
    Par défaut
    vérifies donc ton fichier sur le ftp, il est à 8mo...
    En effet, je sais pas ce qu'il sais passé avec ce site d'upload mais j'avais bien mis la bonne image.

    Je peut l'envoyer par mail sinon.

  19. #39
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 49
    Points : 11
    Points
    11
    Par défaut
    vicenzo, je t'ai envoyé les fichiers

  20. #40
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 49
    Points : 11
    Points
    11
    Par défaut
    Combien de tags dois tu rechercher ?
    Je ne sais pas exactement combien (cela ne depend pas de moi) mais je dirais entre 5 et 20 tags

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 3 PremièrePremière 123 DernièreDernière

Discussions similaires

  1. rechercher une sous chaine dans une chaine
    Par id.prog dans le forum Débuter avec Java
    Réponses: 3
    Dernier message: 25/01/2009, 17h59
  2. Rechercher une sous chaine dans un chaine
    Par franck06 dans le forum Access
    Réponses: 2
    Dernier message: 20/09/2006, 14h53
  3. Recherche une sous-chaine dans un champ ?
    Par nerick dans le forum Requêtes
    Réponses: 3
    Dernier message: 06/03/2006, 13h46
  4. Rechercher une sous chaine dans une chaine
    Par annedjomo dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 04/02/2005, 10h36
  5. Rechercher une sous chaine dans une chaine
    Par Oluha dans le forum ASP
    Réponses: 4
    Dernier message: 03/02/2005, 14h39

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