menu
  Home  ==>  articles  ==>  colibri_helpers  ==>  u_c_path_segments   

u_c_display - John COLIBRI.


1 - Introduction

Lors de la construction de mon site Web, j'ai été confronté à de très nombreuxes manipulations de répertoires DOS. A titre d'exemple:
  • le site est construit sur ma machine dans le répertoire
    C:
      programs
        site_editor
          site
             menu.html
            edito
              edito.html
            articles
            ...
    Toutes les ancres tiennent compte de cette organisation. Le "menu" référence l'"éditorial". L'ancre HTML qui depuis "menu" permet d'accéder à "edito" peut donc être:
    • soit absolue:
              <A HREF="c:\programs\site_editor\site\edito\edito.html">
    • soit relative:
              <A HREF="edito\edito.html">
    Et dans l'éditorial, depuis le bas de la page, je permets de remonter au menu. Deux possibilités:
            <A HREF="c:\programs\site_editor\site\menu.html">
    ou bien:
            <A HREF="..\menu.html">
    Or lorsque je charge les pages réelles il faut que je transforme tous mes liens en remplaçant mon répertoire racine "c:\programs\site_editor\site\" en "http;//www.jcolibri.com/". Les deux chemins seront, par exemple:
            http;//www.jcolibri.com/menu.html
            http;//www.jcolibri.com/edito/edito.html
    Pour les chemins absolus c'est assez simple, mais pour les chemins relatifs, il faut reconstruire les chemins relatifs (..\..\ par exemple) en chemins absolus.

  • de façon similaire, lorsque je construis la liste des unités utilisées par un projet, j'utilise un utilitaire qui parcourt les répertoires pour trouver récursivement les unités utilisées.

    Les chemins utilisés pour permettre au compilatuer de trouver les unités sont:

    • soit dans le .DPR (Projet | Voir le source). Par exemple:
              USES u_xxx IN 'u_xxx.pas';
    • soit dans le fichier .DOF (Delphi Option File) accessible par Projet | Options | Répertoires | Chemin de Recherche.
    • soit dans les chemins des bibliothèques (Outils | Options d'Environnement | Bibliothèques)
    Certains de ces chemins peuvent aussi être relatifs.
Il est alors devenu utile de construire une petite classe c_path_segments qui permet de disséquer un chemin en ses différents segments. Ainsi:
c:\programs\site_editor\site\edito\
est placé dans une tStringList contenant les chaînes
c:
programs
site_editor
site
edito


2 - Utilisation

2.1 - Interface

L'interface de u_c_path_segments est la suivante:

    type c_path_segmentsclass(c_basic_object)
                            public
                              m_pathString;
                              m_c_segmentstStringList;

                              Constructor create_path_segments(p_namep_pathString); Virtual;

                              function f_path_segment_countInteger;
                              function f_path_segment(p_indexInteger): String;
                              procedure display_path_segments;
                              function f_absolute_path(p_relative_pathString): String;

                              Destructor DestroyOverride;
                          end;

    function f_common_path(pk_onepk_twoString): String;

Pour les données:

  • m_path est le chemin à disséquer
  • m_c_segment_list est la tStringList contenant les segments
Et pour les méthodes:
  • create_path_segments construit la tStrinList. Notez que:
    • le chemin ne doit PAS contenir de double \. En cas de doûte, utiliser f_path_with_only_one_slash contenu dans u_dir
  • f_path_segment_count: encapsule le nombre de segments
  • f_path_segment: récupère un segment à partir de son niveau
  • display_path_segments: visualise les segments
  • f_absolute_path: construit le chemin absolu à partir d'un chemin relatif. Par exemple:

    CONST k_path'c:\programs\site_editor\site\edito\';
    ...
      WITH c_path_segments.create_path_segments(''k_pathDO
        display(f_absolute_path('..telecharger');

    affichera le chemin

          c:\programs\site_editor\site\telecharger\

  • Destroy: libère la tStringList

 
Nous avons de plus ajouté la fonction f_common_path dont le but est de trouver la partie commune à deux chemins. Ainsi:

CONST k_one'c:\programs\site_editor\site\edito\';
      k_two'c:\programs\site_editor\site\livres\';
  ...
  display(f_common_path(k_one,k_tow);

affichera

      programs\site_editor\site\

Cette fonction est utile lorsqu'il s'agit de reloger toute une arborescence.

2.2 - Répertoires et Directives de Compilation

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

Le constructeur débite le chemin en segments. Notez que:
  • si le lecteur est fourni, il est placé dans la première chaîne. Ceci permet au besoin de reconstruire le chemin complet
  • les segments sont détectés en testant "\". Il est donc IMPERATIF de ne pas avoir de "\" juxtaposés. DOS supporte en effet:
        c:\programs\\site_editor\

4 - Améliorations

La suppression des "\" redondants pourait être intégrée à cette classe.


5 - Télécharge

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