home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / pascal / library / dos / nicol / sti_strn / sti_strn.pas
Encoding:
Pascal/Delphi Source File  |  1991-04-06  |  6.3 KB  |  272 lines

  1. Unit STI_STRN;
  2.  
  3. interface
  4.  
  5. function MakeStr(SLen,Character : byte) : string;
  6. function LoCase(Inch : char) : char;
  7. function UpCaseStr(InStr : string) : string;
  8. function LoCaseStr(InStr : string) : string;
  9.  
  10. procedure Delete_One_Word(Var Instring : string; Pos : byte);
  11. procedure LeftTrimStr(Var Instring : string);
  12. procedure RightTrimStr(Var Instring : string);
  13. procedure Centre_String(Var InString : string; Width : byte; PackChar : char);
  14. procedure UpCase_One_Word(Var Instring : string; Pos : byte);
  15. procedure LoCase_One_Word(Var Instring : string; Pos : byte);
  16. procedure UpCaseStr2(Var InStr : string);
  17. procedure LoCaseStr2(Var InStr : string);
  18. procedure Strip(var Line : string; var Len : byte; Break : string);
  19. procedure Parse(var Line,Word : string; Break : string);
  20. procedure Replace(var Target,OldStr,NewStr : string; MaxLen : Byte);
  21.  
  22.  
  23. implementation
  24.  
  25. {---------------------------------------------------------------------------}
  26.  
  27. function MakeStr(SLen,Character : byte) : string;
  28.  
  29. Var
  30.   Dummy : string;
  31.  
  32. begin
  33.   FillChar(Dummy[1],SLen,Character);
  34.   Dummy[0] := char(SLen);
  35.   MakeStr := Dummy;
  36. end;
  37.  
  38. {---------------------------------------------------------------------------}
  39.  
  40. function LoCase(Inch : char) : char;
  41.  
  42. begin
  43.   if Inch in ['A'..'Z'] then
  44.     LoCase := char(ord(Inch)+32)
  45.   else
  46.     LoCase := Inch;
  47. end;
  48.  
  49. {---------------------------------------------------------------------------}
  50.  
  51. function UpCaseStr(InStr : string) : string;
  52.  
  53. Var
  54.   Loop : byte;
  55.  
  56. begin
  57.   for Loop := 1 to Length(InStr) do
  58.     InStr[Loop] := UpCase(InStr[Loop]);
  59.   UpCaseStr := InStr;
  60. end;
  61.  
  62. {---------------------------------------------------------------------------}
  63.  
  64. function LoCaseStr(InStr : string) : string;
  65.  
  66. Var
  67.   Loop : byte;
  68.  
  69. begin
  70.   for Loop := 1 to Length(InStr) do
  71.     InStr[Loop] := LoCase(InStr[Loop]);
  72.   LoCaseStr := InStr;
  73. end;
  74.  
  75. {---------------------------------------------------------------------------}
  76.  
  77. procedure Delete_One_Word(Var Instring : string; Pos : byte);
  78.  
  79. Var
  80.   Pos2 : byte;
  81.  
  82. begin
  83.   Pos2 := Pos;
  84.   if Instring[Pos2] <> ' ' then
  85.     begin
  86.       while Instring[Pos2] <> ' ' do
  87.         Inc(Pos2);
  88.     end
  89.   else
  90.     begin
  91.       while Instring[Pos2] = ' ' do
  92.         Inc(Pos2);
  93.     end;
  94.   Instring := Copy(Instring,1,Pos-1) + Copy(Instring,Pos2,255);
  95. end;
  96.  
  97. {---------------------------------------------------------------------------}
  98.  
  99. procedure LeftTrimStr(Var Instring : string);
  100.  
  101. Var
  102.   Pos : byte;
  103.  
  104. begin
  105.   Pos := 1;
  106.   while (Instring[Pos] < #33) and (Pos < Length(Instring)) do
  107.     Inc(Pos);
  108.   Instring := Copy(Instring,Pos,256);
  109. end;
  110.  
  111. {---------------------------------------------------------------------------}
  112.  
  113. procedure RightTrimStr(Var Instring : string);
  114.  
  115. Var
  116.   Pos : byte;
  117.  
  118. begin
  119.   Pos := length(InString);
  120.   while (Instring[Pos] < #33) and (Pos > 0) do
  121.     Dec(Pos);
  122.   Instring := Copy(Instring,1,Pos);
  123. end;
  124.  
  125. {---------------------------------------------------------------------------}
  126.  
  127. procedure Centre_String(Var InString : string; Width : byte; PackChar : char);
  128.  
  129. begin
  130.   LeftTrimStr(InString);
  131.   RightTrimStr(InString);
  132.   if Length(Instring) < Width then
  133.    begin
  134.      Instring := MakeStr((Width - Length(InString)) div 2,ord(PackChar)) +
  135.                  InString +
  136.                  MakeStr((Width - Length(InString)) div 2,ord(PackChar));
  137.    end;
  138. end;
  139.  
  140. {---------------------------------------------------------------------------}
  141.  
  142. procedure UpCase_One_Word(Var Instring : string; Pos : byte);
  143.  
  144. begin
  145.   if Instring[Pos] = ' ' then
  146.     Exit
  147.   else
  148.     begin
  149.       while Instring[Pos] <> ' ' do
  150.         begin
  151.           Instring[Pos] := UpCase(Instring[Pos]);
  152.           Inc(Pos);
  153.         end;
  154.     end;
  155. end;
  156.  
  157. {---------------------------------------------------------------------------}
  158.  
  159. procedure LoCase_One_Word(Var Instring : string; Pos : byte);
  160.  
  161. begin
  162.   if Instring[Pos] = ' ' then
  163.     Exit
  164.   else
  165.     begin
  166.       while Instring[Pos] <> ' ' do
  167.         begin
  168.           Instring[Pos] := LoCase(Instring[Pos]);
  169.           Inc(Pos);
  170.         end;
  171.     end;
  172. end;
  173.  
  174. {---------------------------------------------------------------------------}
  175.  
  176. procedure UpCaseStr2(Var InStr : string);
  177.  
  178. begin
  179.   InStr := UpCaseStr(InStr);
  180. end;
  181.  
  182. {---------------------------------------------------------------------------}
  183.  
  184. procedure LoCaseStr2(Var InStr : string);
  185.  
  186. begin
  187.   InStr := LoCaseStr(InStr);
  188. end;
  189.  
  190. {---------------------------------------------------------------------------}
  191.  
  192. procedure Strip(var Line : string; var Len : byte; Break : string);
  193. {
  194.        purpose       pull out all chars in Break from start of Line
  195.        last update   09 Jul 85
  196. }
  197. var
  198.   Indx               : byte;
  199.  
  200. begin
  201.   Len := Length(Line);
  202.   if Len > 0 then begin
  203.     Indx := 0;
  204.     while (pos(Line[Indx+1],Break) <> 0) and (Indx < Len) do
  205.       Indx := Indx + 1;
  206.     Delete(Line,1,Indx);
  207.     Len := Len - Indx;
  208.   end
  209. end; { of proc Strip }
  210.  
  211. {---------------------------------------------------------------------------}
  212.  
  213. procedure Parse(var Line,Word : string; Break : string);
  214. {
  215.        purpose       removes first word in Line and returns it in Word
  216.        last update   23 Jun 85
  217. }
  218. var
  219.   Len,Indx           : byte;
  220. begin
  221.   Word := '';
  222.   Strip(Line,Len,Break);
  223.   if Len = 0
  224.     then Exit;
  225.   Indx := 0;
  226.   while not (pos(Line[Indx+1],Break) <> 0) and (Indx < Len) do
  227.     Indx := Indx + 1;
  228.   Word := Copy(Line,1,Indx);
  229.   Delete(Line,1,Indx);
  230.   Strip(Line,Len,Break)
  231. end; { of proc Parse }
  232.  
  233. {---------------------------------------------------------------------------}
  234.  
  235. procedure Replace(var Target,OldStr,NewStr : string; MaxLen : Byte);
  236. {
  237.        purpose       look for all instances of OldStr and replace with NewStr
  238.        last update   09 Jul 85
  239. }
  240. var
  241.   TarLen,OldLen,IncLen,Indx
  242.                      : Integer;
  243. begin
  244.   TarLen := Length(Target);
  245.   OldLen := Length(OldStr);
  246.   IncLen := Length(NewStr) - OldLen;
  247.   Indx := Pos(OldStr,Target);
  248.   while Indx > 0 do begin
  249.     if TarLen + IncLen <= MaxLen then begin
  250.       Delete(Target,Indx,OldLen);
  251.       Insert(NewStr,Target,Indx);
  252.       TarLen := TarLen + IncLen;
  253.       Indx := Pos(OldStr,Target)
  254.     end
  255.     else Indx := 0
  256.   end
  257. end; { of proc Replace }
  258.  
  259. {---------------------------------------------------------------------------}
  260.  
  261. begin
  262. end.
  263.  
  264.  
  265.  
  266.  
  267.  
  268.  
  269.  
  270.  
  271.  
  272.