tu as un fichier *.emi que l'on peut tester ?
tu as un fichier *.emi que l'on peut tester ?
ton code mentionne str_istr() et non my_strstr()
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)
désolé j'ai oublier de montrer une partie de mon code:
ps: j'avais testé en mettant à la place mys_strstr et ça renvoyais NULL
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; }
Là la fonction my_strstr est appelée par str_istr
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...
Si il contient bien le mot Camera vers la fin du fichier. Plus précisément à cette adresse hexa: $8007f8
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
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).
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ø
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
merci vicenzo , je vais tester ton code.
Pour le mot "Camera" moi jele trouve bien à l'adresse $8007f8.
ah bon . Moi le fichier il est plus grand que caLe 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
vérifies donc ton fichier sur le ftp, il est à 8mo...
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é)...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).
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.
En effet, je sais pas ce qu'il sais passé avec ce site d'upload mais j'avais bien mis la bonne image.vérifies donc ton fichier sur le ftp, il est à 8mo...
Je peut l'envoyer par mail sinon.
Je ne sais pas exactement combien (cela ne depend pas de moi) mais je dirais entre 5 et 20 tagsCombien de tags dois tu rechercher ?
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager