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

 Delphi Discussion :

Rechercher une valeur hex dans un fichier


Sujet :

Delphi

  1. #21
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 447
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 447
    Points : 24 849
    Points
    24 849
    Par défaut
    Tu peux t'inspirer de SearchBinaryInFile pour faire ta propre fonction !
    SearchBinaryInFile est une approche générique !

    Tu peux très bien faire un fonction genre SearchMes200InFile, faut juste que tu lui donne un nom métier !
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  2. #22
    Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mars 2014
    Messages
    143
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Mars 2014
    Messages : 143
    Points : 60
    Points
    60
    Par défaut
    C'est bien ce que j'ai essayé de faire mais la fonction plante.
    J'ai essayé de faire un FileSeek et un FileRead dans la fonction, juste après le stockage de l'offset. La fonction tourne en boucle mais ne s'arrête jamais...

  3. #23
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 857
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 857
    Points : 11 291
    Points
    11 291
    Billets dans le blog
    6
    Par défaut
    Restaures-tu le curseur fichier à sa position initiale après avoir appliqué tes propres lectures ?
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  4. #24
    Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mars 2014
    Messages
    143
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Mars 2014
    Messages : 143
    Points : 60
    Points
    60
    Par défaut
    Non je ne le replace pas, je ne sais pas comment le repositionner au bon endroit (il doit falloir sauver la valeur en cours et la réutiliser pour le replacement mais à quoi doit être égale la valeur en cours du curseur ?)

  5. #25
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 447
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 447
    Points : 24 849
    Points
    24 849
    Par défaut
    Utilise iReaded c'est la position du début du Buffer
    Pour te repositionner au prochain buffer c'est iReaded + AmtTransferred;

    ce qui donne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
                         if KeepOffSet then
                         begin
                            SetLength(OffSets, Length(OffSets) + 1);
     
                            FileRead(FileToSearch, Toto[0], SizeOf(Toto)); Toto est un "array[0..199] of Byte"
                            ShowMessage(PAnsiChar(@Toto[0]);
                            FileSeek(FileToSearch, iReaded + AmtTransferred, FILE_BEGIN); // repositionne à la fin du dernier buffer
     
                            if AcceptOverlap then
                              OffSets[High(OffSets)] := iReaded + iSearchBufPos - iRememberOverlap
                            else
                              OffSets[High(OffSets)] := iReaded + iSearchBufPos - iRememberFound;
                         end;

    Pense que tu peux aussi lire dans SearchBuf, si celui-ci contient suffisamment de données


    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
                         if KeepOffSet then
                         begin
                            SetLength(OffSets, Length(OffSets) + 1);
     
                            if iSearch < AmtTransferred - SizeOf(Toto) then
                            begin
                              ShowMessage(Copy(StrPas(PAnsiChar(@SearchBuf[iSearch])), 1, SizeOf(Toto))  // attention au Caractère Zéro dans le binaire !
                            end
                            else
                            begin
                              FileRead(FileToSearch, Toto[0], SizeOf(Toto)); Toto est un "array[0..199] of Byte"
                              ShowMessage(PAnsiChar(@Toto[0]); // attention au Caractère Zéro dans le binaire !
                              FileSeek(FileToSearch, iReaded + AmtTransferred, FILE_BEGIN); // repositionne à la fin du dernier buffer
                            end;
     
                            if AcceptOverlap then
                              OffSets[High(OffSets)] := iReaded + iSearchBufPos - iRememberOverlap
                            else
                              OffSets[High(OffSets)] := iReaded + iSearchBufPos - iRememberFound;
                         end;
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  6. #26
    Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mars 2014
    Messages
    143
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Mars 2014
    Messages : 143
    Points : 60
    Points
    60
    Par défaut
    Merci beaucoup pour cette réponse, je teste ca dès demain

  7. #27
    Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mars 2014
    Messages
    143
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Mars 2014
    Messages : 143
    Points : 60
    Points
    60
    Par défaut
    Merci pour la réponse, j'ai réussi à adapter ce que je voulais par contre j'ai été obligé de rajouter un FileSeek avant le FileRead et je n'ai pas le tout dernier offset (alors que je l'ai quand j'utilise la fonction normale) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
                         if KeepOffSet then
                         begin
                            SetLength(OffSets, Length(OffSets) + 1);
     
                            FileSeek(FileToSearch, OffSets[High(OffSets)-1] + Length(SearchBinary) , FILE_BEGIN);
                            FileRead(FileToSearch, Toto[0], SizeOf(Toto)); Toto est un "array[0..199] of Byte"
                            ShowMessage(PAnsiChar(@Toto[0]);
                            FileSeek(FileToSearch, iReaded + AmtTransferred, FILE_BEGIN); // repositionne à la fin du dernier buffer
     
                            if AcceptOverlap then
                              OffSets[High(OffSets)] := iReaded + iSearchBufPos - iRememberOverlap
                            else
                              OffSets[High(OffSets)] := iReaded + iSearchBufPos - iRememberFound;
                         end;
    Edit : j'ai finalement fais cette modif et jca semble bien fonctionner pour le dernier Offset :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
                         if KeepOffSet then
                         begin
                            SetLength(OffSets, Length(OffSets) + 1);
     
                            if AcceptOverlap then
                              OffSets[High(OffSets)] := iReaded + iSearchBufPos - iRememberOverlap
                            else
                              OffSets[High(OffSets)] := iReaded + iSearchBufPos - iRememberFound;
                         end;
     
                            FileSeek(FileToSearch, OffSets[High(OffSets)] + Length(SearchBinary) , FILE_BEGIN);
                            FileRead(FileToSearch, Toto[0], SizeOf(Toto)); Toto est un "array[0..199] of Byte"
                            ShowMessage(PAnsiChar(@Toto[0]);
                            FileSeek(FileToSearch, iReaded + AmtTransferred, FILE_BEGIN); // repositionne à la fin du dernier buffer

Discussions similaires

  1. Assigner a une variable une valeur lue dans un fichier texte
    Par mapotam dans le forum Shell et commandes GNU
    Réponses: 7
    Dernier message: 22/12/2009, 14h46
  2. Réponses: 15
    Dernier message: 14/08/2009, 14h45
  3. Rechercher une valeur précise dans une table
    Par tonton54 dans le forum MySQL
    Réponses: 5
    Dernier message: 28/10/2008, 15h58
  4. Rechercher une valeur particulière dans une table
    Par stefsas dans le forum SAS Base
    Réponses: 2
    Dernier message: 22/09/2008, 17h40
  5. Réponses: 9
    Dernier message: 12/08/2008, 16h50

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