Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
865 connectés 

  FORUM HardWare.fr
  Programmation
  Delphi/Pascal

  Cherche une chaîne ds un fichier .PDF

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Cherche une chaîne ds un fichier .PDF

n°864268
HERIBERT
Posté le 04-10-2004 à 15:28:17  profilanswer
 

Soit un fichier Acrobat, donc à textension .PDF . Je le charge en mémoire, et je lance AnsiPos() à la recherche d'une chaine - de type string, pas un tableau de caractères : j'aurais peut-être dû.
 
UltaEdit me trouve, et encore pas toujours, cette chaîne.  
 
Je cherche :heink: C'est peut-être pas AnsiPos() :??: Dois-je passer par un tableau de caractères ?  
 
Merci ;)

mood
Publicité
Posté le 04-10-2004 à 15:28:17  profilanswer
 

n°864283
antp
Super Administrateur
Champion des excuses bidons
Posté le 04-10-2004 à 15:35:07  profilanswer
 

ou bien "Pos" tout court, mais le PDF c'est du binaire, il faut voir comment tu le mets dans la chaîne...


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°864304
HERIBERT
Posté le 04-10-2004 à 15:41:56  profilanswer
 

antp a écrit :

ou bien "Pos" tout court, mais le PDF c'est du binaire, il faut voir comment tu le mets dans la chaîne...


Ds mon test, j'écris la chaîne entre '' . Oui, PDF, c'est du binaire. Mais  il doit bien y avoir un moyen de trouver une chaîne de caractères... CTRL +F, à l'intérieur du fichier ouvert avec Acrobat (donc : SOUS Acrobat) trouve effectivement la chaîne. A ts les coups.

n°864313
antp
Super Administrateur
Champion des excuses bidons
Posté le 04-10-2004 à 15:46:11  profilanswer
 

Ouais mais comme c'est du binaire, il peut contenir des "0", qui pour certaines fonctions indiquent une fin de chaîne (les fonctions qui travaillent avec des pchar).
Donc montre comment tu mets le contenu du fichier dans la chaîne :p
Et qu'est-ce que tu entends par la chaîne entre ' ' ? Si tu rajoutes des guillements ça ne marchera pas...


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°864361
HERIBERT
Posté le 04-10-2004 à 16:34:16  profilanswer
 

antp a écrit :

Ouais mais comme c'est du binaire, il peut contenir des "0", qui pour certaines fonctions indiquent une fin de chaîne (les fonctions qui travaillent avec des pchar).
Donc montre comment tu mets le contenu du fichier dans la chaîne :p
Et qu'est-ce que tu entends par la chaîne entre ' ' ? Si tu rajoutes des guillements ça ne marchera pas...


Je charge le contenu du fichier :
        Handle_F := FileOPen(Nom_F, fmOpenRead);
        Nb_Octets_Lus := FileRead(Handle_F, Ptr_Bloc^, Surface_Bloc);
        FileClose(Handle_F);
Surface_Bloc est la taille du buffer, largement suffisante.
 
Recherche de la chaîne :  
        Pos_Ds_F := AnsiPos('Toute personne', Ptr_Bloc);
 
Pos_Ds_F : longint
Ptr_Bloc : PChar pointe sur le buffer
 
Ca vient peut-être dun pointeur. Je me gourre pas mal sur la syntaxe des pointeurs en Pascal :sarcastic:

n°864363
antp
Super Administrateur
Champion des excuses bidons
Posté le 04-10-2004 à 16:36:39  profilanswer
 

Ça m'a l'air bien compliqué ton truc...
 
var
  s: string;
  p Integer,
  f: TFileStream;
begin
  f := TFileStream.Create(nom_f, fmOpenRead);
  try
    SetLength(s, f.Size);
    f.Read(s[1], f.Size);
  finally
    f.Free;
  end;
  p := Pos('test', s);
  // ...
end.
 
[:spamafote]
 
Et comme je l'ai dit,
 

Citation :


[...] il peut contenir des "0", qui pour certaines fonctions indiquent une fin de chaîne (les fonctions qui travaillent avec des pchar).  


Message édité par antp le 04-10-2004 à 16:38:34

---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°864369
HERIBERT
Posté le 04-10-2004 à 16:41:18  profilanswer
 

antp a écrit :

Ça m'a l'air bien compliqué ton truc...
 
var
  s: string;
  p Integer,
  f: TFileStream;
begin
  f := TFileStream.Create(nom_f, fmOpenRead);
  try
    SetLength(s, f.Size);
    f.Read(s[1], f.Size);
  finally
    f.Free;
  end;
  p := Pos('test', s);
  // ...
end.
 
[:spamafote]
 
Et comme je l'ai dit,
 

Citation :


[...] il peut contenir des "0", qui pour certaines fonctions indiquent une fin de chaîne (les fonctions qui travaillent avec des pchar).  




Je vais tester ça.  
 
Etrange qu'on ne puisse pas travailler au corps des fichiers PDF (binaires, en règle générale) avec autre chose que TFileStream :??:

n°864380
antp
Super Administrateur
Champion des excuses bidons
Posté le 04-10-2004 à 16:53:59  profilanswer
 

On peut.
Mais je trouve ça plus pratique avec les TFileStream, pas toi ?
Le problème de ton code c'est que tu utilises des PChar, ça ne passera jamais avec du binaire vu qu'au premier octet à 0 rencontré il s'arrête, croyant que c'est le fin de la chaîne.
Puis les pointeurs et espaces mémoire de "taille suffisante", il faut s'en méfier :D (note que le code posté ci-dessus plantera si le fichier fait plus de 2 GB, ce n'est pas encore parfait, mais de toute façon la RAM de la machine sera remplie avant... il faudrait chercher par blocs plutôt que de tout charger en RAM)


Message édité par antp le 04-10-2004 à 16:54:28

---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°864384
HERIBERT
Posté le 04-10-2004 à 16:58:26  profilanswer
 

antp a écrit :

On peut.
Mais je trouve ça plus pratique avec les TFileStream, pas toi ?
Le problème de ton code c'est que tu utilises des PChar, ça ne passera jamais avec du binaire vu qu'au premier octet à 0 rencontré il s'arrête, croyant que c'est le fin de la chaîne.
Puis les pointeurs et espaces mémoire de "taille suffisante", il faut s'en méfier :D (note que le code posté ci-dessus plantera si le fichier fait plus de 2 GB, ce n'est pas encore parfait, mais de toute façon la RAM de la machine sera remplie avant... il faudrait chercher par blocs plutôt que de tout charger en RAM)


1/ "Mais je trouve ça plus pratique avec les TFileStream, pas toi ?" : moi, j'aime bien les handle :)
 
2/ Que oui ! J'y pensais pas... PChar() : il cherche travaille en chaîne à \0 terminal. Je vais plaquer un "masque" qui pourrait être un pointeur de type tableau de caractères. Et le ballader sur la longueur du buffer.

n°864386
antp
Super Administrateur
Champion des excuses bidons
Posté le 04-10-2004 à 17:00:02  profilanswer
 

THandleStream [:ddr555]


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
mood
Publicité
Posté le 04-10-2004 à 17:00:02  profilanswer
 

n°864401
HelloWorld
Salut tout le monde!
Posté le 04-10-2004 à 17:17:26  profilanswer
 

Il me semble que PDF c'est du texte, mais en base64 (portabilité...). Le texte peut et est souvent compressé dedans.


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°864409
HERIBERT
Posté le 04-10-2004 à 17:29:44  profilanswer
 

HelloWorld a écrit :

Il me semble que PDF c'est du texte, mais en base64 (portabilité...). Le texte peut et est souvent compressé dedans.


Voili, voilou  :p Ca va me faciliter le travail :D

n°864424
HelloWorld
Salut tout le monde!
Posté le 04-10-2004 à 17:47:08  profilanswer
 
n°864770
HERIBERT
Posté le 05-10-2004 à 07:35:45  profilanswer
 


J'ai vu le soft : soit, avec lui, je "dézippe" un PDF. Mais de là à ce MON prog lise dedans... Or, précisément, c'est le but du jeu.

n°865004
HelloWorld
Salut tout le monde!
Posté le 05-10-2004 à 11:44:39  profilanswer
 

Un PDF est constitué de divers flux, certains d'entre eux stockent le texte et ce texte est généralement zippé. J'ai pas lu en détaisl, mais ce soft, je pense, recherche les flux texte compressés et les décompresse, et ainsi extrait le texte du PDF.


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°865861
HERIBERT
Posté le 06-10-2004 à 11:20:43  profilanswer
 

HelloWorld a écrit :

Un PDF est constitué de divers flux, certains d'entre eux stockent le texte et ce texte est généralement zippé. J'ai pas lu en détaisl, mais ce soft, je pense, recherche les flux texte compressés et les décompresse, et ainsi extrait le texte du PDF.


Donc, plutôt que stocker des PDF, j'en extraierais le contenu ds un fichier Word ou RTF (aïe ! s'il y a des images !).
 
Pas mal :heink:

n°865886
HelloWorld
Salut tout le monde!
Posté le 06-10-2004 à 11:39:39  profilanswer
 

Attend attend... Tu lis jusqu'au bout ce que j'écris ? Ca fait 2 fois là.
Oubre un PDF avec worpad, tu vas voir plein de blocs obj...endobj Chaque bloc est d'un certain type et comprend une certaine donnée. Certains bloc contiennent en plus stream...endstream, c'est les blocs de texte d'après le doc.

Citation :

10 0 obj
<< /Length 148 /Filter /FlateDecode >>  
stream
H‰TŽ±
A Dû|ŔZ˜Kr»·»­¢~€ùƒCÁÆ-ü}ãy™™½ÓpÊPø´q3HÌzMÆ)¡ha+m„?i8ôŒ¹¯ úLÃù¢¸wÚ K.ŸIàoÚ
ØúƒŽN
]Ym#§
Y
&•ó„ðΆוn$‹kpk‘*\!l)V|-ȯÐWJuú?  
zÖ)M
endstream
endobj


Le texte est zippé.


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Delphi/Pascal

  Cherche une chaîne ds un fichier .PDF

 

Sujets relatifs
Lire un fichier web en C++ avec wxWidgetsUn programme qui trie ce qu'il y a dans le fichier txt
comment ouvrir un fichier php[JAVA] generer un fichier bat windows depuis du code java pb encoding
Cherche contrôle Delphi de gestion arborescente d'optionsPDF à partir d'une page PHP
cherche un programmeComment inclure un fichier word ds du html?
cherche idée de prog en Java (débutant)insertion fichier existant + version windows
Plus de sujets relatifs à : Cherche une chaîne ds un fichier .PDF


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR