Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Форматирование текста / 25 сообщений из 74, страница 1 из 3
28.09.2017, 13:00:30
    #39527614
Валерий666
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Форматирование текста
Подскажите как решить проблеммку.
Имеется файл в 40-50-100 тысяч строк.
Строка формата
Код: html
1.
         С.    Л.    З.    C.    В. ЛС               Фамилия         Имя            Отчество          Дата        Осн. документ     Серия,       Личный номер       Дата         Дата  Дата рег. по ПрТипДатаДаДата        Адрес ЛС


Как можно заменить пробелы между словами на один знак табуляции. Чтобы в результате получить нормально отформатированный текст, который бы разбивался на колонки в Excele(к примеру).
...
Рейтинг: 0 / 0
28.09.2017, 13:05:13
    #39527615
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Форматирование текста
Простенький цикл, заменяющий два пробела подряд табуляцией и убирающий все последующие
пробелы. В чём проблема-то?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
28.09.2017, 13:22:03
    #39527632
DimaBr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Форматирование текста
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
procedure TForm1.Button2Click(Sender: TObject);
var SL: TStringList;
    i,j: integer;
    S: string;
begin
  SL := TStringList.Create;
//  SL.LoadFromFile();
  SL.Add('         С.    Л.    З.    C.    В. ЛС               Фамилия         Имя            Отчество          Дата        Осн. документ     Серия,       Личный номер       Дата         Дата  Дата рег. по ПрТипДатаДаДата        Адрес ЛС');
  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;
end;
...
Рейтинг: 0 / 0
28.09.2017, 14:16:42
    #39527661
Валерий666
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Форматирование текста
DimaBr,

Со строкой работает, с файлом не хочет( Что не так?

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
procedure TForm1.sButton1Click(Sender: TObject);
var SL: TStringList;
    i,j: integer;
    S: string;
    path:string;
begin
getdir(0,path);
  SL := TStringList.Create;
SL.LoadFromFile(path+'\1.txt');
// SL.Add(sedit1.text);
   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;
 sl.SaveToFile(path+'\result.txt');
//sEdit2.Text:=sl.Text;
sl.Free;
end;
...
Рейтинг: 0 / 0
28.09.2017, 14:24:43
    #39527668
Валерий666
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Форматирование текста
Понял почему не работает.
...
Рейтинг: 0 / 0
28.09.2017, 15:10:40
    #39527710
Няшик
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Форматирование текста
Вот вариант оптимизированный


Код: 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.
44.
45.
46.
47.
48.
49.
50.
51.
52.
program Project1;

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

uses
  System.SysUtils;

function Skip(const str: string): string;
var
  p: PChar;
  l, r: Integer;
  b: Boolean;
begin
  l := Length(str);
  SetLength(Result, l);
  r := 1;
  p := Pointer(str);
  while p^ <> #0 do
  begin
    if (p^ = ' ') and ((p + 1)^ = ' ') then
      b := true;

    Result[r] := p^;
    inc(p);
    inc(r);

    if b then
    begin
      b := False;
      while p^ = ' ' do
        inc(p);
    end;
  end;
  SetLength(Result, r - 1);
end;

var
  str: string;

begin
  try
    str := 'g 54   6767   67 rh';
    str := Skip(str);
    Writeln(str);
    Readln;
  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;

end.
...
Рейтинг: 0 / 0
28.09.2017, 17:22:46
    #39527849
schi
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Форматирование текста
Няшик,

Можно поинтересоваться, в каком языке слово skip имеет отношение к форматированию ?
...
Рейтинг: 0 / 0
28.09.2017, 19:28:22
    #39527913
Няшик
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Форматирование текста
schiНяшик,

Можно поинтересоваться, в каком языке слово skip имеет отношение к форматированию ?

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

Конечно в производство такое нельзя пихать, иначе это станет головной болью. Но это всего лишь демонстрация
...
Рейтинг: 0 / 0
28.09.2017, 22:37:14
    #39527970
schi
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Форматирование текста
НяшикschiНяшик,

Можно поинтересоваться, в каком языке слово skip имеет отношение к форматированию ?

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

Конечно в производство такое нельзя пихать, иначе это станет головной болью. Но это всего лишь демонстрация

Такой код вообще никуда нельзя, даже для демонстрации.
Sad but true.
...
Рейтинг: 0 / 0
28.09.2017, 22:51:54
    #39527976
чччД
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Форматирование текста
Няшик,

ты Лошарик, а не Няшик. Надеюсь, тебе стыдно.
...
Рейтинг: 0 / 0
28.09.2017, 23:05:30
    #39527979
Gator
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Форматирование текста
чччД ,
ты Лошарик, а не Няшик. Надеюсь, тебе стыдно.
...
Рейтинг: 0 / 0
28.09.2017, 23:38:25
    #39527989
Няшик
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Форматирование текста
Нет, мне не должно быть стыдно...

Это вам, раз вы не можете без длинной функции Pos

Код: 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.
44.
45.
46.
function Pos(const SubStr, Str: UnicodeString; Offset: Integer): Integer; overload;
var
  I, LIterCnt, L, J: Integer;
  PSubStr, PS: PChar;
  LCh: Char;
begin
  PSubStr := Pointer(SubStr);
  PS := Pointer(Str);
  if (PSubStr = nil) or (PS = nil) or (Offset < 1) then
    Exit(0);
  L := __StringLength(SubStr);
  { Calculate the number of possible iterations. }
  LIterCnt := __StringLength(Str) - Offset - L + 2;
  if (L > 0) and (LIterCnt > 0) then
  begin
    Inc(PS, Offset - 1);
    I := 0;
    LCh := PSubStr[0];
    if L = 1 then   // Special case when Substring length is 1
      repeat
        if PS[I] = LCh then
          Exit(I + Offset);
        Inc(I);
      until I = LIterCnt
    else
      repeat
        if PS[I] = LCh then
        begin
          J := 1;
          repeat
            if PS[I + J] = PSubStr[J] then
            begin
              Inc(J);
              if J = L then
                Exit(I + Offset);
            end
            else
              Break;
          until False;
        end;
        Inc(I);
      until I = LIterCnt;
  end;

  Result := 0;
end;




Без длмнной функции StringReplace

Код: 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.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
204.
205.
206.
207.
208.
209.
210.
211.
212.
213.
function StringReplace(const Source, OldPattern, NewPattern: string; Flags: TReplaceFlags): string;
var
  Str: string;
  xOldPattern: string;
  FoundPos: Integer;
  I, J: Integer;
  SourceIdx: Integer;
  DestIdx: Integer;
  LCharsToCopy: Integer;
  FindCount: Integer;
  PosArray: array of Integer;
  LenOP: Integer;
  LenNP: Integer;
  LenS: Integer;
  ArrLen: Integer;
  LPResult, LPSource, LPNewPattern: PChar;
  LReplaceAll: Boolean;
begin
  LenOP := Length(OldPattern);
  LenS := Length(Source);
  if (LenOP = 0) or (LenS = 0) then
    Exit(Source);

  if rfIgnoreCase in Flags then
  begin
    xOldPattern := AnsiUpperCase(OldPattern);
    LenOP := Length(xOldPattern);
    if SameStr(xOldPattern, AnsiLowerCase(OldPattern)) then // Special case, for example only symbols (+ - , * .....)
      Str := Source
    else
    begin
      Str := AnsiUpperCase(Source);
      LenS := Length(Str);
    end;
  end
  else
  begin
    xOldPattern := OldPattern;
    Str := Source;
  end;

  if Str.Length <> Source.Length then
  begin
    Result := '';
    I := Low(string);
    while I <= High(Source) do
    begin
      if string.Compare(Source, I - Low(string), OldPattern, 0, LenOP, True) = 0 then
      begin
        Result := Result + NewPattern;
        Inc(I, LenOP);
        if not (rfReplaceAll in Flags) then
        begin
          Result := Result + Source.Substring(I - Low(string), MaxInt);
          Break;
        end;
      end
      else
      begin
        Result := Result + Source[I];
        Inc(I);
      end;
    end;
  end
  else
  begin
    FoundPos := 1;
    FindCount := 0;
    ArrLen := 0;
    LReplaceAll := not (rfReplaceAll in Flags);
    repeat
      FoundPos := Pos(xOldPattern, Str, FoundPos);
      if FoundPos = 0 then
        Break;

      Inc(FindCount);
      if ArrLen < FindCount then
      begin
        if ArrLen = 0 then
          ArrLen := 32
        else
          ArrLen := ArrLen * 2;
        SetLength(PosArray, ArrLen);   // call SetLength less frequently makes a huge difference when replacing multiple occurrences
      end;
      PosArray[FindCount - 1] := FoundPos - 1; // Zero based array
      Inc(FoundPos, LenOP);
    until LReplaceAll;

    if FindCount > 0 then
    begin
      LenNP := Length(NewPattern);
      LPSource := Pointer(Source);           // We use a pointer cast to avoid the _UStrToPWChar call injected by the compiler
      LPNewPattern := Pointer(NewPattern);  // We use a pointer cast to avoid the _UStrToPWChar call injected by the compiler
      if LenNP = LenOP then
      begin                           // special case where Length(OldPattern) = Length(NewPattern)
        SetLength(Result, LenS);      // in this case, we can optimize it even further
        LPResult := Pointer(Result);    // We use a pointer cast to avoid the uniquestring call injected by the compiler
        Move(LPSource^, LPResult^, LenS * SizeOf(Char));
        if LenNP = 1 then
          for I := 0 to FindCount - 1 do
            LPResult[PosArray[I]] := LPNewPattern^
        else if LenNP <= 8 then
          for I := 0 to FindCount - 1 do
            for J := 0 to LenNP -1  do
              LPResult[PosArray[I] + J] := LPNewPattern[J]
        else
          for I := 0 to FindCount - 1 do
            Move(LPNewPattern^, LPResult[PosArray[I]], LenNP * SizeOf(Char));
      end
      else
      begin
        SetLength(Result, LenS + ((LenNP - LenOP) * FindCount));
        LPResult := Pointer(Result);    // We use a pointer cast to avoid the uniquestring call injected by the compiler
        SourceIdx := 0;
        DestIdx := 0;
        if LenNP = 0 then
          for I := 0 to FindCount - 1 do
          begin
            LCharsToCopy := PosArray[I] - SourceIdx;
            if LCharsToCopy > 0 then
            begin
              if LCharsToCopy = 1 then
              begin
                LPResult[DestIdx] := LPSource[SourceIdx];
                Inc(SourceIdx);
                Inc(DestIdx);
              end
              else if LCharsToCopy <= 8 then
              begin
                for J := 0 to LCharsToCopy - 1  do
                  LPResult[DestIdx + J] := LPSource[SourceIdx + J];
                Inc(SourceIdx, LCharsToCopy);
                Inc(DestIdx, LCharsToCopy);
              end
              else
              begin
                Move(LPSource[SourceIdx], LPResult[DestIdx], LCharsToCopy * SizeOf(Char));
                Inc(SourceIdx, LCharsToCopy);
                Inc(DestIdx, LCharsToCopy);
              end;
            end;
            Inc(SourceIdx, LenOP);
          end
        else if LenNP = 1 then
          for I := 0 to FindCount - 1 do
          begin
            LCharsToCopy := PosArray[I] - SourceIdx;
            if LCharsToCopy > 0 then
            begin
              if LCharsToCopy = 1 then
              begin
                LPResult[DestIdx] := LPSource[SourceIdx];
                Inc(SourceIdx);
                Inc(DestIdx);
              end
              else if LCharsToCopy <= 8 then
              begin
                for J := 0 to LCharsToCopy - 1  do
                  LPResult[DestIdx + J] := LPSource[SourceIdx + J];
                Inc(SourceIdx, LCharsToCopy);
                Inc(DestIdx, LCharsToCopy);
              end
              else
              begin
                Move(LPSource[SourceIdx], LPResult[DestIdx], LCharsToCopy * SizeOf(Char));
                Inc(SourceIdx, LCharsToCopy);
                Inc(DestIdx, LCharsToCopy);
              end;
            end;
            LPResult[DestIdx] := LPNewPattern[0];
            Inc(DestIdx);
            Inc(SourceIdx, LenOP);
          end
        else
          for I := 0 to FindCount - 1 do
          begin
            LCharsToCopy := PosArray[I] - SourceIdx;
            if LCharsToCopy > 0 then
            begin
              if LCharsToCopy = 1 then
              begin
                LPResult[DestIdx] := LPSource[SourceIdx];
                Inc(SourceIdx);
                Inc(DestIdx);
              end
              else if LCharsToCopy <= 8 then
              begin
                for J := 0 to LCharsToCopy - 1  do
                  LPResult[DestIdx + J] := LPSource[SourceIdx + J];
                Inc(SourceIdx, LCharsToCopy);
                Inc(DestIdx, LCharsToCopy);
              end
              else
              begin
                Move(LPSource[SourceIdx], LPResult[DestIdx], LCharsToCopy * SizeOf(Char));
                Inc(SourceIdx, LCharsToCopy);
                Inc(DestIdx, LCharsToCopy);
              end;
            end;
            Move(LPNewPattern^, LPResult[DestIdx], LenNP * SizeOf(Char));
            Inc(DestIdx, LenNP);
            Inc(SourceIdx, LenOP);
          end;

        LCharsToCopy := LenS - SourceIdx;
        if LCharsToCopy > 0 then
          Move(LPSource[SourceIdx], LPResult[DestIdx], LCharsToCopy * SizeOf(Char));
      end;
    end
    else
      Result := Source;
  end;
end;




Хотя скорее это завсить. Что я легко могу обходиться без всего этого хлама,и писать довольно гибкий код.

Функция SetLength не копирует строку в моём случае, а делает реллок - уменьщая длину.
...
Рейтинг: 0 / 0
28.09.2017, 23:41:25
    #39527990
Няшик
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Форматирование текста
Эти функции плохи тем, что они гоняют одни и те же строки по много раз. И тормозят код во много. Мой же код, использует два цикла. Один, что бы прогнать основную строку, и второй - убрать лишние пробелы.

Просто - та кода. А у вас - дикий лес из тормозов.


Полезные ресурсы тратите попросту.
...
Рейтинг: 0 / 0
28.09.2017, 23:44:19
    #39527993
Няшик
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Форматирование текста
К тому - же, времени я угрохал не больше 30 секунд на написания своего кода...

А вот в случае кода DimaBr, думаю столько - же. Только на + 10 и даже + 20 секунд дольше. Так как его код сложен в понимании. А мой лёгкий как при написании, так в чтении.
...
Рейтинг: 0 / 0
28.09.2017, 23:48:57
    #39527994
Няшик
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Форматирование текста
Блин, сижу и в голову взбрело.
Сейчас же по налетите как мухи, и будите твердить
- быстрота кода не важна, для бизнес приложения.
- Грех не использовать что заложили в функционал среды - разработчики умнее

Это всё чистые предрассудки. Быстрота кода нужна - для быстрой сортировки, к примеру.

К тому - же, далеко не известно какое железо будет у пользователя. И на сколько под хламом прогибаться. Так что ваш код из pos и StringReplace может и пару минут работать на файлах в 100 тысяч строк.
...
Рейтинг: 0 / 0
29.09.2017, 00:00:35
    #39527997
чччД
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Форматирование текста
НяшикЭто вам, раз вы не можете без длинной функции Pos
...
Эти функции плохи тем, что они гоняют одни и те же строки по много раз.

Покажи в коде "плохой" функции Pos(). В каком именно месте там "гоняются строки по много раз".
...
Рейтинг: 0 / 0
29.09.2017, 00:44:40
    #39528001
Няшик
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Форматирование текста
чччД[
Покажи в коде "плохой" функции Pos(). В каком именно месте там "гоняются строки по много раз".

Давай подсчитаем.

Первый цикл
Код: pascal
1.
for i := 0 to SL.Count-1 do begin



В функции Pos идут уже два цикла repeat until
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
   repeat
        if PS[I] = LCh then
        begin
          J := 1;
          repeat
            if PS[I + J] = PSubStr[J] then
            begin
              Inc(J);
              if J = L then
                Exit(I + Offset);
            end
            else
              Break;
          until False;
        end;
        Inc(I);
      until I = LIterCnt;



Теперь, отбрасываем все проверки (Туча проверок! ДОХРЕНИЩЕ)
И смело считаем сколько раз нам надо потратить только тактов на функцию POS в обходе цикла for для длины SL.Count

(В частности, вы должны учесть - то, что мы не идём от строки к строке. Мы ещё режим саму строку - удаляя из неё лишние пробелмы, прежде чем перейти к следующей.)

Код: pascal
1.
2.
3.
4.
  repeat
      j := Pos('  ',S);
      if j > 0 then S := StringReplace(S,'  ',' ',[rfReplaceAll]);
    until j = 0;




Осознаёшь сколько работает лишнего кода под капотом ? Не уважаю я такой код.
...
Рейтинг: 0 / 0
29.09.2017, 00:58:57
    #39528005
white_nigger
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Форматирование текста
НяшикНе уважаю я такой код.Смысла уважать код, который никак не решает задачу ТС, тоже нет
...
Рейтинг: 0 / 0
29.09.2017, 01:13:42
    #39528008
Няшик
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Форматирование текста
white_niggerНяшикНе уважаю я такой код.Смысла уважать код, который никак не решает задачу ТС, тоже нет

Кто сказал что не решает?

...
Рейтинг: 0 / 0
29.09.2017, 01:15:21
    #39528010
Няшик
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Форматирование текста
Вот прямая ссылка на картинку
http://www.fotolink.su/pic_b/4304d4bd6ad9fd1e130e29e8973c742e.png
...
Рейтинг: 0 / 0
29.09.2017, 01:15:28
    #39528011
crossa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Форматирование текста
Няшик,

Ваш код быстрее и эффективнее, не о чем тут спорить.
Надо присвоить значение переменной b в начале функции Skip:
Код: pascal
1.
b := False;
...
Рейтинг: 0 / 0
29.09.2017, 01:18:37
    #39528012
Няшик
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Форматирование текста
crossa,

Да, действительно. Для лазура бы это было актуально. Но для Delphi они по умолчанию в false встаёт, по этому у меня не было в мыслях написать это условие.


Хотя если я не прав, и при каких - то условиях вместо false компилятор Delphi может выделить true, то поправьте.
...
Рейтинг: 0 / 0
29.09.2017, 01:31:16
    #39528015
чччД
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Форматирование текста
НяшикчччД[
Покажи в коде "плохой" функции Pos(). В каком именно месте там "гоняются строки по много раз".

Давай подсчитаем.

Первый цикл
Код: pascal
1.
for i := 0 to SL.Count-1 do begin



В функции Pos идут уже два цикла repeat until
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
   repeat
        if PS[I] = LCh then
        begin
          J := 1;
          repeat
            if PS[I + J] = PSubStr[J] then
            begin
              Inc(J);
              if J = L then
                Exit(I + Offset);
            end
            else
              Break;
          until False;
        end;
        Inc(I);
      until I = LIterCnt;



...

В каком конкретно месте "гоняются строки по много раз". Покажи. Хотя бы одну-единственную строчку.
...
Рейтинг: 0 / 0
29.09.2017, 01:33:17
    #39528016
чччД
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Форматирование текста
Няшик...Но для Delphi они по умолчанию в false встаёт...
Локальные переменные будут тебе инициализироваться, ага.

Точно Лошарик.
...
Рейтинг: 0 / 0
29.09.2017, 01:44:56
    #39528018
Няшик
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Форматирование текста
чччДНяшикпропущено...


Давай подсчитаем.

Первый цикл
Код: pascal
1.
for i := 0 to SL.Count-1 do begin



В функции Pos идут уже два цикла repeat until
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
   repeat
        if PS[I] = LCh then
        begin
          J := 1;
          repeat
            if PS[I + J] = PSubStr[J] then
            begin
              Inc(J);
              if J = L then
                Exit(I + Offset);
            end
            else
              Break;
          until False;
        end;
        Inc(I);
      until I = LIterCnt;



...

В каком конкретно месте "гоняются строки по много раз". Покажи. Хотя бы одну-единственную строчку.

Да ты просто издеваешься - понимая что код тот очень тормознутый. И меня просто зассрать хочешь - ох делать тебе нефиг. Я ведь показал как обойтись без гадости этакой.

чччДНяшик...Но для Delphi они по умолчанию в false встаёт...
Локальные переменные будут тебе инициализироваться, ага.

Точно Лошарик.


Вечно меня тут оскорбляешь. Хотя сам и пальцем не пошевелил. Жена в постельке не даёт? Ох бедненький, ну хорошо что я могу помочь тебе хоть как то неновисть выместить. Крепись там.

Да, я провёл аналогию. Первая переменная bool всегда в false. На неё прямой адрес стоит, дебагер показал
Код: pascal
1.
004D89A0 40               inc eax



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


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