Recherche en hexadécimal dans un fichier

Résolu
Rudy3212 Messages postés 154 Date d'inscription vendredi 20 août 2004 Statut Membre Dernière intervention 31 décembre 2007 - 16 nov. 2007 à 22:36
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 - 18 nov. 2007 à 17:36
Bonjours a tous,

J'aimerai ouvrir un fichier en hexadecimal et rechercher une chaine soit en ascii ou directement le code hexa.

Et bien sur connaitre l'offset de la chaine trouver.

Je ne trouver aucune source fesant cela, si quelqu'un a une idée sur un tel système :).

Merci D'avance,
BestPig

14 réponses

Rudy3212 Messages postés 154 Date d'inscription vendredi 20 août 2004 Statut Membre Dernière intervention 31 décembre 2007
18 nov. 2007 à 15:58
Merci bcp pour ton aide cantador mais je n'arrive pas a faire fonctionner ta fonction.
Par contre j'ai trouver ce que je chercher ici :
http://www.delphifaq.com/faq/delphi/strings/f86.shtml

Mais merci infiniment quand même :)

BestPig
3
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
17 nov. 2007 à 10:48
Un p'tit coup de moteur de recherche.. et hop
Il y plein d'exemples sur le forum.

cantador
0
Rudy3212 Messages postés 154 Date d'inscription vendredi 20 août 2004 Statut Membre Dernière intervention 31 décembre 2007
17 nov. 2007 à 12:34
Justement j'ai chercher sur le forum mais rien trouver, je veut rechercher en hexa dans un fichier pas dans une string ou un memo.

Je vait refaire une recherche mais j'avait déja fait :(

BestPig
0
Rudy3212 Messages postés 154 Date d'inscription vendredi 20 août 2004 Statut Membre Dernière intervention 31 décembre 2007
17 nov. 2007 à 19:15
Merci mais le code ne montre pas comment rechercher une chaine, on peut juste modifier et ouvrir un fichier mais pas faire une recherche.

BestPig
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
17 nov. 2007 à 19:55
Voilà une superbe fonction déposée par foxi mais comme
il est occupé à faire ses bd..

function TFAlarme.Parser(const Chaine, Separat: string; const Occurence: cardinal = 1): string;
var
  i, p1, p2, ld: integer;
begin
  Result := '';
  if (posex(Separat, Chaine[1]) = 1) and (Occurence <= 1) then exit;
  p1 := 1;
  ld := Length(Separat);
  for I := 1 to Occurence - 1 do
  begin
    p1 := posex(Separat, Chaine, p1);
    if P1 = 0 then
      exit
    else
      p1 := p1 + ld;
  end;
  p2 := posex(Separat, Chaine, p1);
  if p2 = 0 then
    p2 := length(Chaine) + 1;
  Result := copy(Chaine, p1, p2 - p1);
end;

cantador
0
Rudy3212 Messages postés 154 Date d'inscription vendredi 20 août 2004 Statut Membre Dernière intervention 31 décembre 2007
17 nov. 2007 à 20:58
Hum, si je comprend bien la fonction ça recherche dans une string, hors je cherche a faire une recherche hexa dans un fichier en l'ouvrant en mode binaire.

BestPig
0
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
17 nov. 2007 à 22:28
Pourquoi faire simple qd on peut faire...
bon, on va essayer de trouver qlqchose..

cantador
0
Rudy3212 Messages postés 154 Date d'inscription vendredi 20 août 2004 Statut Membre Dernière intervention 31 décembre 2007
17 nov. 2007 à 22:56
Merci, sa serait sympa si tu pouvait trouver quelque chose, moi j'ai pas trouver :(.

cantador on t'adore :P, la rime ...

BestPig
0
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
17 nov. 2007 à 23:45
Oui, ben, tu n'as pas du chercher bien longtemps
parceque en 3212 secondes je croule sous les infos..


Peux-tu préciser exactement ce que tu veux faire, c'est-à-dire, quelle est la nature de l'information que tu souhaites récupérer dans ce fichier binaire ?

cantador
0
Rudy3212 Messages postés 154 Date d'inscription vendredi 20 août 2004 Statut Membre Dernière intervention 31 décembre 2007
17 nov. 2007 à 23:52
C'est un fichier de configuration et dedans, j'ai besoin de connaitre l'offset de :
\x50\x68\x72\x61\x73\x65 soit 'Phrase' en ASCII

BestPig
0
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
18 nov. 2007 à 12:29
var
F, F2: file;
lus,ecrit:integer;
Buf: array[1..1024] of Char;
begin
if OpenDialog.Execute then
begin
AssignFile(F, OpenDialog.FileName);
Reset(F, 1);
AssignFile(F2, SaveDialog.FileName);
Rewrite(F2, 1);                                  // Tu peux aussi renvoyer dans un mémo
repeat
BlockRead(F, Buf, SizeOf(Buf), lus);
BlockWrite(F2, Buf, lus, ecrit); on
until (lut = 0) or (ecrit <> lus )
CloseFile(F);
CloseFile(F2);
end;
end;







cantador
0
Rudy3212 Messages postés 154 Date d'inscription vendredi 20 août 2004 Statut Membre Dernière intervention 31 décembre 2007
18 nov. 2007 à 14:16
Merci,
Je n'arrive pas a le faire marcher :S

J'ai ces erreurs :
[Error] Unit1.pas(42): Undeclared identifier: 'on'
[Error] Unit1.pas(43): Undeclared identifier: 'lut'

Pour le lut c'est une erreur de frappe cé lus je pense.
Mais pour le on :s, j'ai essayer de le viré, rajouter un ; a la ligne dessous sa compile mais sa provoque un erreur sur le blockwrite.

Et je ne voit pas ou on met les valeur a rechercher .., si tu pouvait expliquer un peu la fonction sa serait vraiment cool.

Merci bcp cantador pour ton aide.

BestPig
0
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
18 nov. 2007 à 14:30
tu vires le "on".. et le lut = lus..
le dimanche je fatigue un peu..
ok pour çà..



Ta variable de recherche c'est buf bien sûr..



@+



cantador
0
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
18 nov. 2007 à 17:36
Tu as du oublier un truc..
Enfin l'important est que tu t'en est sorti..
ça marche d'ailleurs on retrouve à peu près la même chose dans l'aide de delphi  :

var


  FromF, ToF: file;
  NumRead, NumWritten: Integer;
  Buf: array[1..2048] of Char;
begin
  if OpenDialog1.Execute then { Affichage de la boîte de dialogue d'ouverture }
  begin
    AssignFile(FromF, OpenDialog1.FileName);
    Reset(FromF, 1); { Taille d'enregistrement = 1 }
    if SaveDialog1.Execute then      { Affichage de la boîte de dialogue d'enregistrement}
    begin
      AssignFile(ToF, SaveDialog1.FileName); { Ouverture du fichier de sortie }


      Rewrite(ToF, 1); { Taille d'enregistrement = 1 }
      Canvas.TextOut(10, 10, 'Copie de ' + IntToStr(FileSize(FromF))
        + ' octets...');
      repeat
        BlockRead(FromF, Buf, SizeOf(Buf), NumRead);
        BlockWrite(ToF, Buf, NumRead, NumWritten);
      until (NumRead = 0) or (NumWritten <> NumRead);
      CloseFile(FromF);
      CloseFile(ToF);
    end;
  end;
end;

Salut !

cantador
0
Rejoignez-nous