RemoveCrLfTabDSpace

Для упрощения разбора текста бывает полезно удалить из него разделители. Функция RemoveCrLfTabDSpace удаляет символы Cr=#13, Lf=#10, Tab=#9 , двойные пробелы, и вообще все невидимые символы с кодом меньше, чем у пробела. Такие же символы на концах строки удаляет стандартная функция Trim

function RemoveCrLfTabDSpace(Source: WideString): WideString;
var p: integer; Res: WideString; C: WideChar;
begin
  Res := '';
  for p := 1 to Length(Source) do
  begin
   C := Source[p];
   if C < Space then C := Space; //Space = #32
   if (p = 1) then
    Res := Res + C
   else
   if Res[Length(Res)] <> Space then
    Res := Res + C
   else
   if C <> Space then
    Res := Res + C;
  end;
  {result}RemoveCrLfTabDSpace := Res;
end;

Эта функция иногда называется TrimAll . Кажется, что алгоритм достаточно оптимальный, но всё же его можно ускорить для большого текста с большим числом разделителей. Метод ускорения описан на примере функции ReplaceStr где используется класс TWideString . Более быстрая функция RemoveCrLfTabDSpace выглядит так:

function RemoveCrLfTabDSpace(Source: WideString): WideString;
var p: integer; Res: TWideString; C: WideChar;
begin
  Res := TWideString.Create;
  for p := 1 to Length(Source) do
  begin
   C := Source[p];
   if C < Space then C := Space;
   if (p = 1) then
    Res.Append(C)
   else
   if Res[Length(Res)] <> Space then
    Res.Append(C)
   else
   if C <> Space then
    Res.Append(C);
  end;
  {result}RemoveCrLfTabDSpace := Res.Text;
  Res.Destroy;
end;

По сравнению с обычным использованием строки WideString из Delphi 7 алгоритм с использованием TWideString может работать в сто раз быстрее. Пример есть на страничке ReplaceStr.

Trim - строковая функция