Creer un type de fichier et la gestion qui en decoulle.

Description

Rebonjour a tous! seconde source d'ajourd'hui pour repondre a un probleme posé sur le forum.

Voici, en toute simplicitée, comment créer un type de fichier precis et en faire toute la gestion qui vas en permettre le traitement.

dans cet exemple, TEuroFile est un fichier qui vas contenir une liste des sortie des numeros du jeu EuroMillions (et hop de la pub... devrais-je demander une compensation a la française de jeux ?).

ces données se presentent comme cela :
une date (date de la sortie des numeros)
5 numeros + 2 numeros complementaire.

pour stocker la date, on utiliseras le type TDateTime.
pour les numeros un simple Array[0..6] of Byte ou les entrées 5 et 6 correspondront aux numeros complementaire.

On créerat donc un type TEuroNums et TEuroData :
TEuroNums = array[0..6] of byte;
TEuroDate = record Date : TDateTime; Nums : TEuroNums; end;

Pour stocker toute ces données on utiliseras un tableau dynamique TEuroArray :
TEuroArray = array of TEuroData;

pour pouvoir traiter le fichier correctement, on vas créer deux routine (lecture/ecriture) :

procedure ReadEuroFile(const Filename : string; out Datas : TEuroArray);
procedure CreateEuroFile(const FileName : string; const Datas : TEuroArray);

ensuite pour traiter les données on vas créer quelques routines suplementaire :

// permet de definir simplement et rapidement une variable TEuroData
Function EuroData(const Dt : TDateTime; const Nu : array of byte) : TEuroData;
Function EuroData(const Dt : TDateTime; const Nu : TEuroNumArray) : TEuroData;

// convertis une donnée EuroData en chaine formattée avec ; comme separateur
Function EuroDataToStr(const ED : TEuroData) : string;

// convertis une chaine formattée representant une donnée TEuroData en sont type natif
Function StrToEuroData(const ST : string) : TEuroData;

// Explose une chaine formattée en sous-chaines
Procedure ExplodeEuroDataStr(const S : String; out sD,sN1,sN2,sN3,sN4,sN5,sC1,sC2 : string);

// Assemble des sous-chaines pour former une chaine formattée TEuroData
Function ImplodeEuroDataStr(const sD,sN1,sN2,sN3,sN4,sN5,sC1,sC2 : string) : String;

// Ajoute un elements TEuroData dans un tableau TEuroArray (la taille du tableau est ajustée automatiquement)
procedure EuroArrayPush(var EA : TEuroArray; const ED : TEuroData);

// Mets a 0 un tableau TEuroArray
procedure EuroArrayFlush(var EA : TEuroArray);

// Transforme un tableau TEuroArray en TStringlist (pour les TMemo, TListBox, TCombobox ect...)
Function EuroArrayToList(const EA : TEuroArray) : TStringList;

// Transforme une liste de chaine formattée TEuroData en tableau TEuroArray
Function ListToEuroArray(const Lst : TStringList) : TEuroArray;

voila pour la simple gestion de notre type de fichier.

regardez la source pour plus d'infos (EuroFileIO.pas).

Le projet contient une demo pour la gestion des fichiers :
Main.pas : unité principale
EditBox.pas : unité de la fenetre d'edition des entrées
EuroFileIO.pas : gestion des fichiers type TEuroFile
RandDate.pas : generatrice de date aleatoire (voir le code source RandDate sur ce site)

Conclusion :


Dans cet exercice vous pourrez apprendre ces principes :

Creation d'un type de fichier, ecriture et lecture de et dans ce dernier.
Creation, pushing (remplissage dynamique) et flushing (vidage) de tableau dynamique.
Convertions de données quelquonques : String, Integer, Tableaux, Stringlist...
Recuperation de sous-chaine dans une chaines a separateurs (grace a GetStrPart qui a ete crée a la bas pour le code source "ChainePos")
Compter le nombre de fois ou un caractere est rencontré dans une chaine (grace a CountChar)
Definition et appel d'exceptions dans des cas precis (Raise)
Generation de date aleatoire (voir le code source RandDate)

Codes Sources

A voir également

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.