- mots clé: analyse de fichier Ascii - analyse lexicale - utilitaire
- logiciel utilisé: Windows 98, Delphi 5.0
- matériel utilisé: Pentium 500Mhz, 128 M de mémoire
- champ d'application: Delphi 1 à 6 sur Windows, Kylix
- niveau: débutant en Pascal et Delphi
- uses: u_c_basic_object, u_types_constants, u_strings,
u_c_display, (u_c_log, u_loaded, u_c_basic_file,
u_c_file_name, u_dir)
- plan:
1 - Introduction
Cette unité est utilisés pour analyser les lignes d'un fichier ASCII, lorsque la notion de ligne est significative. Nous effectuons tous nos traitements de fichier ASCII en utilisant
u_c_text_file. Essentiellement, nous avons affaire à deux types de traitements: - ceux pour lesquels la notion de ligne est sans importance. Citons par
exemple la recherche / remplacement globale
- ceux pour lesquels il est fondamental de travailler ligne à ligne:
- soit parce que la syntaxe l'exige (un chaîne littérale Pascal ne peut pas aller au-delà de la ligne)
- soit pour des raisons de mise au point (afficher le numéro de la ligne où une erreur de traitement est intervenue)
La classe c_line sert essentiellement à faciliter les traitements ligne à ligne. Elle permet, par exemple:
- la lecture d'une ligne dans une String
- le calcul de la taille et l'initialisation d'un index
- le calcule du numéro de ligne
2 - Utilisation 2.1 Interface
L'interface est la suivante:
type c_line= class(c_basic_object)
m_the_line: String;
m_line_index, m_line_size: Word;
m_line_number: Word;
m_buffer_index_of_start: Integer;
m_extract_error: Integer;
Constructor create_line(p_name: String); Virtual;
function f_extract_string_start_length(p_start, p_length: Integer): String;
function f_extract_string_start_end(p_start, p_end: Integer): String;
procedure set_line(p_line: String);
destructor Destroy; Override;
end; | Et: - m_the_line: la ligne courante
- m_line_index, m_line_size: l'indice courant et la taille de la ligne
- m_line_number: le numéro de la ligne courante
- m_buffer_index_of_start: mémorise la position dans un tampon du premier
caractère de la ligne (pour pouvoir la remplacer par des Move)
- m_extract_error: erreur lors de l'extraction d'une fraction de la ligne
- f_extract_string_start_length: extraction d'une partie de ligne
- f_extract_string_start_end: extraction d'une partie de ligne
- set_line: affectation d'une ligne
2.2 - Exemple d'utilisation Voici un exemple simple qui débite un fichier ASCII en symboles. Est défini
comme symbole tout texte ne comportant pas d'espaces (ASCII 32) ou retour chariot interligne. Soulignons que ce n'est PAS un analyseur lexical Pascal (nous ne séparons pas les mots contenant des ponctuations telles que ( ; + etc,
nous ne tenons pas compte des commentaires ou des chaînes littérales). Pour cet exemple: - nous créons une classe dérivée de c_text_file
- la boucle d'analyse des lignes est:
if f_load
then
while m_buffer_index< m_buffer_size do
if f_read_line
then
if m_c_line.m_line_size> 0
then handle_line |
- l'analyze de chaque ligne est traitée par handle_line qui contient:
with m_c_line do
while m_line_index<= m_line_size do
display(f_string); |
- le découpage de la ligne en "texte sans blancs" se fait par la fonction f_string:
function f_string: String;
var l_start_index: Integer;
begin
with m_c_line do
begin
while (m_line_index<= m_line_size) and (m_the_line[m_line_index]= ' ') do
Inc(m_line_index);
l_start_index:= m_line_index;
while (m_line_index<= m_line_size) and (m_the_line[m_line_index]<> ' ') do
Inc(m_line_index);
Result:= f_extract_string_start_end(l_start_index, m_line_index- 1);
end; // with m_c_line
end; // f_string | 2.3 - Répertoires
L'unité est prévue pour être placée dans: C: programs colibri_helpers classes
Vous pouvez naturellement changer cette organisation par Projet | Options | Directories Les directives de compilation sont: - R+ (vérification des intervalles)
- S+ (vérification de la pile)
- pas d'optimisation
3 - Programmation Cette classe n'est guère utilisée seule. C'est c_text_file qui l'utilise pour gérer les lignes du texte. 4 - Améliorations
5 - Télécharger Vous pouvez télécharger: Avec les mentions d'usage: - j'apprécie tous les commentaires, remarques ou critiques
- signalez-moi les bugs que vous trouverez.
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. |