Home page > Delphi, tips bulk > Tips for beginners > SplitString: splitting a string

SplitString: splitting a string

Thursday 25 August 2011, by CapJack

This Delphi unit shows how to manipulate a string of characters, by separating it into two parts defined by an identifier, then applying a few options. Example, the following code returns ’NAME’ in L and ’Kevin’ in R:

s := 'Name=Kevin';
DTSplitString(s,'=',L,R,[dtssUL]);
  1. (*********************************************************)
  2. (***)                                                 (***)
  3. (***)              UNIT SplitStrings;                 (***)
  4. (***)                                                 (***)
  5. (*********************************************************)
  6.  
  7. (*********************************************************)
  8. (* Feel free to use it, but at your own risk!            *)
  9. (* À utiliser librement, mais à vos risques et périls !  *)
  10. (* CapJack - http://capjack.fr                           *)
  11. (*********************************************************)
  12.  
  13.  
  14. (*********************************************************)
  15. (***)                                                 (***)
  16. (***)                  INTERFACE                      (***)
  17. (***)                                                 (***)
  18. (*********************************************************)
  19.  
  20. (*********************************************************)
  21. (* DTSplitString                                         *)
  22. (* ----------------------------------------------------- *)
  23. (* Splits a string in two parts,                         *)
  24. (* depending on the provided separator,                  *)
  25. (* then performs some processing on the result.          *)
  26. (* ----------------------------------------------------- *)
  27. (* Coupe une chaîne de caractères en deux,               *)
  28. (* suivant le séparateur fourni,                         *)
  29. (* puis effectue quelques traitements sur le résultat.   *)
  30. (*********************************************************)
  31.  
  32. type DTSplitStringOption =
  33.  
  34.      (dtssUL  , // Captitalize left part
  35.                 // Mise en majuscule de la partie gauche
  36.  
  37.       dtssUR  , // Capitalize right part
  38.                 // Mise en majuscule de la partie droite
  39.  
  40.       dtssSL  , // Remove useless chars on the left part
  41.                 // Supprime les car. inutiles de la partie gauche
  42.  
  43.       dtssSR);  // Suppression des espaces partie droite
  44.                 // Supprime les car. inutiles de la partie droite
  45.  
  46.      DTSplitStringOptions = set of DTSplitStringOption;
  47.  
  48. Procedure DTSplitString
  49.         (
  50.         const Source            : string;
  51.         const Separator         : string;
  52.         var   Left              : string;
  53.         var   Right             : string;
  54.         const Options           : DTSplitStringOptions
  55.         );
  56.  
  57.  
  58. (*********************************************************)
  59. (***)                                                 (***)
  60. (***)                IMPLEMENTATION                   (***)
  61. (***)                                                 (***)
  62. (*********************************************************)
  63.  
  64. uses SysUtils;
  65.  
  66. {---------------------------------------------------------}
  67.  
  68. Procedure DTSplitString
  69.         (
  70.         const Source            : string;
  71.         const Separator         : string;
  72.         var   Left              : string;
  73.         var   Right             : string;
  74.         const Options           : DTSplitStringOptions
  75.         );
  76.  var liSepPos:integer;
  77.  begin
  78.   // Position of separator - Position du séparateur
  79.   liSepPos := Pos( Separator, Source );
  80.   if liSepPos > 0
  81.   // Separator found: split - Séparateur trouvé: découpage
  82.    then
  83.     begin
  84.      Left  := copy( Source, 1, liSepPos-1 );
  85.      Right := copy( Source,
  86.                     liSepPos+length(Separator),
  87.                     Length(Source) );
  88.     end
  89.   // Else return string at left - Sinon retourne la chaîne à gauche
  90.    else
  91.     begin
  92.      Left  := Source;
  93.      Right := '';
  94.     end;
  95.   // Apply options - Applique les options
  96.   if dtssSL in Options then Left  := Trim( Left );
  97.   if dtssSR in Options then Right := Trim( Right );
  98.   if dtssUL in Options then Left  := UpperCase( Left );
  99.   if dtssUR in Options then Right := UpperCase( Right );
  100.  end;
  101.  
  102. {---------------------------------------------------------}
  103.  
  104. END.