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 :

Ajout de codes Hexa après extraction d'un fichier binaire


Sujet :

Delphi

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2010
    Messages : 18
    Points : 20
    Points
    20
    Par défaut Ajout de codes Hexa après extraction d'un fichier binaire
    Bonjour !

    Merci pour votre aide, mais comme souvent, on me demande plus : je dois faire des statistiques sur la sortie;

    ainsi il me faudrait ajouter $0D$0A à la fin de chaque ligne des 13 signes OMR,
    et j'en suis incapable, car je ne comprends pas tout le code


    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
    procedure TForm1.Button1Click(Sender: TObject);
    type
      TReadMode = (rmSearch, rmRead);
     
    const
      StartString :array [0..5] of byte = ($2b, $d3, $04, $d2, $01, $c5);
      EndString   :byte = $5A;
     
    var
      msIN        :TMemoryStream;
      msOut       :TMemoryStream;
      StringIndex :integer;
      i           :Int64;
      b           :byte;
      Mode        :TReadMode;
     
    begin
      msIN  := TMemoryStream.Create;
      msOUT := TMemoryStream.Create;
     
      try
        msIN.LoadFromFile('c:\temp\qtra06.txt');
        msIN.Position := 0;
     
        //Index dans la chaîne de départ
        StringIndex := 0;
     
        //Mode "Recherche"
        Mode := rmSearch;
     
        for i := 0 to msIN.Size -1 do
        begin
          //Lecture byte par byte
          msIN.ReadBuffer(b, 1);
     
          case Mode of
            rmSearch: //Recherche de la chaîne de départ
                      if b = StartString[StringIndex] then
                      begin
                        //Tous les bytes testés -> Mode "Lecture"
                        if StringIndex = High(StartString)
                        then Mode := rmRead
                        else inc(StringIndex);
                      end
                      else StringIndex := 0;
     
            rmRead:   //Repasse en mode "Recherche" si caractère de fin trouvé
                      //Sinon écriture dans le flux de sortie
                      if b <> EndString then
                        msOUT.WriteBuffer(b, 1)
                      else
                      begin
                        Mode := rmSearch;
                        StringIndex := 0;
                      end;
          end;
        end;
     
        msOUT.SaveToFile('c:\temp\qtra06_OUT.txt');
     
      finally
        msIN.Free;
        msOUT.Free;
      end;
    end;

    Merci de me dépanner et salutations

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 455
    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 455
    Points : 24 867
    Points
    24 867
    Par défaut
    Ce Code semble exlcure les caractères entre la chaine StartString et EndString
    exemple en mode texte
    toto+ÓÞÅtitiZtutu
    donnerait, si j'ai bien compris
    tototutu
    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

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2010
    Messages : 18
    Points : 20
    Points
    20
    Par défaut Précision
    Je me suis mal exprimé,
    mais je veux ajouter un code fin de ligne CR + LF
    après chaque ligne des 13 codes en output.

  4. #4
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Salut

    C'est le code proposé par Andnotor il me semble dans un précédent thread.

    En lisant son code ça donnerait ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
            rmRead:   //Repasse en mode "Recherche" si caractère de fin trouvé
                      //Sinon écriture dans le flux de sortie
                      if b <> EndString then
                      begin
                        msOUT.WriteBuffer(b, 1);
                        msOUT.WriterBuffer($0D, 1);
                        msOUT.WriterBuffer($0A, 1);
                      end
                      else
                      begin
                        Mode := rmSearch;
                        StringIndex := 0;
                      end;
    A tester.

    @+ Claudius

  5. #5
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 691
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 691
    Points : 13 121
    Points
    13 121
    Par défaut
    Plus exactement:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    const
      CRLFString  :array [0..1] of byte = ($13, $10);
     
    ...
            rmRead:   //Repasse en mode "Recherche" si caractère de fin trouvé
                      //Sinon écriture dans le flux de sortie
                      if b <> EndString then
                        msOUT.WriteBuffer(b, 1)
                      else
                      begin
                        msOUT.WriteBuffer(CRLFString, 2);
                        Mode := rmSearch;
                        StringIndex := 0;
                      end;

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2010
    Messages : 18
    Points : 20
    Points
    20
    Par défaut Merci
    Merci pour votre aide !

    Philippe

    PS : avez-vous un tutoriel à me recommander ?

    (Je sens que la demande va arriver)

  7. #7
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 691
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 691
    Points : 13 121
    Points
    13 121
    Par défaut
    Non pas un, mais plusieurs

    Regarde dans les sections FAQ et Tutoriels.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Toutes versions] Formatage chaine caracteres aprés extraction d'un fichier
    Par micol84 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 11/05/2015, 11h08
  2. Problème extraction d'un fichier binaire
    Par rayon-gama dans le forum Général Java
    Réponses: 23
    Dernier message: 05/04/2013, 09h08
  3. ETL : Extraction d'un fichier binaire.
    Par salom22 dans le forum Alimentation
    Réponses: 6
    Dernier message: 06/08/2012, 17h33
  4. Réponses: 3
    Dernier message: 22/09/2011, 16h02
  5. Code Hexa des metadatas d'un fichier FLV
    Par vikti dans le forum C
    Réponses: 3
    Dernier message: 03/12/2007, 12h39

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