marco62118
Messages postés35Date d'inscriptionmercredi 30 janvier 2008StatutMembreDernière intervention25 juin 2015 21 oct. 2011 à 23:46
Bonjour
Je ne suis pas un pratiquant du delphi mais cequi m'intéresse et de comprendre le principe de ctte fonction ?
J'ai aussi ce problème de connaitre le codage de mon fichier avant de pouvoir l'ouvrir et je voudrais pouvoir essayer d'adapter votre code à du Visual Prolog
hoby500
Messages postés86Date d'inscriptionmardi 25 février 2003StatutMembreDernière intervention26 mai 2019 22 mars 2011 à 12:43
Salut
Elle n'est pas mal votre fonction, elle m'a rendu service 3 ans après sa publication.
Seulement je vous reproche de l'avoir un peu compliquer la manière de la programmer.
Voici ma version simplifiée et un peu plus étendue :
for TxtFileType := High(tTxtFileType) downto Low(TxtFileType) do
if (Sign and TxtFileSigns[TxtFileType].Mask) = TxtFileSigns[TxtFileType].Sign then
begin
result := TxtFileType;
break;
end;
except
// ShowMessage('pb '+ FileName)
end
end;
chesnetda
Messages postés9Date d'inscriptionmercredi 31 mai 2006StatutMembreDernière intervention 8 février 2010 8 févr. 2010 à 19:25
Juste pour donner raison à DelphiProg (quand on met le doigt dans l'engrenage, ...), la signature WordDoc est en fait la même pour les document PPT et XLS créés avec Office XP (=version 2003 je crois). En utilisant la routine de f0xi sur un DocX (Office 2007), le "sign" est $04034B50...
Cordialement,
David
jackalunion
Messages postés128Date d'inscriptionmercredi 8 janvier 2003StatutMembreDernière intervention14 juillet 2008 25 juin 2008 à 04:04
je comprend maintenant votre logique de programation
Salut,
Je cherche à décoder (lire) une disquette de données écrite pour un OS appelé rmx.
après avoir fait un dump, j'arrive à lire quelque chose, mais la plupart des caractères sont des 'carrés' (des caractères non-reconnu donc!
Est-il possible de les lire avec cette routine, ou faut-il la modifier...
Merci pour votre aide précieuse!!
Phil.
Ci joint extrait du dump:
%»Fó'B%|çî;Ý>Ã*3Ð=gÍûLÝ?ð§mo/uåwq(ÉãÌ衹ò'Eü?å???Ïjh#Ñù|?Ò
Îõ|Cùà$LûK®COÞäg
Ïß?S??¹w4p~iàó~OõÖÃ
f0xi
Messages postés4205Date d'inscriptionsamedi 16 octobre 2004StatutModérateurDernière intervention12 mars 202235 21 nov. 2005 à 05:08
Haha!
oui en effet ... mais je justifie l'apparition de la detection des types RTF et WORD pour cette raison simple :
l'extention .DOC! qui si tu te rapel au temps de MsDOS ete largement utilisée pour les fichier textes brut et meme encore maintenant vus que microsoft c'est indellicatement approprié l'extention .NFO!
donc pour ma par, je tombe encore sur des Readme.doc (texte brut) mais egalement des Readme.doc (rtf) et Readme.doc (word!)
d'ou l'interet de savoir si le .DOC est un fichier texte brut, rtf ou word ...
et pour prevenir tout probleme de gens succeptible de me demander comment faire une fonction qui detecte les avi ou wav ou je ne sais trop quoi d'autre, je leur repond directement :
Editeur Hexadecimal, recherche sur le web ou par comparaison de plusieurs fichiers de meme type et pouf c'est magique! en gros ... investigation complete.
aprés c'est une question d'habitude et de niveau pour savoir ou et comment est codé la signature d'un fichier ... certain sont simple ... d'autre moins evidents (mais c'est rare donc pas zip ... ^^ )
ps : pour ceux qui n'ont pas compris la blague de compresseur de fichiers ... rare : .RAR donc pas .ZIP ^^
hola ... ça s'ameliore pas avec le temps mes blagues...
cs_Delphiprog
Messages postés4297Date d'inscriptionsamedi 19 janvier 2002StatutMembreDernière intervention 9 janvier 201332 15 nov. 2005 à 23:33
Je renouvelle mes félicitations et te remercie de t'être penché sur ce problème.
Cela dit, il ne faut pas que cette fonction devienne une usine à gaz à force de vouloir détecter tout type de fichier. A l'origine, il ne s'agissait que de détecter l'encodage des caractères, pas un type de document issu d'une application particulière. Sinon, on n'en finit pas : dans quelques temps, comment détectera-t-on un document word encodé en unicode big indian, hein ?
Et puisque tu as mis le doigt dans l'engrenage, les emm...s de service ne vont pas se priver de te demander comment on fait pour reconnaitre une fichier issu de telle ou telle application ?
Mon pauvre fOxi, t'as pas fini...;o)
21 oct. 2011 à 23:46
Je ne suis pas un pratiquant du delphi mais cequi m'intéresse et de comprendre le principe de ctte fonction ?
J'ai aussi ce problème de connaitre le codage de mon fichier avant de pouvoir l'ouvrir et je voudrais pouvoir essayer d'adapter votre code à du Visual Prolog
22 mars 2011 à 12:43
Elle n'est pas mal votre fonction, elle m'a rendu service 3 ans après sa publication.
Seulement je vous reproche de l'avoir un peu compliquer la manière de la programmer.
Voici ma version simplifiée et un peu plus étendue :
type
TTxtFileType = (txTxtOrBin, txUTF8, txUNICODE, txUNIBIG, txRTF, txXLS, txWORD, txPDF, txEXE, txZIP);
Const
STxtFileType : array[TTxtFileType] of string
= ('TEXT', 'UTF8', 'UNICODE', 'UNIBIG','RTF', 'WORD', 'Excel', 'PDF', 'BINAIRE', 'ZIP');
//-------------------------------------------------------------------------------
function GetTypeOfTextfile(const filename : string) : TTxtFileType;
type
TTxtFileSign = record
Sign : LongWord;
Mask : LongWord;
end;
const
TxtFileSigns : array[TTxtFileType] of TTxtFileSign
= (
( Sign: $00000000; Mask: $FFFFFFFF), // txTxtOrBin
( Sign: $00BFBBEF; Mask: $00FFFFFF), // txUTF8
( Sign: $0000FEFF; Mask: $FF00FFFF), // txUNICODE
( Sign: $0000FFFE; Mask: $00FFFFFF), // txUNIBIG
( Sign: $74725C7B; Mask: $FFFFFFFF), // txRTF
( Sign: $E011CFD0; Mask: $FFFFFFFF), // txWORDDOC
( Sign: $E011CFD0; Mask: $FFFFFFFF), // txXLS
( Sign: $46445025; Mask: $FFFFFFFF), // txPDF
( Sign: $00005A4D; Mask: $0000FFFF), // txEXE
( Sign: $04034B50; Mask: $FFFFFFFF) // txZIP
);
var
Flux : TFileStream;
Sign : LongWord;
TxtFileType : TTxtFileType;
begin
result := txTxtOrBin;
try
Flux := TFileStream.Create(FileName, fmOpenRead);
try
Flux.Read(Sign, 4);
finally
Flux.Free;
end;
for TxtFileType := High(tTxtFileType) downto Low(TxtFileType) do
if (Sign and TxtFileSigns[TxtFileType].Mask) = TxtFileSigns[TxtFileType].Sign then
begin
result := TxtFileType;
break;
end;
except
// ShowMessage('pb '+ FileName)
end
end;
8 févr. 2010 à 19:25
Cordialement,
David
25 juin 2008 à 04:04
25 juin 2006 à 08:54
Je cherche à décoder (lire) une disquette de données écrite pour un OS appelé rmx.
après avoir fait un dump, j'arrive à lire quelque chose, mais la plupart des caractères sont des 'carrés' (des caractères non-reconnu donc!
Est-il possible de les lire avec cette routine, ou faut-il la modifier...
Merci pour votre aide précieuse!!
Phil.
Ci joint extrait du dump:
%»Fó'B%|çî;Ý>Ã*3Ð=gÍûLÝ?ð§mo/uåwq(ÉãÌ衹ò'Eü?å???Ïjh#Ñù|?Ò
Îõ|Cùà$LûK®COÞäg
Ïß?S??¹w4p~iàó~OõÖÃ
21 nov. 2005 à 05:08
oui en effet ... mais je justifie l'apparition de la detection des types RTF et WORD pour cette raison simple :
l'extention .DOC! qui si tu te rapel au temps de MsDOS ete largement utilisée pour les fichier textes brut et meme encore maintenant vus que microsoft c'est indellicatement approprié l'extention .NFO!
donc pour ma par, je tombe encore sur des Readme.doc (texte brut) mais egalement des Readme.doc (rtf) et Readme.doc (word!)
d'ou l'interet de savoir si le .DOC est un fichier texte brut, rtf ou word ...
et pour prevenir tout probleme de gens succeptible de me demander comment faire une fonction qui detecte les avi ou wav ou je ne sais trop quoi d'autre, je leur repond directement :
Editeur Hexadecimal, recherche sur le web ou par comparaison de plusieurs fichiers de meme type et pouf c'est magique! en gros ... investigation complete.
aprés c'est une question d'habitude et de niveau pour savoir ou et comment est codé la signature d'un fichier ... certain sont simple ... d'autre moins evidents (mais c'est rare donc pas zip ... ^^ )
ps : pour ceux qui n'ont pas compris la blague de compresseur de fichiers ... rare : .RAR donc pas .ZIP ^^
hola ... ça s'ameliore pas avec le temps mes blagues...
15 nov. 2005 à 23:33
Cela dit, il ne faut pas que cette fonction devienne une usine à gaz à force de vouloir détecter tout type de fichier. A l'origine, il ne s'agissait que de détecter l'encodage des caractères, pas un type de document issu d'une application particulière. Sinon, on n'en finit pas : dans quelques temps, comment détectera-t-on un document word encodé en unicode big indian, hein ?
Et puisque tu as mis le doigt dans l'engrenage, les emm...s de service ne vont pas se priver de te demander comment on fait pour reconnaitre une fichier issu de telle ou telle application ?
Mon pauvre fOxi, t'as pas fini...;o)