Free Tools CodeS-SourceS.com
Programmez!
PCInfo Web


Sélection logiciels

Thunderbird v3.0

Weather Watcher v6.1.03

ClamWin v0.95.2

FireFox 3 Bêta 1 v3 Bêta 1

QuickTime 7 v7.6.2


En bref

15 Fév 2010 Windows Seven : Les premières conclusions

06 Fév 2010 Une semaine d'actu : retour sur l'actualité de la semaine

28 Déc 2009 2000-2010 : Les révolutions qui ont changé le monde

31 Oct 2009 Google Maps Navigation : nouvelle bombe atomique parmi les GPS

24 Juil 2009 HADOPI 2 : Ce qu'on en pense à l'étranger


Les derniers dossiers


Les ressources Delphi et C/C++

ZSImage

TRichEdit : scroll par la molette de la souris

TThResCollection

Récupérateur de mots de passe WLM

Music Pro Package Version 2


Membres en ligne

+6 visiteurs en ligne


Nos partenaires

Espacerezo

KilaSoft



Vous êtes ici : AccueilDelphiSources › EXSTREAM, une unité qui simplifie la création et la lecture de flux (fichiers,...)

EXSTREAM, une unité qui simplifie la création et la lecture de flux (fichiers,...)

Informations sur la source :

Auteur : Flo

Catégorie : Manipulation de fichiers

Niveau : Intermédiaire

Déposé le : 21 Novembre 2007 à 16h09

0 commentaire sur cette source


Description

Voici une unité contenant de nouvelles classes pour manipuler les flux.

Alors, au menu :
-TExStream, qui est un "wrapper" de TStream, permet d'ajouter pas mal de fonctions praatiques pour lire et écrire des Byte, Char, Word, Integer, Int64 et chaines. Ecrire et lire un chaine de caractères en une ligne, voila de quoi réconforter certains ! A noter aussi la présence qu'une propriété EOF (End Of File) qui évite le test FStream.Position = FStream.Size.

- TEndianExStream, (descendante deTExStream) qui permet de lire facilement des flux au format BigEndian et LowEndian, sans se préocuper de l'ordres des octets dans les mots. Pratique pour lire des formats comme Tiff qui font la distinction sans se compliquer la vie.

- TBitStream est une classe à part (descend de TObject) qui permet de lire un flux bit par bit. Les trois méthodes sont enfantines et évitent de devoir jongler entre shl, shr, lecture du flux dans un buffer et toutes les joies (!) de la lecture bit-à-bit.

- StrToBits() et BitsToStr(), deux fonctions permettant de convertir une chaine de zéro et de un en Word (et reciproquement)

- SwapBytes(), qui permet d'inverser les octets d'un buffer quelconque (passe de Big à LowEndian et réciproquement)

Bref, vous avez de quoi bien vous amusez avec les flux.


Code Source

1
23
45
67
89
1011
1213
1415
1617
1819
2021
2223
2425
2627
2829
3031
3233
3435
3637
{ Un exemple concret est illustré dans le zip.
Voici cependant les principales fonctions } 
{Pour créér le flux }S := TExStream.Create(TFileStream.Create(FileName, fmCreate));
{ ou alors }S := TExStream.Create(TMemoryStream.Create));
 {Ou en transmettant n'importe quel instance de TStream comme premier paramètre ... }
 { Pour écrire dans le flux }
S.WriteInt(42);S.WriteString(MyStr);
S.WriteWord(MonWord);{ ou, banalement }
S.WriteBuffer(MonRecord, SizeOf(MonRecord)); 
{ Pour lire dans le flux }I := S.ReadInt;
Str := S.ReadString;MonWord := S.ReadWord;
S.ReadBuffer(MonRecord, SizeOf(MonRecord)); 
{ Pour TEndianStream, c'est la même chose, il suffit de renseigner la propriété Endian (emBig ou emLittle) et le tour est joué. Le constructeur demande d'ailleurs à quel état l'initialiser } 
{ Utilisation de BitStream: création }S := TBitStream.Create(Stream, fmCreate);
 { Écrit les 6 premiers bits de W dans le flux }
S.WriteBits(W, 6); 
{ Lit les 6 premiers bits du flux et les place dans W }W := S.ReadBits(6);
 { Une fois l'écriture complètement terminé, ou pour aligner les bits sur un octet, il faut appeler la méthode Flush() }
S.Flush;S.Free;

Conclusion

Mais qu'est ce que c'est cette histoire de BigEndian et LittleEndian.
Pour faire simple, c'est la façon dont sont ordonnés les octets dans les structure de plus d'un octet.

Par exemple, pour écrire mille deux cent soixante-douze en chiffes, on à deux choix :
- Soit on écrit le chiffre le plus significatif en premier (celui des milliers), ce qui donne 1272 (il s'agit du mode BigEndian).
- Soit on écrit le chiffre le moins significatif en premier (celui des unités), ce qui donne 2721 (c'est le mode LittleEndian).

Il va de soi que, nous les humains, ayons une forte préférence au premier, plus facile à lire.
Mais les ordinateurs ne sont pas tous d'accord. Windows écrit toujours en LittleEndian par défaut. Si on veut écrire en BigEndian, il faudra inverser tous les octets.

Pour plus d'information : http://fr.wikipedia.org/wiki/Endianess

------------------------------------------

Pourquoi avoir descendu TExStream de TObject et non de TStream ?
Tout simplement car cela permet d'utiliser n'importe quel type de flux.

Attention:
- TExStream.WriteString() écrit la taille de la chaine avant.
- TExStream.WriteChars() ne le fait pas.

Donc pour lire une chaine écrite avec WriteString(), il faut impérativement utiliser ReadString(). Pareil pour l'autre cas (logique).


Fichier Source

10 fichiers 16,94 Ko

Liste de contacts/D‚mo.ldc90 Octets
Liste de contacts/ExStream.pas18,06 Ko
Liste de contacts/ListeContacts.dpr241 Octets
Liste de contacts/UContact.pas4,45 Ko
Liste de contacts/UFrmPrinc.dfm3,80 Ko
Liste de contacts/UFrmPrinc.pas3,69 Ko
Demo du TEndianExStream/DemoTEndianExStream.dpr211 Octets
Demo du TEndianExStream/ExStream.pas18,06 Ko
Demo du TEndianExStream/UFrmDemo.dfm6,86 Ko
Demo du TEndianExStream/UFrmDemo.pas5,83 Ko

Télécharger la source


Autres contributions de Flo


Commentaires sur la source

Soyez le premier à commenter cette ressource !


Ajoutez votre commentaire & avis sur la ressource :

Vous n'êtes pas connecté !

Rejoignez dès maintenant la communauté en 3 clics et exprimez votre avis !

J'ai déjà un compte