powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Форматирование текста
24 сообщений из 74, страница 3 из 3
Форматирование текста
    #39528656
schi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot Няшик]schi,

Я не понимаю, что мне отлаживать???.... Автору надо заменить более двух пробелов , после слова

Если только после слова. Чем твой код плох - из него ничего нельзя понять.
...
Рейтинг: 0 / 0
Форматирование текста
    #39528660
Няшик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
schiЕсли только после слова. Чем твой код плох - из него ничего нельзя понять.

Увы - вы правы. С таким умом как у вас - скорее всего нельзя.

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
function RepSpToTabs(const str: string): string;
var
  l, r, c: Integer;
  w: Boolean;
begin
  l := Length(str); // Узнаём длину строки
  SetLength(Result, l); // Увеличиваем результат строки до длины самой строки

  w := False; // Ставим какой - то флаг в неправду (Пока какой, не знаем - смотрим дальше)
  r := 1; // Бла бла
  c := 1;  // Бла бла
  while r <= l do // Гоним цикл, пока r не будет больше или ровно l
  begin
    if w and (str[r] = ' ') and (str[r + 1] = ' ') then // Наш флаг непонятный должен быть в true и спереди два пробела. 
    begin  
      // Ура, выше условие совпала 
      Result[c] := #$9;  // Заменяем 1 символ 
      inc(r, 2); // Скипываем два пробельных символа. 
      while str[r] = ' ' do // Есть ещё пробелы ? Долой их!
        inc(r); 
    end
    else
    begin
      // Увы - условие не совпала
      Result[c] := str[r]; // Пишем текущий стэк строки, в текущий стек результата функции 
      w := str[r] <> ' '; // ... Ой! Вот для чего флаг. Если текущий символ был не пробел, он будет TRUE
      inc(r); // бла бла 
    end;
    inc(c); // бла бла 
  end;
  SetLength(Result, r - 1); // Уменьшим длину строки
end;




Ай - как сложно
...
Рейтинг: 0 / 0
Форматирование текста
    #39528668
SimplTsar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Няшик
Код: pascal
1.
2.
      while str[r] = ' ' do // Есть ещё пробелы ? Долой их!
        inc(r); 



отсутсвие проверки Length(str) при удачном сочетании данных - бесконечный цикл или Access Violation
...
Рейтинг: 0 / 0
Форматирование текста
    #39528693
Няшик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SimplTsar,

Весело такую Ахинею читать))), при условии r <= l. И при том, что строка кончается на #0 а это не ' '
...
Рейтинг: 0 / 0
Форматирование текста
    #39528730
Tactical Nuclear Penguin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НяшикSimplTsar,

Весело такую Ахинею читать))), при условии r <= l. И при том, что строка кончается на #0 а это не ' '

да, ты прав, ахинею весело читать :)

например
Код: pascal
1.
2.
3.
4.
    str := 'h h h 54           6767         67 rh hhhh';
    str := RepSpToTabs(str);
    str := 'f'+str+'f';
    Writeln(str);


и результат
...
Рейтинг: 0 / 0
Форматирование текста
    #39528752
Няшик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tactical Nuclear Penguin,

А в чём ахинею с моей стороны ? Нет, с моей нету. Но за баг спасибо.


Я просто не ту переменную воткнул в последнем изменении

Код: pascal
1.
  SetLength(Result, c - 1);



Эти глуппые баги есть у всех. Даже у вас. (А если говорите что нет. То, в двойне)
...
Рейтинг: 0 / 0
Форматирование текста
    #39528761
Tactical Nuclear Penguin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НяшикTactical Nuclear Penguin,

А в чём ахинею с моей стороны ? Нет, с моей нету. Но за баг спасибо.


Я просто не ту переменную воткнул в последнем изменении

Код: pascal
1.
  SetLength(Result, c - 1);



Эти глуппые баги есть у всех. Даже у вас. (А если говорите что нет. То, в двойне)

то есть отлаживать на пользователе предлагаете? нуну...
почему в начале пробелы не трогаем а в конце весело удаляем?
задание плохо читали? МЕЖДУ словами
...
Рейтинг: 0 / 0
Форматирование текста
    #39528771
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Няшик, у всех бывают ошибки. Но у многих пафоса меньше.
...
Рейтинг: 0 / 0
Форматирование текста
    #39528775
Няшик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tactical Nuclear Penguinто есть отлаживать на пользователе предлагаете? нуну...


Я и отладил по быстрому, только как на зло. Последнюю строку не просмотрел. По этому и не нашёл ничего такого..

Tactical Nuclear Penguinпочему в начале пробелы не трогаем а в конце весело удаляем?

Кхм, сейчас - заведём первый цикл, в котором найдём чистую длину строки. Выделим строку, и снова пойдём резать лишние пробелы.

Операция очень сильно усложняется для процессора. Ему легче выделить, и уменьшить строку. Это во много быстрее.



makhaonНяшик, у всех бывают ошибки. Но у многих пафоса меньше.

Потому что, все накинулись зассирать - увидев, что я не приверженец стандартного функционала.
...
Рейтинг: 0 / 0
Форматирование текста
    #39528778
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подскажите как решить проблеммку.
Имеется файл в 40-50-100 тысяч строк.
Строка формата
С. Л. З. C. В. ЛС Фамилия Имя Отчество Дата Осн. документ Серия, Личный номер Дата Дата Дата рег. по ПрТипДатаДаДата Адрес ЛС

Как можно заменить пробелы между словами на один знак табуляции. Чтобы в результате получить нормально отформатированный текст, который бы разбивался на колонки в Excele(к примеру).

Человеку нужно один файл загрузить в Excel, разовая операция. Для этого нужно пробелы заменить ТАБом, чтобы Excel разбил их по ячейкам. Никакой критичности по времени расчёта нет. Неужели использование двух функций Pos и StringReplace настолько чудовищно, что нужно третью страницу обсуждать ошибки с использованием указателей ?
...
Рейтинг: 0 / 0
Форматирование текста
    #39528779
Няшик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DimaBrЧеловеку нужно один файл загрузить в Excel, разовая операция. Для этого нужно пробелы заменить ТАБом, чтобы Excel разбил их по ячейкам. Никакой критичности по времени расчёта нет. Неужели использование двух функций Pos и StringReplace настолько чудовищно, что нужно третью страницу обсуждать ошибки с использованием указателей ?


Я специально для тебя с указателя переписал на обычную индексацию. Из за этого напоровшись на баг.

Вообще, я хотел показать что код ничем не сложнее получается чем через "Pos и StringReplace"
...
Рейтинг: 0 / 0
Форматирование текста
    #39528789
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код гораздо сложнее для понимания и написания. Как уже выяснилось, чреват множеством подводных камней
...
Рейтинг: 0 / 0
Форматирование текста
    #39528793
Няшик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DimaBrКод гораздо сложнее для понимания и написания. Как уже выяснилось, чреват множеством подводных камней

Твой код вообще заменяет два пробела на 1 и потом, 1 пробел на #9


А тс - у надо между слов

Давай - реализовывай, и посмотрим что код увеличиться ещё.
...
Рейтинг: 0 / 0
Форматирование текста
    #39528806
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мой код делает ровно то что нужно ТС
...
Рейтинг: 0 / 0
Форматирование текста
    #39528807
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для более точной задачи немешало бы убрать #9 с начала строки
...
Рейтинг: 0 / 0
Форматирование текста
    #39528809
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НяшикТвой код вообще заменяет два пробела на 1 и потом, 1 пробел на #9
А тс - у надо между слов
Если в строке 10 пробелов подряд, то путём замены ДВУХ подряд на ОДИН, рано или поздно мы получим всего ОДИН пробел.
...
Рейтинг: 0 / 0
Форматирование текста
    #39528814
Няшик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DimaBr,

Попробовал твой код. Мол. Ну, посмотреть как он работает - раз ты утверждаешь что ровно. И вижу фигу



...

А вообще. Если я уберу флаг bool в своём коде. То примерно будет тоже самое что я думал. Но у тебя код не рабочий.

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
program Project1;

{$APPTYPE CONSOLE}
{$R *.res}

uses
  System.SysUtils, Classes;


function Test(_File: string): string;
var
  SL: TStringList;
  S: string;
  i, j: Integer;
begin
  SL := TStringList.Create;
  SL.LoadFromFile(_File);
  for i := 0 to SL.Count - 1 do
  begin
    S := SL[i];
    repeat
      j := Pos('  ', S);
      if j > 0 then
        S := StringReplace(S, '  ', ' ', [rfReplaceAll]);
    until j = 0;
    SL[j] := StringReplace(S, ' ', #9, [rfReplaceAll]);
  end;
  Result := SL.Text;
end;

var
  str: string;

begin
  try
    Writeln(Test('D:\567567.txt'));
    Readln;
  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;

end.

...
Рейтинг: 0 / 0
Форматирование текста
    #39528817
Няшик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Текст из файла

Код: sql
1.
2.
               С.    Л.    З.    C.    В. ЛС               Фамилия         Имя            Отчество          Дата        Осн. документ
Серия,       Личный номер       Дата         Дата  Дата рег. по ПрТипДатаДаДата        Адрес ЛС
...
Рейтинг: 0 / 0
Форматирование текста
    #39528819
Няшик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Оо. Я понял в чём ты ошибку сделал..

Ты даже в таком "простом" коде накосячил.

Так что 1 \ 1
...
Рейтинг: 0 / 0
Форматирование текста
    #39528822
Няшик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Короче, вот твой код такой такой результат




Я такой результат могу и так добится
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
function RepSpToTabs(const str: string): string;
var
  l, r, c: Integer;
begin
  l := Length(str);
  SetLength(Result, l);

  r := 1;
  c := 1;
  while r <= l do
  begin
    if (str[r] = ' ') and (str[r + 1] = ' ') then
    begin
      Result[c] := #$9;
      inc(r, 2);
      while str[r] = ' ' do
        inc(r);
    end
    else
    begin
      Result[c] := str[r];
      inc(r);
    end;
    inc(c);
  end;
  SetLength(Result, c - 1);
end;



Как ты выразился, а #9 можно и убрать сначала строки .. Хотя тот мой код это делает по умолчанию
...
Рейтинг: 0 / 0
Форматирование текста
    #39528826
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мой код написан без всяких отладчиков, и даже без среды, просто "на коленке".
Поэтому вполне естественно что вместо S[i] написал S[j].
...
Рейтинг: 0 / 0
Форматирование текста
    #39528828
Няшик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DimaBrМой код написан без всяких отладчиков, и даже без среды, просто "на коленке".
Поэтому вполне естественно что вместо S[i] написал S[j].

Ну ок. А я код тоже пишу просто так. Ток потом запускаю посмотреть результаты.

А ты даёшь код, и не проверяешь. Притом уверяешь что он на 100% верный.
...
Рейтинг: 0 / 0
Форматирование текста
    #39528830
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я нигде не утверждал, что он на 100% верный. Если человек не сможет разобраться с ошибкой в одной букве, то в твоём коде ему не разобраться НИКОГДА.
...
Рейтинг: 0 / 0
Форматирование текста
    #39528832
Няшик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DimaBrЯ нигде не утверждал, что он на 100% верный. Если человек не сможет разобраться с ошибкой в одной букве, то в твоём коде ему не разобраться НИКОГДА.


Разве ?

DimaBrМой код делает ровно то что нужно ТС

Разве ровно, это не 100? Или у тебя есть у ровно какой - то коэффициент ??
...
Рейтинг: 0 / 0
24 сообщений из 74, страница 3 из 3
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Форматирование текста
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]