menu
  Home  ==>  articles  ==>  colibri_helpers  ==>  u_c_line   

u_c_line - John COLIBRI.


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_lineclass(c_basic_object)
                   m_the_lineString;
                   m_line_indexm_line_sizeWord;
                   m_line_numberWord;
                   m_buffer_index_of_startInteger;

                   m_extract_errorInteger;

                   Constructor create_line(p_nameString); Virtual;
                   function f_extract_string_start_length(p_startp_lengthInteger): String;
                   function f_extract_string_start_end(p_startp_endInteger): String;
                   procedure set_line(p_lineString);
                   destructor DestroyOverride;
                 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_indexm_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_stringString;
              var l_start_indexInteger;
              begin
                with m_c_line do
                begin
                  while (m_line_index<= m_line_sizeand (m_the_line[m_line_index]= ' 'do
                    Inc(m_line_index);

                  l_start_index:= m_line_index;
                  while (m_line_index<= m_line_sizeand (m_the_line[m_line_index]<> ' 'do
                    Inc(m_line_index);

                  Result:= f_extract_string_start_end(l_start_indexm_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.
Created: jan-04. Last updated: mar-2020 - 250 articles, 620 .ZIP sources, 3303 figures
Contact : John COLIBRI - Tel: 01.42.83.69.36 / 06.87.88.23.91 - email:jcolibri@jcolibri.com
Copyright © J.Colibri   http://www.jcolibri.com - 2001 - 2020
Retour:  Home  Articles  Formations  Développement Delphi  Livres  Pascalissime  Liens  Download
l'Institut Pascal

John COLIBRI

+ Home
  + articles_avec_sources
    + bases_de_donnees
    + web_internet_sockets
    + services_web_
    + prog_objet_composants
    + office_com_automation
    + colibri_utilities
    + uml_design_patterns
    + graphique
    + delphi
    + outils
    + firemonkey
    + vcl_rtl
    + colibri_helpers
      – u_types_constants
      – u_strings
      – u_loaded
      – u_c_basic_object
      – u_c_display
      – u_dir
      – u_file
      – u_display_hex
      – u_c_file_name
      – u_c_basic_file
      – u_c_log
      – u_c_line
      – handle_files
      – u_c_path_segments
      – u_c_text_file
      – u_c_direct_acccess
      – u_c_string_file
      – u_c_file_of
    + colibri_skelettons
    + admin
  + formations
  + developpement_delphi
  + présentations
  + pascalissime
  + livres
  + entre_nous
  – télécharger

contacts
plan_du_site
– chercher :

RSS feed  
Blog