Fréquence des octets de fichiers(s) Article - John COLIBRI. |
- résumé : un utilitaire permettant d'afficher la fréquence de chaque octet d'un ou plusieurs fichiers. Utile pour détecter l'absence d'interligne ou les caractères indésirables
- mots clé : calcul de fréquence - analyse de caractères - interligne - caractères de contrôle - détection unicode
- logiciel utilisé : Windows XP personnel, Delphi 6.0
- matériel utilisé : Pentium 2.800 Mhz, 512 Meg de mémoire, 250 Giga disque dur
- champ d'application : Delphi 1 à 5, Delphi 6, Delphi 7, Delphi 2006, Turbo Delphi, Delphi 2007, Delphi 2009 sur Windows
- niveau : développeur Delphi
- plan :
1 - Calcul de Fréquence Ce petit utilitaire calcule et affiche la fréquence de chaque octet dans un ou plusieurs fichiers. Il permet de rapidement vérifier Dans tous ces cas, seul d'utilisateur de l'utilitaire sait comment interpréter (ce qui est attendu ou non) le résultat des fréquences
2 - Projet de Calcul de Fréquences Le projet est des plus simples - un tableau contenant 255 fréquence (entiers) est initialisé
- les fichiers sont chargés dans un tableau d'octets
- un simple boucle ajoute la fréquence de chaque caractère au tableau
- le résultat (pour les fréquences non nulles est affiché)
Le calcul des fréquences est:
Procedure compute_frequency_call_back(p_path, p_file_name: String);
Var l_index: Integer; Begin
With c_byte_buffer.create_byte_buffer('', 10) Do
Begin load_from_file(p_path+ p_file_name);
// -- compute the frequencies
For l_index:= 0 To m_write_index- 1 Do
Inc(g_byte_frequency[m_oa_byte_buffer[l_index]]);
Free; End; // with c_byte_buffer
End; // compute_frequency_call_back | et l'affichage se fait par
Procedure TForm1.display_frequencies_Click(Sender: TObject);
Var l_index: Integer;
l_character: Char; Begin
// -- display only the > 0 values
display(Format('frequencies of %-5s files, file_count=%3d in ',
[FileListBox1.Mask, g_file_count]) + g_path);
For l_index:= 0 To 255 Do
If g_byte_frequency[l_index]> 0
Then Begin
If l_index In [0..32]
Then l_character:= ' '
Else l_character:= chr(l_index);
display(Format('%3d %1s %7d',
[l_index, l_character, g_byte_frequency[l_index]]));
End; End; // display_frequencies_Click |
3 - Mini Mode d'emploi Voici une image du projet en pleine action:
Pour utiliser le projet | sélectionnez le répertoire | |
sélectionnez les fichiers dont la fréquence sera calculée par l'un des trois moyens suivants: - en cliquant un fichier de la tFileListBox
- en sélectionnant "all_dir_" pour tous les fichiers d'un répertoire
- en sélectionnant "dir_recursive_" pour tous les fichiers d'un répertoire récursivement
| | les fréquences sont calculées |
| sélectionnez "display_frequencies_" pour voir le résultat | Par ailleurs
- par défaut le masque est "*.pas". Vous pouvez le changer dans l'Inspecteur d'Object (tFileListBox.Mask)
- "mute_" évite l'affichage de chaque fichier analysé
- "reset_byte_frequency_" remet les fréquences à zéro
- "check_return_linefeed_" détecte les retours (#13) non suive d'interligne (#10)
- "h_" permet d'utiliser un mémo pour une aide modifiable
- le premier fichier contient des "favoris" (l'équivalent d'un
tFilterComboBox, mais non drop-down)
4 - Commentaires et Améliorations Parmi les possibilités - utiliser un tFileStream au lieu d'un Array of Byte
- ajouter des options pour signaler des plages de caractères à signaler (ou la plage des caractères acceptables)
5 - Télécharger le code source Delphi Vous pouvez télécharger:
Ce .ZIP qui comprend: - le .DPR, la forme principale, les formes annexes eventuelles
- les fichiers de paramètres (le schéma et le batch de création)
- dans chaque .ZIP, toutes les librairies nécessaires à chaque projet (chaque .ZIP est autonome)
Ces .ZIP, pour les projets en Delphi 6, contiennent des chemins RELATIFS. Par conséquent: - créez un répertoire n'importe où sur votre machine
- placez le .ZIP dans ce répertoire
- dézippez et les sous-répertoires nécessaires seront créés
- compilez et exécutez
Ces .ZIP ne modifient pas votre PC (pas de changement de la Base de Registre, de DLL ou autre). Pour supprimer le projet, effacez le répertoire.
La notation utilisée est la notation alsacienne qui consiste à préfixer les identificateurs par la zone de compilation: K_onstant, T_ype, G_lobal,
L_ocal, P_arametre, F_unction, C_lasse. Elle est présentée plus en détail dans l'article La
Notation Alsacienne
Comme d'habitude: - nous vous remercions de nous signaler toute erreur, inexactitude ou
problème de téléchargement en envoyant un e-mail à jcolibri@jcolibri.com. Les corrections qui en résulteront pourront aider les prochains lecteurs
- tous vos commentaires, remarques, questions, critiques, suggestion d'article, ou mentions d'autres sources sur le même sujet seront de même les bienvenus à jcolibri@jcolibri.com.
- plus simplement, vous pouvez taper (anonymement ou en fournissant votre e-mail pour une réponse) vos commentaires ci-dessus et nous les envoyer en cliquant "envoyer" :
- et si vous avez apprécié cet article, faites connaître notre site, ajoutez un lien dans vos listes de liens ou citez-nous dans vos
blogs ou réponses sur les messageries. C'est très simple: plus nous aurons de visiteurs et de références Google, plus nous écrirons d'articles.
6 - L'auteur
John COLIBRI est passionné par le développement Delphi et les applications de Bases de Données. Il a écrit de nombreux livres et articles, et partage son temps entre le développement de projets (nouveaux projets, maintenance, audit, migration BDE, migration Xe_n, refactoring) pour ses clients, le
conseil (composants, architecture, test) et la
formation. Son site contient des articles
avec code source, ainsi que le programme et le calendrier des stages de formation Delphi, base de données, programmation objet, Services Web, Tcp/Ip et
UML qu'il anime personellement tous les mois, à Paris, en province ou sur site client. |