В текстовом файле заменить все группы пробелов на один пробел

DarkFix

В текстовом файле заменить все группы пропусков , больше 1 на 1 пробел. Помогите решить задачу. Заранее спасибо.
2 ответа

DarkFix

Для работы с текстовыми файлами доработайте самостоятельно.
var
    s: string;
    i: byte;
begin
    readln(s);
 
    i := 1; // избавляемся от пробелов спереди
    while s[i] = ' ' do delete(s,i,1);
    i := length(s); // избавляемся от пробелов сзади
    while s[i] = ' ' do begin delete(s,i,1); i := i - 1 end;
 
    i := 1; // замена пробелов звездочками
    while i <= length(s) do begin
        if s[i] = ' ' then
            if s[i-1] = ' ' then begin
                delete(s,i,1);
                i := i - 1;
            end
            else begin
                delete(s,i,1);
                insert(' ',s,i);
            end;
        i := i + 1;
    end;
 
    writeln(s);
end.


DarkFix

ZX Spectrum-128, алгоритмическая ошибка. Будет вылет за границы диапазона индексов, если строка пустая или если строка состоит из одних пробелов. Код, который делает ровно то же самое, но без ошибок, ну и, цикл по файлу тоже написал от нечего делать:
const f1 = 'c:\test.txt';
      f2 = 'c:\test.tmp';
var s: string;
    f, g: text;
begin
  assign(f, f1);
  reset(f);
  assign(g, f2);
  rewrite(g);
  while not eof(f) do
    begin
      readln(f, s);
      while (length(s) > 0) and (s[1] = ' ') do delete(s, 1, 1);
      while (length(s) > 0) and (s[length(s)] = ' ') do delete(s, length(s), 1);
      while pos('  ', s) > 0 do delete(s, pos('  ', s), 1);
      writeln(g, s)
    end;
  close(f);
  close(g);
  erase(f);
  rename(g, f1)
end.