Soyez le premier à donner votre avis sur cette source.
Snippet vu 42 200 fois - Téléchargée 32 fois
type TTxtFileType = (txTxtOrBin, txUTF8, txUNICODE, txUNIBIG, txRTF, txWORDDOC ); TTxtFileSign = record Code : TTxtFileType; Sign : LongWord; Mask : LongWord; end; const TxtSignsCount = 5; TxtSign_UTF8 : TTxtFileSign = (Code: txUTF8; Sign:$00BFBBEF; Mask: $00FFFFFF); TxtSign_UNICODE : TTxtFileSign = (Code: txUNICODE; Sign:$0000FEFF; Mask: $FF00FFFF); TxtSign_UNIBIG : TTxtFileSign = (Code: txUNIBIG; Sign:$0000FFFE; Mask: $00FFFFFF); TxtSign_RTF : TTxtFileSign = (Code: txRTF; Sign:$74725C7B; Mask: $FFFFFFFF); TxtSign_WORDDOC : TTxtFileSign = (Code: txWORDDOC; Sign:$E011CFD0; Mask: $FFFFFFFF); var TxtFileSigns : array[0..TxtSignsCount-1] of TTxtFileSign = ( TxtSign_UTF8, TxtSign_UNICODE, TxtSign_UNIBIG, TxtSign_RTF, TxtSign_WORDDOC ); function TypeOfTextfile(const filename : string) : TTxtFileType; var Flux : TFileStream; Sign : LongWord; N : integer; begin Flux := TFileStream.Create(FileName, fmOpenRead); try Flux.Read(Sign, 4); finally Flux.Free; end; result := txTxtOrBin; for N := 0 to High(TxtFileSigns) do begin if (Sign and TxtFileSigns[N].Mask) = TxtFileSigns[N].Sign then begin result := TxtFileSigns[N].Code; break; end; end; end;
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õÖÃ
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.