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

Lazarus Pascal Discussion :

[0.9.28.2] Doc sur units zip, ziputils, zlib [Lazarus]


Sujet :

Lazarus Pascal

  1. #1
    Invité
    Invité(e)
    Par défaut [0.9.28.2] Doc sur units zip, ziputils, zlib
    Bonjour,

    Je cherche de la doc sur les units de décompression zip, ziputils (éventuellement zlib) intégrées à Lazarus pour charger en mémoire un fichier de logs.gz compressé (sous Linux). Merci.

    Cordialement. Gilles
    Dernière modification par Invité ; 20/04/2010 à 16h32.

  2. #2
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2010
    Messages : 235
    Points : 506
    Points
    506
    Par défaut
    J'ai jeté un coup d'oeil aux sources de freepascal. Toutes les unités dont tu parles sont issues de 2 'packages' différents:
    • zlib qui fournit l'unité zlib
    • paszlib qui fournit plusieurs unité dont ziputils, zip et paszlib


    Zlib est une interface pascal pour la bibliothèque zlib (http://www.zlib.net/). Paszlib est un portage 100% pascal de cette même bibliothèque.

    Premier problème : choisir entre l'une ou l'autre. Je pense que Zlib plus de chance d'être à jours mais en contrepartie ton programme devient dépendant d'une bibliothèque partagée.

    Dans un cas comme dans l'autre, au niveau documentations, tu dois pouvoir t'en tirer avec :


  3. #3
    Invité
    Invité(e)
    Par défaut
    Merci pour la réponse rapide...

    J'ai essayé d'utiliser TZipper et TUnZipper... La doc est tellement bien faite que je ne sais pas si cela compresse en .gz (et cela à la rigueur je m'en moque) et si cela décompresse du .gz (ceci m'intéresse).

    Alors c'est tellement bien foutu que la procedure de Zip on la trouve (sur le bug tracker) ... mais pas l'utilisation d'UnZip
    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
     
    //uses zlib2;
    procedure TForm1.btnZipClick(Sender: TObject);
    var
      zipFile : string;
      Zipper: TZipper;
     
      F: TFileStream;
     
    begin
      if Trim(editFileName.Text) = '' then begin
        ShowMessage('You must supply a file name to zip.');
        editFileName.SetFocus;
        Exit;
      end;
     
      if NOT FileExists( Trim(editFileName.Text) ) then begin
        ShowMessage('File '+Trim(editFileName.Text)+' not found.');
        editFileName.SetFocus;
        Exit;
      end;
     
      btnZip.Enabled := False;
      Self.SetCursor(crHourGlass);
     
      try
        zipFile := Trim(editFileName.Text)+'.zip';
        Zipper := TZipper.Create;
        Zipper.FileName := zipFile;
     
        F := TFileStream.Create(Trim(editFileName.Text), fmOpenRead);
        Zipper.Entries.AddFileEntry(F, Trim(editFileName.Text));
        Zipper.ZipAllFiles;
     
        ShowMessage(zipFile+' created.');
      finally
        F.Free;
        btnZip.Enabled := True;
        Self.SetCursor(crDefault);
      End;
    end;
    Cela m'agace un peu... Des plombes pour dezipper un malheureux fichier de log ! Je peux évidemment passer par BaseUnix mais quand même !

    Sinon, oui faut aller à la pêche dans les sources mais là je ne suis qu'utilisateur de l'IDE.

    J'ai inversé le code avec Tunzipper. J'obtiens du SIGSEGV...

    Mon problème c'est simplement, comment je peux décompresser un gz sous Linux avec Lazarus sans me prendre la tête et y passer une 1/2 journée ? [Quoique, j'en suis pas loin !]


    Cordialement. Gilles
    Dernière modification par Invité ; 21/04/2010 à 10h02.

  4. #4
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2010
    Messages : 235
    Points : 506
    Points
    506
    Par défaut
    Si ça peut t'aider un petit programme minimaliste pour dezipper une archive dans le dossier courant ('.') :
    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
     
    program TestUnzip;
     
    {$mode objfpc}
     
    uses Classes, zipper;
     
    var
      InFile: String;
     
      AUnzipper: TUnzipper;
    begin
      InFile:='test.zip';
     
      AUnzipper := TUnzipper.Create;
      AUnzipper.OutPutPath := '.';
      AUnzipper.UnZipAllFiles(InFile);
    end.
    D'après la commande file de mon ubuntu les fichiers créés par TZipper sont du zip pas du gz. Et la décompression des gz ne marche pas alors que la zlib les prend en charge. Peut être qu'en utilisant pas paszlib mais l'unité zlib...

  5. #5
    Invité
    Invité(e)
    Par défaut
    Merci.

    je teste et vous tiens au courant.
    Cordialement. Gilles

  6. #6
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    J'ai laissé tomber les ZIPs&co* et suis repassé directement au Tprocess. Ce code fonctionne : il dezippe puis lit le fichier .gz grâce à la commande linux zcat.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
       aStringList := TStringList.Create;
       //Deb lecture du fichier 'kern.log.2.gz' et chargement dans aStringList
       aProcess := TProcess.Create(nil);
       aProcess.CommandLine := 'zcat kern.log.2.gz';
       aProcess.Options := aProcess.Options + [poUsePipes] - [poWaitOnExit]; //**
       aProcess.Execute;
       aStringList.LoadFromStream(aProcess.Output);
       aProcess.Free;
       //Fin lecture du fichier 'kern.log.2.gz' et chargement dans aStringList
       aStringList.SaveToFile('output.txt'); //Par exemple
       aStringList.Free;
    *Apparemment l'unit "intégrée" -si on peut dire- zLib pourrait convenir sachant qu'il faut récupérer une .so -si j'ai bien compris- et que la déclaration de zlib dans les uses indique rapidement qu'il manque un fichier.inc. Rq sur Delphi j'utilise 7z pour créer des archives (7za) et qui me donne toutes satisfactions même sur des grands volumes. 7za semble exister sous Linux. Enfin dans ce cas, ce n'est pas justifié : je voulais simplement lire les logs.gz.

    **
    + [poUsePipes] Obligatoirement à true
    - [poWaitOnExit] Obligatoirement à false (Normalement à false par défaut...)

    Donc résolu mais mal... C'est décevant. Si quelqu'un(e) a mieux, je suis preneur.
    Cordialement. Gilles
    Dernière modification par Invité ; 21/04/2010 à 18h29.

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

Discussions similaires

  1. [TP] Doc sur entête de fichier zip
    Par TheBigMac dans le forum Turbo Pascal
    Réponses: 4
    Dernier message: 21/10/2007, 11h59
  2. Doc sur Debug de Ms-Dos
    Par gtr dans le forum Assembleur
    Réponses: 13
    Dernier message: 23/09/2003, 09h06
  3. doc sur interbase
    Par zopeman dans le forum InterBase
    Réponses: 3
    Dernier message: 04/08/2003, 16h10
  4. recherche doc sur les courbe de bézier
    Par amaury pouly dans le forum OpenGL
    Réponses: 4
    Dernier message: 29/04/2003, 22h41
  5. Réponses: 4
    Dernier message: 27/03/2002, 11h03

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