powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Поиск последовательности в бинарном массиве
25 сообщений из 270, страница 6 из 11
Поиск последовательности в бинарном массиве
    #39587714
SOFT FOR YOU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreat,

А ты не знаешь изначально, сколько будет результирующий размер.
...
Рейтинг: 0 / 0
Поиск последовательности в бинарном массиве
    #39587715
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SOFT FOR YOU,

Взять с запасом. Не хватит - увеличить вдвое.
...
Рейтинг: 0 / 0
Поиск последовательности в бинарном массиве
    #39587716
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По любому быстрей чем вручную считать.

Да и можно тупо OldPattern с NewPattern сравнить для оптимизации памяти.
...
Рейтинг: 0 / 0
Поиск последовательности в бинарном массиве
    #39587747
SOFT FOR YOU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreat,

А чего не втрое?
Твоё решение топорное, простое
Моё решение академическое, элегантное

По скорости получается одинаково, но в моём случае есть гарантия, что лишних реаллоков памяти не будет.
...
Рейтинг: 0 / 0
Поиск последовательности в бинарном массиве
    #39587767
SOFT FOR YOU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В продолжении к 21123582 выкладываю таблички

Код: 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.
const
  {14: #0, #1..#32, ?, 'u', 'v', 'r', 'p', 'i', 'l', 'g', 'e', '_', '=', '>'}
  FIRST_CHARS: array[0..255] of Byte = (
    $00, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01,
    $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $02, $02, $02, $02, $02, $02, $02,
    $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02,
    $02, $0C, $0D, $02, $02, $02, $02, $02, $02, $0A, $02, $09, $02, $07, $02, $02, $08, $02, $02, $02,
    $06, $02, $05, $02, $02, $03, $04, $02, $02, $02, $02, $02, $02, $02, $02, $0B, $02, $02, $02, $02,
    $02, $0A, $02, $09, $02, $07, $02, $02, $08, $02, $02, $02, $06, $02, $05, $02, $02, $03, $04, $02,
    $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02,
    $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02,
    $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02,
    $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02,
    $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02,
    $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02,
    $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02);

  {12: ?, 's', 'a', 'e', 'r', 'i', 'o', 'f', 'n', '_', '=', '>'}
  SECOND_CHARS: array[0..255] of Byte = (
    $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
    $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
    $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
    $00, $8C, $9A, $00, $00, $1C, $00, $00, $00, $2A, $62, $00, $00, $46, $00, $00, $00, $00, $70, $54,
    $00, $00, $38, $0E, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $7E, $00, $1C, $00, $00,
    $00, $2A, $62, $00, $00, $46, $00, $00, $00, $00, $70, $54, $00, $00, $38, $0E, $00, $00, $00, $00,
    $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
    $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
    $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
    $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
    $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
    $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
    $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00);

  {10: ?, 'e', 'r', 'q', 't', 'o', 's', 'd', 'c', '='}
  THIRD_CHARS: array[0..255] of Word = (
    $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000,
    $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000,
    $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000,
    $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000,
    $0000, $0000, $0000, $0000, $0000, $05E8, $0000, $0000, $0000, $0000, $0000, $0540, $0498, $00A8,
    $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0348, $0000, $01F8, $0150, $03F0,
    $02A0, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000,
    $0000, $0540, $0498, $00A8, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0348,
    $0000, $01F8, $0150, $03F0, $02A0, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000,
    $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000,
    $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000,
    $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000,
    $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000,
    $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000,
    $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000,
    $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000,
    $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000,
    $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000,
    $0000, $0000, $0000, $0000);

  LEXEME_TABLE: array[0..1679{14 * 12 * 10}] of Byte = (
    $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $02, $00, $00, $00, $00, $00, $00,
    $00, $00, $00, $00, $00, $00, $01, $02, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
    $01, $02, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $02, $00, $00, $00, $00,
    $00, $00, $00, $00, $00, $00, $00, $00, $01, $02, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
    $00, $00, $01, $02, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $02, $00, $00,
    $00, $00, $00, $00, $00, $07, $00, $00, $00, $00, $01, $02, $00, $00, $00, $00, $00, $00, $00, $00,
    $00, $00, $00, $00, $01, $02, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $02,
    $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $03, $06, $00, $00, $00, $00, $00, $00,
    $00, $00, $00, $00, $00, $00, $04, $05, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
    $01, $02, $00, $00, $00, $0A, $00, $00, $00, $00, $00, $00, $00, $00, $01, $02, $00, $00, $00, $00,
    $00, $00, $00, $00, $00, $00, $00, $00, $01, $02, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
    $00, $00, $01, $02, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $02, $00, $00,
    $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $02, $00, $00, $00, $00, $00, $00, $00, $00,
    $00, $00, $00, $00, $01, $02, $00, $00, $00, $00, $00, $00, $00, $07, $00, $00, $00, $00, $01, $02,
    $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $02, $00, $00, $00, $00, $00, $00,
    $00, $00, $00, $00, $00, $00, $01, $02, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
    $03, $06, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $04, $05, $00, $00, $00, $00,
    $00, $00, $00, $00, $00, $00, $00, $00, $01, $02, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
    $00, $00, $01, $02, $00, $00, $00, $00, $0B, $00, $00, $00, $00, $00, $00, $00, $01, $02, $00, $00,
    $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $02, $00, $00, $00, $00, $00, $00, $00, $00,
    $00, $00, $00, $00, $01, $02, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $02,
    $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $02, $00, $00, $00, $00, $00, $00,
    $00, $07, $00, $00, $00, $00, $01, $02, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
    $01, $02, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $02, $00, $00, $00, $00,
    $00, $00, $00, $00, $00, $00, $00, $00, $03, $06, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
    $00, $00, $04, $05, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $02, $00, $00,
    $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $02, $00, $00, $00, $00, $00, $00, $00, $00,
    $00, $00, $00, $00, $01, $02, $00, $00, $00, $00, $00, $15, $00, $00, $00, $00, $00, $00, $01, $02,
    $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $02, $00, $00, $00, $00, $00, $00,
    $00, $00, $00, $00, $00, $00, $01, $02, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
    $01, $02, $00, $00, $00, $00, $00, $00, $00, $07, $00, $00, $00, $00, $01, $02, $00, $00, $00, $00,
    $00, $00, $00, $00, $00, $00, $00, $00, $01, $02, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
    $00, $00, $01, $02, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $03, $06, $00, $00,
    $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $04, $05, $00, $00, $00, $00, $00, $00, $00, $00,
    $00, $00, $00, $00, $01, $02, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $02,
    $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $02, $00, $00, $00, $00, $00, $0F,
    $00, $00, $00, $00, $00, $00, $01, $02, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
    $01, $02, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $02, $00, $00, $00, $00,
    $00, $00, $00, $00, $00, $0D, $00, $00, $01, $02, $00, $00, $00, $00, $00, $00, $00, $07, $00, $00,
    $00, $00, $01, $02, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $02, $00, $00,
    $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $02, $00, $00, $00, $00, $00, $00, $00, $00,
    $00, $00, $00, $00, $03, $06, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $04, $05,
    $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $02, $00, $00, $00, $00, $00, $00,
    $00, $00, $00, $00, $00, $00, $01, $02, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
    $01, $02, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $02, $00, $00, $00, $00,
    $00, $00, $12, $00, $00, $00, $00, $00, $01, $02, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
    $00, $00, $01, $02, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $02, $00, $00,
    $00, $00, $00, $00, $00, $07, $00, $00, $00, $00, $01, $02, $00, $00, $00, $00, $00, $00, $00, $00,
    $00, $00, $00, $00, $01, $02, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $02,
    $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $03, $06, $00, $00, $00, $00, $00, $00,
    $00, $00, $00, $00, $00, $00, $04, $05, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
    $01, $02, $00, $00, $00, $00, $00, $00, $00, $0E, $00, $00, $00, $00, $01, $02, $00, $00, $00, $00,
    $00, $00, $00, $00, $00, $00, $00, $00, $01, $02, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
    $00, $00, $01, $02, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $02, $00, $00,
    $00, $00, $00, $00, $00, $00, $0C, $00, $00, $00, $01, $02, $00, $00, $00, $00, $00, $00, $00, $00,
    $00, $00, $00, $00, $01, $02, $00, $00, $00, $00, $00, $00, $00, $07, $00, $00, $00, $00, $01, $02,
    $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $02, $00, $00, $00, $00, $00, $00,
    $00, $00, $00, $00, $00, $00, $01, $02, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
    $03, $06, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $04, $05, $00, $00, $00, $00,
    $00, $00, $00, $00, $00, $00, $00, $00, $01, $02, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
    $00, $00, $01, $02, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $02, $00, $00,
    $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $02, $00, $00, $00, $00, $00, $00, $00, $00,
    $00, $00, $00, $00, $01, $02, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $02,
    $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $02, $00, $00, $00, $00, $00, $00,
    $00, $07, $00, $00, $00, $00, $01, $02, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $11, $00,
    $01, $02, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $10, $01, $02, $00, $00, $00, $00,
    $00, $00, $00, $00, $00, $00, $00, $00, $03, $06, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
    $00, $00, $04, $05, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $02, $00, $00,
    $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $02, $00, $00, $00, $00, $00, $00, $00, $00,
    $00, $00, $00, $00, $01, $02, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $02,
    $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $02, $00, $00, $00, $00, $00, $00,
    $00, $00, $00, $00, $00, $00, $01, $02, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
    $01, $02, $00, $00, $00, $00, $00, $00, $00, $07, $00, $00, $00, $00, $01, $02, $00, $00, $00, $00,
    $00, $00, $00, $00, $00, $00, $00, $00, $01, $02, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
    $00, $14, $01, $02, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $03, $06, $00, $00,
    $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $04, $05, $00, $00, $00, $00, $00, $00, $00, $00,
    $00, $00, $00, $00, $01, $02, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $02,
    $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $02, $00, $00, $00, $00, $00, $00,
    $00, $00, $00, $00, $00, $00, $01, $02, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
    $01, $02, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $02, $00, $00, $00, $00,
    $00, $00, $00, $00, $00, $00, $00, $00, $01, $02, $00, $00, $00, $00, $00, $00, $00, $07, $00, $00,
    $00, $00, $01, $02, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $02, $00, $00,
    $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $02, $00, $00, $00, $00, $00, $00, $00, $00,
    $00, $00, $00, $00, $08, $06, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $04, $09);

...
Рейтинг: 0 / 0
Поиск последовательности в бинарном массиве
    #39587770
SOFT FOR YOU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bellic,

Короче, выкладывай исходный файл и список замен. Хватит ходить вокруг да около :)
...
Рейтинг: 0 / 0
Поиск последовательности в бинарном массиве
    #39587787
Bellic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вы в своем споре похоже пропустили или проигнорировали мое сообщение 21123543 ?..(((
...
Рейтинг: 0 / 0
Поиск последовательности в бинарном массиве
    #39587797
SOFT FOR YOU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bellic,

Ничего не пропустил. Ты делал разные опыты с разными подходами. Но Ахо-Корасика я там не увидел. Почему?

Возможно твой вопрос с RawByteString связан с этим. Хоть и до конца не ясно, че ты хотел.

Поэтому посыл остаётся прежним. Выкладывай исходный файл и список замен.
...
Рейтинг: 0 / 0
Поиск последовательности в бинарном массиве
    #39587805
s62
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bellic,

наверное где-то это было, но тема разрослась, а в первом сообщении не нашел: при замене, как я понял, длина новой подстроки совпадает с длиной старой, правильно? (то есть заменяем OldPattern на NewPattern и длины строк OldPattern и NewPattern равны?) Это я делаю вывод из
Код: pascal
1.
2.
3.
4.
begin // Нашли фразу
	   // Копируем RawZamena в RawBin начиная с позиции AdrFind
	   Move(RawZamena[1], RawBin[AdrFind], LenBPoisk);
...
...
Рейтинг: 0 / 0
Поиск последовательности в бинарном массиве
    #39587816
Bellic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторНо Ахо-Корасика я там не увидел. Почему?SOFT FOR YOU, ты издеваешься? У меня код поиска и замены получился короче некуда!
Просадка во времени в Реальной процедуре - в другом месте видимо!
В сообщении 21123543 у меня было пара вопросов... Игнор?
...
Рейтинг: 0 / 0
Поиск последовательности в бинарном массиве
    #39587818
Bellic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
s62 , да, в моем случае RawPoisk b RawZamena - равные по длине!
...
Рейтинг: 0 / 0
Поиск последовательности в бинарном массиве
    #39587820
Bellic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Алгоритм Ахо — Корасик - конечно интересная штука, но я долго в нем буду разбираться..
Возможно изучу позже - сейчас отвлекают часто..)) Выходные всеж!
...
Рейтинг: 0 / 0
Поиск последовательности в бинарном массиве
    #39587823
Няшик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SOFT FOR YOU,

Да.. Быстрее в 1.6 раза, я в своём примере убрал сборку строку. И результаты

0,073298 Мой
0,046160 Твой

На файле из поста 21123284

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


Код: 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.
214.
215.
216.
217.
218.
219.
220.
221.
222.
223.
224.
225.
226.
227.
228.
229.
230.
231.
232.
233.
234.
235.
236.
237.
238.
239.
240.
241.
242.
243.
244.
245.
246.
247.
248.
249.
250.
251.
252.
253.
254.
255.
256.
257.
258.
259.
260.
261.
262.
263.
264.
265.
266.
267.
268.
269.
270.
271.
272.
273.
274.
275.
276.
277.
278.
279.
280.
281.
282.
283.
284.
285.
286.
287.
288.
289.
290.
291.
292.
293.
294.
295.
296.
297.
298.
299.
300.
301.
302.
303.
304.
305.
306.
307.
308.
309.
310.
311.
312.
313.
314.
315.
316.
317.
318.
319.
320.
321.
322.
323.
324.
325.
326.
327.
328.
329.
330.
331.
332.
333.
334.
335.
336.
337.
338.
339.
340.
341.
342.
343.
344.
345.
346.
347.
348.
349.
350.
351.
352.
353.
354.
355.
356.
357.
358.
359.
360.
361.
362.
363.
364.
365.
366.
367.
368.
369.
370.
371.
372.
373.
374.
375.
376.
377.
378.
379.
380.
381.
382.
383.
384.
385.
386.
387.
388.
389.
390.
391.
392.
393.
394.
395.
396.
397.
398.
399.
400.
401.
402.
403.
404.
405.
406.
407.
408.
409.
410.
411.
412.
413.
414.
415.
416.
417.
418.
419.
420.
421.
422.
423.
424.
425.
426.
427.
428.
429.
430.
431.
432.
433.
434.
435.
436.
437.
438.
439.
440.
441.
442.
443.
444.
445.
446.
447.
448.
449.
450.
451.
452.
453.
454.
455.
456.
457.
458.
459.
460.
461.
462.
463.
464.
465.
466.
467.
468.
469.
470.
471.
472.
473.
474.
475.
476.
477.
478.
479.
480.
481.
482.
483.
484.
485.
486.
487.
488.
489.
490.
491.
492.
493.
494.
495.
496.
497.
498.
499.
500.
501.
502.
503.
504.
505.
506.
507.
508.
509.
510.
511.
512.
513.
514.
515.
516.
517.
518.
519.
520.
521.
522.
523.
524.
525.
526.
527.
528.
529.
530.
531.
532.
533.
534.
535.
536.
537.
538.
539.
540.
541.
542.
543.
544.
545.
546.
547.
548.
549.
550.
551.
552.
553.
554.
555.
556.
557.
558.
559.
560.
561.
562.
563.
564.
565.
566.
567.
568.
569.
570.
571.
572.
573.
574.
575.
576.
577.
578.
579.
580.
581.
582.
583.
584.
585.
586.
587.
588.
589.
590.
591.
592.
593.
594.
595.
596.
597.
598.
599.
600.
601.
602.
603.
604.
605.
606.
607.
608.
609.
610.
611.
612.
613.
614.
615.
616.
617.
618.
619.
620.
621.
622.
623.
624.
625.
626.
627.
628.
629.
630.
631.
632.
633.
634.
635.
636.
637.
638.
639.
640.
641.
642.
643.
644.
645.
646.
647.
648.
649.
650.
651.
652.
653.
654.
655.
656.
657.
658.
659.
660.
661.
662.
663.
664.
665.
666.
667.
668.
669.
670.
671.
672.
673.
674.
675.
676.
677.
678.
679.
680.
681.
682.
683.
684.
685.
686.
687.
688.
689.
690.
691.
692.
693.
694.
695.
696.
697.
698.
699.
700.
701.
702.
703.
704.
705.
706.
707.
708.
709.
710.
711.
712.
713.
714.
715.
716.
717.
718.
719.
720.
721.
722.
723.
724.
725.
726.
727.
728.
729.
730.
731.
732.
733.
734.
735.
736.
737.
738.
739.
740.
741.
742.
743.
744.
745.
746.
747.
748.
749.
750.
751.
752.
753.
754.
755.
756.
757.
758.
759.
760.
761.
762.
763.
764.
765.
766.
767.
768.
769.
770.
771.
772.
773.
774.
775.
776.
777.
778.
779.
780.
781.
782.
783.
784.
785.
786.
787.
788.
789.
790.
791.
792.
793.
794.
795.
796.
797.
798.
799.
800.
801.
802.
803.
804.
805.
806.
807.
808.
809.
810.
811.
812.
813.
814.
815.
816.
817.
818.
819.
820.
821.
822.
823.
824.
825.
826.
827.
828.
829.
830.
831.
832.
833.
834.
835.
836.
837.
838.
839.
840.
841.
842.
843.
844.
845.
846.
847.
848.
849.
850.
851.
852.
853.
854.
855.
856.
857.
858.
859.
860.
861.
862.
863.
864.
865.
866.
867.
868.
869.
870.
871.
872.
873.
874.
875.
876.
877.
878.
879.
880.
881.
882.
883.
884.
885.
886.
887.
888.
889.
890.
891.
892.
893.
894.
895.
896.
897.
898.
899.
900.
901.
902.
903.
904.
905.
906.
907.
908.
909.
910.
911.
912.
913.
914.
915.
916.
917.
918.
919.
920.
921.
922.
923.
924.
925.
926.
927.
928.
929.
930.
931.
932.
933.
934.
935.
936.
937.
938.
939.
940.
941.
942.
943.
944.
945.
946.
947.
948.
949.
950.
951.
952.
953.
954.
955.
956.
957.
958.
959.
960.
961.
962.
963.
964.
965.
966.
967.
968.
969.
970.
971.
972.
973.
974.
975.
976.
977.
978.
979.
980.
981.
982.
983.
984.
985.
986.
987.
988.
989.
990.
991.
992.
993.
994.
995.
996.
997.
998.
999.
1000.
1001.
1002.
1003.
1004.
1005.
1006.
1007.
1008.
1009.
1010.
program Project1;

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

uses
  Winapi.Windows,
  System.SysUtils, TypInfo;

const
  { 14: #0, #1..#32, ?, 'u', 'v', 'r', 'p', 'i', 'l', 'g', 'e', '_', '=', '>' }
  FIRST_CHARS: array [0 .. 255] of Byte = ($00, $01, $01, $01, $01, $01, $01,
    $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01,
    $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $02, $02, $02, $02,
    $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02,
    $02, $02, $02, $02, $02, $02, $02, $02, $02, $0C, $0D, $02, $02, $02, $02,
    $02, $02, $0A, $02, $09, $02, $07, $02, $02, $08, $02, $02, $02, $06, $02,
    $05, $02, $02, $03, $04, $02, $02, $02, $02, $02, $02, $02, $02, $0B, $02,
    $02, $02, $02, $02, $0A, $02, $09, $02, $07, $02, $02, $08, $02, $02, $02,
    $06, $02, $05, $02, $02, $03, $04, $02, $02, $02, $02, $02, $02, $02, $02,
    $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02,
    $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02,
    $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02,
    $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02,
    $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02,
    $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02,
    $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02,
    $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02,
    $02, $02, $02, $02, $02, $02, $02, $02, $02);

  { 12: ?, 's', 'a', 'e', 'r', 'i', 'o', 'f', 'n', '_', '=', '>' }
  SECOND_CHARS: array [0 .. 255] of Byte = ($00, $00, $00, $00, $00, $00, $00,
    $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
    $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
    $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
    $00, $00, $00, $00, $00, $00, $00, $00, $00, $8C, $9A, $00, $00, $1C, $00,
    $00, $00, $2A, $62, $00, $00, $46, $00, $00, $00, $00, $70, $54, $00, $00,
    $38, $0E, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $7E, $00,
    $1C, $00, $00, $00, $2A, $62, $00, $00, $46, $00, $00, $00, $00, $70, $54,
    $00, $00, $38, $0E, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
    $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
    $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
    $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
    $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
    $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
    $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
    $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
    $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
    $00, $00, $00, $00, $00, $00, $00, $00, $00);

  { 10: ?, 'e', 'r', 'q', 't', 'o', 's', 'd', 'c', '=' }
  THIRD_CHARS: array [0 .. 255] of Word = ($0000, $0000, $0000, $0000, $0000,
    $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000,
    $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000,
    $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000,
    $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000,
    $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000,
    $0000, $05E8, $0000, $0000, $0000, $0000, $0000, $0540, $0498, $00A8, $0000,
    $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0348, $0000, $01F8,
    $0150, $03F0, $02A0, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000,
    $0000, $0000, $0000, $0000, $0000, $0000, $0540, $0498, $00A8, $0000, $0000,
    $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0348, $0000, $01F8, $0150,
    $03F0, $02A0, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000,
    $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000,
    $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000,
    $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000,
    $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000,
    $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000,
    $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000,
    $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000,
    $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000,
    $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000,
    $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000,
    $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000,
    $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000);

  LEXEME_TABLE: array [0 .. 1679 { 14 * 12 * 10 } ] of Byte = ($00, $00, $00,
    $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $02, $00, $00, $00, $00,
    $00, $00, $00, $00, $00, $00, $00, $00, $01, $02, $00, $00, $00, $00, $00,
    $00, $00, $00, $00, $00, $00, $00, $01, $02, $00, $00, $00, $00, $00, $00,
    $00, $00, $00, $00, $00, $00, $01, $02, $00, $00, $00, $00, $00, $00, $00,
    $00, $00, $00, $00, $00, $01, $02, $00, $00, $00, $00, $00, $00, $00, $00,
    $00, $00, $00, $00, $01, $02, $00, $00, $00, $00, $00, $00, $00, $00, $00,
    $00, $00, $00, $01, $02, $00, $00, $00, $00, $00, $00, $00, $07, $00, $00,
    $00, $00, $01, $02, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
    $00, $01, $02, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
    $01, $02, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $03,
    $06, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $04, $05,
    $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $02, $00,
    $00, $00, $0A, $00, $00, $00, $00, $00, $00, $00, $00, $01, $02, $00, $00,
    $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $02, $00, $00, $00,
    $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $02, $00, $00, $00, $00,
    $00, $00, $00, $00, $00, $00, $00, $00, $01, $02, $00, $00, $00, $00, $00,
    $00, $00, $00, $00, $00, $00, $00, $01, $02, $00, $00, $00, $00, $00, $00,
    $00, $00, $00, $00, $00, $00, $01, $02, $00, $00, $00, $00, $00, $00, $00,
    $07, $00, $00, $00, $00, $01, $02, $00, $00, $00, $00, $00, $00, $00, $00,
    $00, $00, $00, $00, $01, $02, $00, $00, $00, $00, $00, $00, $00, $00, $00,
    $00, $00, $00, $01, $02, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
    $00, $00, $03, $06, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
    $00, $04, $05, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
    $01, $02, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $01,
    $02, $00, $00, $00, $00, $0B, $00, $00, $00, $00, $00, $00, $00, $01, $02,
    $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $02, $00,
    $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $02, $00, $00,
    $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $02, $00, $00, $00,
    $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $02, $00, $00, $00, $00,
    $00, $00, $00, $07, $00, $00, $00, $00, $01, $02, $00, $00, $00, $00, $00,
    $00, $00, $00, $00, $00, $00, $00, $01, $02, $00, $00, $00, $00, $00, $00,
    $00, $00, $00, $00, $00, $00, $01, $02, $00, $00, $00, $00, $00, $00, $00,
    $00, $00, $00, $00, $00, $03, $06, $00, $00, $00, $00, $00, $00, $00, $00,
    $00, $00, $00, $00, $04, $05, $00, $00, $00, $00, $00, $00, $00, $00, $00,
    $00, $00, $00, $01, $02, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
    $00, $00, $01, $02, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
    $00, $01, $02, $00, $00, $00, $00, $00, $15, $00, $00, $00, $00, $00, $00,
    $01, $02, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $01,
    $02, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $02,
    $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $02, $00,
    $00, $00, $00, $00, $00, $00, $07, $00, $00, $00, $00, $01, $02, $00, $00,
    $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $02, $00, $00, $00,
    $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $02, $00, $00, $00, $00,
    $00, $00, $00, $00, $00, $00, $00, $00, $03, $06, $00, $00, $00, $00, $00,
    $00, $00, $00, $00, $00, $00, $00, $04, $05, $00, $00, $00, $00, $00, $00,
    $00, $00, $00, $00, $00, $00, $01, $02, $00, $00, $00, $00, $00, $00, $00,
    $00, $00, $00, $00, $00, $01, $02, $00, $00, $00, $00, $00, $00, $00, $00,
    $00, $00, $00, $00, $01, $02, $00, $00, $00, $00, $00, $0F, $00, $00, $00,
    $00, $00, $00, $01, $02, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
    $00, $00, $01, $02, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
    $00, $01, $02, $00, $00, $00, $00, $00, $00, $00, $00, $00, $0D, $00, $00,
    $01, $02, $00, $00, $00, $00, $00, $00, $00, $07, $00, $00, $00, $00, $01,
    $02, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $02,
    $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $02, $00,
    $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $03, $06, $00, $00,
    $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $04, $05, $00, $00, $00,
    $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $02, $00, $00, $00, $00,
    $00, $00, $00, $00, $00, $00, $00, $00, $01, $02, $00, $00, $00, $00, $00,
    $00, $00, $00, $00, $00, $00, $00, $01, $02, $00, $00, $00, $00, $00, $00,
    $00, $00, $00, $00, $00, $00, $01, $02, $00, $00, $00, $00, $00, $00, $12,
    $00, $00, $00, $00, $00, $01, $02, $00, $00, $00, $00, $00, $00, $00, $00,
    $00, $00, $00, $00, $01, $02, $00, $00, $00, $00, $00, $00, $00, $00, $00,
    $00, $00, $00, $01, $02, $00, $00, $00, $00, $00, $00, $00, $07, $00, $00,
    $00, $00, $01, $02, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
    $00, $01, $02, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
    $01, $02, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $03,
    $06, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $04, $05,
    $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $02, $00,
    $00, $00, $00, $00, $00, $00, $0E, $00, $00, $00, $00, $01, $02, $00, $00,
    $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $02, $00, $00, $00,
    $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $02, $00, $00, $00, $00,
    $00, $00, $00, $00, $00, $00, $00, $00, $01, $02, $00, $00, $00, $00, $00,
    $00, $00, $00, $0C, $00, $00, $00, $01, $02, $00, $00, $00, $00, $00, $00,
    $00, $00, $00, $00, $00, $00, $01, $02, $00, $00, $00, $00, $00, $00, $00,
    $07, $00, $00, $00, $00, $01, $02, $00, $00, $00, $00, $00, $00, $00, $00,
    $00, $00, $00, $00, $01, $02, $00, $00, $00, $00, $00, $00, $00, $00, $00,
    $00, $00, $00, $01, $02, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
    $00, $00, $03, $06, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
    $00, $04, $05, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
    $01, $02, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $01,
    $02, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $02,
    $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $02, $00,
    $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $02, $00, $00,
    $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $02, $00, $00, $00,
    $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $02, $00, $00, $00, $00,
    $00, $00, $00, $07, $00, $00, $00, $00, $01, $02, $00, $00, $00, $00, $00,
    $00, $00, $00, $00, $00, $11, $00, $01, $02, $00, $00, $00, $00, $00, $00,
    $00, $00, $00, $00, $00, $10, $01, $02, $00, $00, $00, $00, $00, $00, $00,
    $00, $00, $00, $00, $00, $03, $06, $00, $00, $00, $00, $00, $00, $00, $00,
    $00, $00, $00, $00, $04, $05, $00, $00, $00, $00, $00, $00, $00, $00, $00,
    $00, $00, $00, $01, $02, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
    $00, $00, $01, $02, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
    $00, $01, $02, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
    $01, $02, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $01,
    $02, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $02,
    $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $02, $00,
    $00, $00, $00, $00, $00, $00, $07, $00, $00, $00, $00, $01, $02, $00, $00,
    $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $02, $00, $00, $00,
    $00, $00, $00, $00, $00, $00, $00, $00, $14, $01, $02, $00, $00, $00, $00,
    $00, $00, $00, $00, $00, $00, $00, $00, $03, $06, $00, $00, $00, $00, $00,
    $00, $00, $00, $00, $00, $00, $00, $04, $05, $00, $00, $00, $00, $00, $00,
    $00, $00, $00, $00, $00, $00, $01, $02, $00, $00, $00, $00, $00, $00, $00,
    $00, $00, $00, $00, $00, $01, $02, $00, $00, $00, $00, $00, $00, $00, $00,
    $00, $00, $00, $00, $01, $02, $00, $00, $00, $00, $00, $00, $00, $00, $00,
    $00, $00, $00, $01, $02, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
    $00, $00, $01, $02, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
    $00, $01, $02, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
    $01, $02, $00, $00, $00, $00, $00, $00, $00, $07, $00, $00, $00, $00, $01,
    $02, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $02,
    $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $02, $00,
    $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $08, $06, $00, $00,
    $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $04, $09);

type
  TLexeme = (T_UNKNOWN, T_ASSIGN, T_GREATER, T_IS_EQUAL, T_DOUBLE_ARROW, T_SR,
    T_IS_GREATER_OR_EQUAL, T_IF, T_IS_IDENTICAL, T_SR_EQUAL, T_USE, T_VAR,
    T_LIST, T_GOTO, T_ISSET, T_RETURN, T_DIR, T_ENDWHILE, T_PROTECTED,
    T_ENDSWITCH, T_CLASS_C, T_REQUIRE_ONCE);

const
  LEXEME_LENGTH: array [Ord(Low(TLexeme)) .. Ord(High(TLexeme))] of Byte = (1,
    // :[?]: T_UNKNOWN
    1, // [=]: T_ASSIGN
    1, // [>]: T_GREATER
    2, // [==]: T_IS_EQUAL
    2, // [=>]: T_DOUBLE_ARROW
    2, // [>>]: T_SR
    2, // [>=]: T_IS_GREATER_OR_EQUAL
    2, // [if]: T_IF
    3, // [===]: T_IS_IDENTICAL
    3, // [>>=]: T_SR_EQUAL
    3, // [use]: T_USE
    3, // [var]: T_VAR
    4, // 
    : T_LIST 4, // [goto]: T_GOTO 5, // [isset]: T_ISSET 6, // [return]: T_RETURN 7, // [__DIR__]: T_DIR 8, // [endwhile]: T_ENDWHILE 9, // [protected]: T_PROTECTED 9, // [endswitch]: T_ENDSWITCH 9, // [__CLASS__]: T_CLASS_C 12 // [require_once]: T_REQUIRE_ONCE ); var StartTime, StopTime: Int64; iCounterPerSec: Int64; procedure BeginTime; begin QueryPerformanceCounter(StartTime); end; procedure EndTime; begin if QueryPerformanceCounter(StopTime) and QueryPerformanceFrequency (iCounterPerSec) then Writeln(Format('%.6f', [(StopTime - StartTime) / iCounterPerSec])); end; type PHPTokenType = (T_END, S_START, T_STRING, T_USE1, T_VAR1, T_REQUIRE_ONCE1, T_RETURN1, T_PROTECTED1, T_ISSET1, T_LIST1, T_GOTO1, T_IF1, T_ENDSWITCH1, T_ENDWHILE1, T_CLASS_C1, T_DIR1, T_IS_IDENTICAL1, T_IS_EQUAL1, T_DOUBLE_ARROW1, T_ASSIGN1, T_SR_EQUAL1, T_SR1, T_IS_GREATER_OR_EQUAL1, T_GREATER1); var TokenInfoString: array [PHPTokenType] of string = ( 'T_END', 'S_START', 'T_STRING', 'T_USE', 'T_VAR', 'T_REQUIRE_ONCE', 'T_RETURN', 'T_PROTECTED', 'T_ISSET', 'T_LIST', 'T_GOTO', 'T_IF', 'T_ENDSWITCH', 'T_ENDWHILE', 'T_CLASS_C', 'T_DIR', 'T_IS_IDENTICAL', 'T_IS_EQUAL', 'T_DOUBLE_ARROW', 'T_ASSIGN', 'T_SR_EQUAL', 'T_SR', 'T_IS_GREATER_OR_EQUAL', 'T_GREATER' ); var filelen, tmpAllocSize: Int64; tmpStrCode: PWideChar; CurrentToken: PHPTokenType; StrCode: PWideChar; Value: String; CurrentLenToken, i, i2, i3, i4: Cardinal; function IsCharNext(i: Byte): Boolean; inline; begin case PWideChar(StrCode + i)^ of #0, '$', '!', '@', '#', '%', '^', '&', '*', '+', '[', ']', '{', '}', ':', '"', '|', '\', '''', ';', '<', '>', '?', '/', '.', #32, #10, #13, #9, ',', '-', '=', '`': Result := true; else Result := false; end; end; function GetNextToken(): Boolean; label NewStart, TokenStr; var x: Integer; begin CurrentToken := T_END; NewStart: case PWord(StrCode)^ or $0020 of 61: // = case PWord(StrCode + 1)^ or $0020 of 61: // = case PWord(StrCode + 2)^ or $0020 of 61: // = begin CurrentToken := T_IS_IDENTICAL1; Inc(StrCode, 3); end; else begin CurrentToken := T_IS_EQUAL1; Inc(StrCode, 2); end; end; 62: // > begin CurrentToken := T_DOUBLE_ARROW1; Inc(StrCode, 2); end; else begin CurrentToken := T_ASSIGN1; Inc(StrCode, 1); end; end; 62: // > case PWord(StrCode + 1)^ or $0020 of 61: // = begin CurrentToken := T_IS_GREATER_OR_EQUAL1; Inc(StrCode, 2); end; 62: // > case PWord(StrCode + 2)^ or $0020 of 61: // = begin CurrentToken := T_SR_EQUAL1; Inc(StrCode, 3); end; else begin CurrentToken := T_SR1; Inc(StrCode, 2); end; end; else begin CurrentToken := T_GREATER1; Inc(StrCode, 1); end; end; 95: // _ case PWord(StrCode + 1)^ or $0020 of 95: // _ case PWord(StrCode + 2)^ or $0020 of 99: // c case PWord(StrCode + 3)^ or $0020 of 108: // l case PWord(StrCode + 4)^ or $0020 of 97: // a case PWord(StrCode + 5)^ or $0020 of 115: // s case PWord(StrCode + 6)^ or $0020 of 115: // s case PWord(StrCode + 7)^ or $0020 of 95: // _ case PWord(StrCode + 8)^ or $0020 of 95: // _ begin CurrentToken := T_CLASS_C1; Inc(StrCode, 9); end; else goto TokenStr; end; else goto TokenStr; end; else goto TokenStr; end; else goto TokenStr; end; else goto TokenStr; end; else goto TokenStr; end; 100: // d case PWord(StrCode + 3)^ or $0020 of 105: // i case PWord(StrCode + 4)^ or $0020 of 114: // r case PWord(StrCode + 5)^ or $0020 of 95: // _ case PWord(StrCode + 6)^ or $0020 of 95: // _ begin CurrentToken := T_DIR1; Inc(StrCode, 7); end; else goto TokenStr; end; else goto TokenStr; end; else goto TokenStr; end; else goto TokenStr; end; else goto TokenStr; end; else goto TokenStr; end; 101: // e case PWord(StrCode + 1)^ or $0020 of 110: // n case PWord(StrCode + 2)^ or $0020 of 100: // d case PWord(StrCode + 3)^ or $0020 of 115: // s case PWord(StrCode + 4)^ or $0020 of 119: // w case PWord(StrCode + 5)^ or $0020 of 105: // i case PWord(StrCode + 6)^ or $0020 of 116: // t case PWord(StrCode + 7)^ or $0020 of 99: // c case PWord(StrCode + 8)^ or $0020 of 104: // h if IsCharNext(9) then begin CurrentToken := T_ENDSWITCH1; Inc(StrCode, 9); end else goto TokenStr; else goto TokenStr; end; else goto TokenStr; end; else goto TokenStr; end; else goto TokenStr; end; else goto TokenStr; end; 119: // w case PWord(StrCode + 4)^ or $0020 of 104: // h case PWord(StrCode + 5)^ or $0020 of 105: // i case PWord(StrCode + 6)^ or $0020 of 108: // l case PWord(StrCode + 7)^ or $0020 of 101: // e if IsCharNext(8) then begin CurrentToken := T_ENDWHILE1; Inc(StrCode, 8); end else goto TokenStr; else goto TokenStr; end; else goto TokenStr; end; else goto TokenStr; end; else goto TokenStr; end; else goto TokenStr; end; else goto TokenStr; end; else goto TokenStr; end; 103: // g case PWord(StrCode + 1)^ or $0020 of 111: // o case PWord(StrCode + 2)^ or $0020 of 116: // t case PWord(StrCode + 3)^ or $0020 of 111: // o if IsCharNext(4) then begin CurrentToken := T_GOTO1; Inc(StrCode, 4); end else goto TokenStr; else goto TokenStr; end; else goto TokenStr; end; else goto TokenStr; end; 105: // i case PWord(StrCode + 1)^ or $0020 of 102: // f if IsCharNext(2) then begin CurrentToken := T_IF1; Inc(StrCode, 2); end else goto TokenStr; 115: // s case PWord(StrCode + 2)^ or $0020 of 115: // s case PWord(StrCode + 3)^ or $0020 of 101: // e case PWord(StrCode + 4)^ or $0020 of 116: // t if IsCharNext(5) then begin CurrentToken := T_ISSET1; Inc(StrCode, 5); end else goto TokenStr; else goto TokenStr; end; else goto TokenStr; end; else goto TokenStr; end; else goto TokenStr; end; 108: // l case PWord(StrCode + 1)^ or $0020 of 105: // i case PWord(StrCode + 2)^ or $0020 of 115: // s case PWord(StrCode + 3)^ or $0020 of 116: // t if IsCharNext(4) then begin CurrentToken := T_LIST1; Inc(StrCode, 4); end else goto TokenStr; else goto TokenStr; end; else goto TokenStr; end; else goto TokenStr; end; 112: // p case PWord(StrCode + 1)^ or $0020 of 114: // r case PWord(StrCode + 2)^ or $0020 of 111: // o case PWord(StrCode + 3)^ or $0020 of 116: // t case PWord(StrCode + 4)^ or $0020 of 101: // e case PWord(StrCode + 5)^ or $0020 of 99: // c case PWord(StrCode + 6)^ or $0020 of 116: // t case PWord(StrCode + 7)^ or $0020 of 101: // e case PWord(StrCode + 8)^ or $0020 of 100: // d if IsCharNext(9) then begin CurrentToken := T_PROTECTED1; Inc(StrCode, 9); end else goto TokenStr; else goto TokenStr; end; else goto TokenStr; end; else goto TokenStr; end; else goto TokenStr; end; else goto TokenStr; end; else goto TokenStr; end; else goto TokenStr; end; else goto TokenStr; end; 114: // r case PWord(StrCode + 1)^ or $0020 of 101: // e case PWord(StrCode + 2)^ or $0020 of 113: // q case PWord(StrCode + 3)^ or $0020 of 117: // u case PWord(StrCode + 4)^ or $0020 of 105: // i case PWord(StrCode + 5)^ or $0020 of 114: // r case PWord(StrCode + 6)^ or $0020 of 101: // e case PWord(StrCode + 7)^ or $0020 of 95: // _ case PWord(StrCode + 8)^ or $0020 of 111: // o case PWord(StrCode + 9)^ or $0020 of 110: // n case PWord(StrCode + 10)^ or $0020 of 99: // c case PWord(StrCode + 11)^ or $0020 of 101: // e if IsCharNext(12) then begin CurrentToken := T_REQUIRE_ONCE1; Inc(StrCode, 12); end else goto TokenStr; else goto TokenStr; end; else goto TokenStr; end; else goto TokenStr; end; else goto TokenStr; end; else goto TokenStr; end; else goto TokenStr; end; else goto TokenStr; end; else goto TokenStr; end; else goto TokenStr; end; 116: // t case PWord(StrCode + 3)^ or $0020 of 117: // u case PWord(StrCode + 4)^ or $0020 of 114: // r case PWord(StrCode + 5)^ or $0020 of 110: // n if IsCharNext(6) then begin CurrentToken := T_RETURN1; Inc(StrCode, 6); end else goto TokenStr; else goto TokenStr; end; else goto TokenStr; end; else goto TokenStr; end; else goto TokenStr; end; else goto TokenStr; end; 117: // u case PWord(StrCode + 1)^ or $0020 of 115: // s case PWord(StrCode + 2)^ or $0020 of 101: // e if IsCharNext(3) then begin CurrentToken := T_USE1; Inc(StrCode, 3); end else goto TokenStr; else goto TokenStr; end; else goto TokenStr; end; 118: // v case PWord(StrCode + 1)^ or $0020 of 97: // a case PWord(StrCode + 2)^ or $0020 of 114: // r if IsCharNext(3) then begin CurrentToken := T_VAR1; Inc(StrCode, 3); end else goto TokenStr; else goto TokenStr; end; else goto TokenStr; end; else TokenStr: begin case PWord(StrCode)^ of Ord(#32), Ord(#9), Ord(#13), Ord(#10): begin x := 0; while true do begin case StrCode[x] of #10, #13, #32, #9: Inc(x); else begin Inc(StrCode, x); goto NewStart; end; end; end; Inc(x); end; end; i3 := 0; while not IsCharNext(i3) do Inc(i3); if i3 <> 0 then begin Inc(StrCode, i3); goto NewStart; end; { if i3 <> 0 then begin SetLength(Value, i3); Move(StrCode^, Value[1], i3 * SizeOf(WideChar)); Inc(CurrentLenToken, i3); Inc(StrCode, i3); CurrentToken := T_STRING; end; } end; end; Result := CurrentToken <> T_END; end; function GetTokenName(FTokenId: PHPTokenType): string; inline; begin Result := TokenInfoString[FTokenId]; end; function FileSeek64(Handle: THandle; const Offset: Int64; Origin: Integer): Int64; begin Result := Offset; Int64Rec(Result).Lo := SetFilePointer(Handle, Int64Rec(Result).Lo, @Int64Rec(Result).Hi, Origin); if (Int64Rec(Result).Lo = $FFFFFFFF) and (GetLastError <> 0) then Int64Rec(Result).Hi := $FFFFFFFF; end; function LoadPHPFile(PHPFile: PWideChar): Boolean; var TFile: THandle; baf: TBytes; begin TFile := FileOpen(PHPFile, $0000 or $0020); Result := TFile <> INVALID_HANDLE_VALUE; if Result then begin filelen := FileSeek64(TFile, 0, 2); FileSeek64(TFile, 0, 0); SetLength(baf, filelen); FileRead(TFile, baf, 0, filelen); FileClose(TFile); tmpAllocSize := (filelen + 1) * SizeOf(WideChar); tmpStrCode := AllocMem(tmpAllocSize); MultiByteToWideChar(CP_UTF8, 8, @baf[0], filelen, @tmpStrCode[0], filelen); StrCode := tmpStrCode; Finalize(baf); end; end; procedure ClosePHPFile; begin FreeMem(tmpStrCode, tmpAllocSize); tmpAllocSize := 0; tmpStrCode := nil; StrCode := nil; filelen := 0; CurrentToken := S_START; CurrentLenToken := 0; Value := ''; end; procedure LexemeFound(const Lexeme: TLexeme); begin Writeln(GetEnumName(TypeInfo(TLexeme), Ord(Lexeme))); end; procedure ParseLexemes(const Text: AnsiString); label unknown; type HugeByteArray = array [0 .. High(Integer) - 1] of Byte; var S: ^HugeByteArray; Value: NativeUInt; begin S := Pointer(Text); if (S = nil) then exit; repeat // spaces, #0 Value := FIRST_CHARS[S[0]]; if (Value <= 1) then repeat Inc(PByte(S)); if (Value = 0 { #0 } ) then exit; Value := FIRST_CHARS[S[0]]; until (Value > 1); // offset (3 tables) Inc(Value, SECOND_CHARS[S[1]]); Inc(Value, THIRD_CHARS[S[2]]); // Lexeme Value := LEXEME_TABLE[Value]; if (Value >= NativeUInt(T_LIST) { 4 symbols } ) then case Value of // 4, //
      : T_LIST Ord(T_LIST): begin if (S[3] or $20 <> Ord('t')) then goto unknown; end; // 4, // [goto]: T_GOTO Ord(T_GOTO): begin if (S[3] or $20 <> Ord('o')) then goto unknown; end; // 5, // [isset]: T_ISSET Ord(T_ISSET): begin if (S[3] or $20 <> Ord('e')) or (S[4] or $20 <> Ord('t')) then goto unknown; end; // 6, // [return]: T_RETURN Ord(T_RETURN): begin if (S[3] or $20 <> Ord('u')) or (S[4] or $20 <> Ord('r')) or (S[5] or $20 <> Ord('n')) then goto unknown; end; // 7, // [__DIR__]: T_DIR Ord(T_DIR): begin if (S[3] or $20 <> Ord('i')) or (S[4] or $20 <> Ord('r')) or (S[5] <> Ord('_')) or (S[6] <> Ord('_')) then goto unknown; end; // 8, // [endwhile]: T_ENDWHILE | 9, // [endswitch]: T_ENDSWITCH Ord(T_ENDWHILE): begin case (S[3] or $20) of Ord('w'): begin if (S[4] or $20 <> Ord('h')) or (S[5] or $20 <> Ord('i')) or (S[6] or $20 <> Ord('l')) or (S[7] or $20 <> Ord('e')) then goto unknown; end; Ord('s'): begin Value := Ord(T_ENDSWITCH); if (S[4] or $20 <> Ord('w')) or (S[5] or $20 <> Ord('i')) or (S[6] or $20 <> Ord('t')) or (S[7] or $20 <> Ord('c')) or (S[8] or $20 <> Ord('h')) then goto unknown; end; else goto unknown; end; end; // 9, // [protected]: T_PROTECTED Ord(T_PROTECTED): begin if (S[3] or $20 <> Ord('t')) or (S[4] or $20 <> Ord('e')) or (S[5] or $20 <> Ord('c')) or (S[6] or $20 <> Ord('t')) or (S[7] or $20 <> Ord('e')) or (S[8] or $20 <> Ord('d')) then goto unknown; end; // 9, // [__CLASS__]: T_CLASS_C Ord(T_CLASS_C): begin if (S[3] or $20 <> Ord('l')) or (S[4] or $20 <> Ord('a')) or (S[5] or $20 <> Ord('s')) or (S[6] or $20 <> Ord('s')) or (S[7] <> Ord('_')) or (S[8] <> Ord('_')) then goto unknown; end; // 12 // [require_once]: T_REQUIRE_ONCE Ord(T_REQUIRE_ONCE): begin if (S[3] or $20 <> Ord('u')) or (S[4] or $20 <> Ord('i')) or (S[5] or $20 <> Ord('r')) or (S[6] or $20 <> Ord('e')) or (S[7] <> Ord('_')) or (S[8] or $20 <> Ord('o')) or (S[9] or $20 <> Ord('n')) or (S[10] or $20 <> Ord('c')) or (S[11] or $20 <> Ord('e')) then goto unknown; end; else { вообще в данной ситуации никакого else не будет, но для иллюстрации выглядит неплохо } unknown: Value := Ord(T_UNKNOWN); end; // found lexeme // LexemeFound(TLexeme(Value)); Inc(PByte(S), LEXEME_LENGTH[Value]); until (false); end; begin LoadPHPFile('1.file'); BeginTime; while GetNextToken do begin // Writeln(GetTokenName(CurrentToken) + '. Value(' + IntToStr(CurrentLenToken) // + '):' + Value); end; EndTime; // Writeln('---------------'); BeginTime; ParseLexemes(AnsiString(tmpStrCode)); EndTime; ClosePHPFile; Readln; end.

...
Рейтинг: 0 / 0
Поиск последовательности в бинарном массиве
    #39587825
SOFT FOR YOU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bellic,

3 секунды для 10Мб, а особенно с заменой на строки одинаковой длины - это ужасно медленно!
А вопросы твои ужасно сформулированы. Сформулируй по-человечески.
...
Рейтинг: 0 / 0
Поиск последовательности в бинарном массиве
    #39587826
Bellic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нашел по вот http://forum.sources.ru/index.php?showtopic=173106&st=60] этому адресу уже готовый проект с алго "Ахо-Корасик"..))
Будет время - потестирую в разрезе своей реальной процедуры!
...
Рейтинг: 0 / 0
Поиск последовательности в бинарном массиве
    #39587827
SOFT FOR YOU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bellic,

Выложи свой проект с исходными данными и заменами. Хватит мучить наши мозги.
...
Рейтинг: 0 / 0
Поиск последовательности в бинарном массиве
    #39587830
Bellic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SOFT FOR YOU3 секунды для 10Мб, а особенно с заменой на строки одинаковой длины - это ужасно медленно!Сказал же уже что проседает в другом месте!
А вопросы твои ужасно сформулированы. Сформулируй по-человечески.
Код: pascal
1.
2.
3.
4.
//Для переменых типа String:
s := 'privet';
s := 'poka';
// в результате s='poka'

А теперь попробуйте тоже самое сделать поменяв тип String на RawByteString !
Что-бы получить результат - мне пришлось сделать так:
Код: pascal
1.
2.
3.
4.
5.
//Для переменых типа RawByteString:
s := 'privet';
s :=''; // !!!!!!!!!
s := 'poka';
// в результате s='poka'


Почему нельзя просто переприсвоить значение новыми данными как со Стрингом?
может будет так правильно?:
Код: pascal
1.
2.
3.
4.
//Для переменых типа RawByteString:
s := 'privet';
s[1] := 'poka';
// в результате s='poka'

???
SOFT FOR YOU , надеюсь так мой вопрос понятен?
...
Рейтинг: 0 / 0
Поиск последовательности в бинарном массиве
    #39587837
SOFT FOR YOU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НяшикДа.. Быстрее в 1.6 раза, я в своём примере убрал сборку строку. И результаты

0,073298 Мой
0,046160 Твой

На файле из поста 21123284
Не корректно замерять производительность на таком файле. Там же UNKNOWN идентификаторы типа "JUTRJHIROTJHOTBHNIkoorth" и мой пример для каждой буквы будет выдавать unknown-токен. К тому же на практике буквенные операторы встречаются значительно реже, чем те же <= или $, а ты частоту их использования уравниваешь.

НяшикКинь статью почитать, про то, как генерировать такие хэши. Я программку динамическую напишу тогда уж, для генерации подобного
Нет никакой статьи. Да и генерацией хешей данную задачку нельзя назвать. Здесь идёт речь о генерации таблиц, и хешами они тут называются из-за отсылки к алгоритму Ахо-Корасика, где нужно идентифицировать символы.

Как и в ситуации ТС, так и в общем случае для подобного класса задач, я рекомендую создать array[Char] для первого символа, по которому уже можно будет определить, что с этим символом можно делать. В случае ТС может содержаться указатель на массив искомых идентификаторов по первой букве или nil. В твоём случае это может быть "класс первого символа".

Например, для #0 "класс первого символа" равен 0. Для всех пробельных символов (включая символы перевода каретки и табуляции) "класс первого символа" равен 1. Поэтому осуществить пропуск пробелов и отследить конец файла - получается весьма элегантно:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
    // spaces, #0
    Value := FIRST_CHARS[S[0]];
    if (Value <= 1) then
    repeat
      Inc(PByte(S));
      if (Value = 0{#0}) then Exit;
      Value := FIRST_CHARS[S[0]];
    until (Value > 1);


Для буквенных лексем я бы выбрал всего один "класс первого символа" и их идентификацию сделал бы в отдельной функции. Ну а второй и третий символ - сделаны для быстрой идентификации всех твоих многочисленных операторов без ветвлений (надеюсь, ты уже в курсе, чем плоха ошибка предсказания ветвления) и простыней кода. Кидаю, как я генерировал таблички:

Код: 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.
214.
215.
216.
217.
218.
219.
220.
221.
222.
223.
224.
225.
226.
227.
228.
229.
230.
231.
232.
233.
234.
235.
236.
237.
238.
239.
240.
241.
242.
243.
244.
245.
246.
247.
248.
249.
250.
251.
252.
253.
254.
255.
256.
257.
258.
259.
260.
261.
262.
263.
264.
265.
266.
267.
268.
269.
270.
271.
272.
273.
274.
275.
276.
277.
278.
279.
280.
281.
282.
283.
284.
285.
286.
287.
288.
289.
290.
291.
292.
293.
294.
295.
296.
297.
298.
299.
300.
301.
302.
303.
304.
305.
306.
307.
308.
309.
310.
311.
312.
313.
314.
315.
const
  __FIRST_CHARS: array[0..13] of Char = ( {14}
    #0,
    #32,
    '?',
    'u', // use
    'v', // var
    'r', // require_once, return
    'p', // protected
    'i', // isset, if
    'l', // list
    'g', // goto
    'e', // endswitch, endwhile
    '_', // __CLASS__, __DIR__
    '=', // ===, ==, =>, =
    '>'  // >>=, >>, >=, >
  );

  __SECOND_CHARS: array[0..11] of Char = ( {12}
    '?',
    's', // use, isset
    'a', // var
    'e', // require_once, return
    'r', // protected
    'i', // list
    'o', // goto
    'f', // if
    'n', // endswitch, endwhile
    '_', // __CLASS__, __DIR__
    '=', // ===, ==, >=
    '>'  // >>=, >
  );

  __THIRD_CHARS: array[0..9] of Char = ( {10}
    '?',
    'e', // use
    'r', // var
    'q', // require_once
    't', // return, goto
    'o', // protected
    's', // isset, list
    'd', // endswitch, endwhile, __DIR__
    'c', // __CLASS__
    '='  // ===, >>=
  );

 (*
    Всего исходов: 14 * 12 * 10 = 1680
 *)

var
  {14: #0, #1..#32, ?, 'u', 'v', 'r', 'p', 'i', 'l', 'g', 'e', '_', '=', '>'}
  FIRST_CHARS: array[Byte{AnsiChar}] of Byte;
  {12: ?, 's', 'a', 'e', 'r', 'i', 'o', 'f', 'n', '_', '=', '>'}
  SECOND_CHARS: array[Byte{AnsiChar}] of Byte;
  {10: ?, 'e', 'r', 'q', 't', 'o', 's', 'd', 'c', '='}
  THIRD_CHARS: array[Byte{AnsiChar}] of Word;

  LEXEME_TABLE: array[0..14 * 12 * 10 - 1] of Byte{TLexeme};

procedure InitTables;
var
  i: Integer;
  C: Char;
  Lexeme: TLexeme;
  _F, _S, _T: Integer;
  F, S, T: Char;
begin
  FillChar(FIRST_CHARS, SizeOf(FIRST_CHARS), 2);
  for i := 1 to 32 do FIRST_CHARS[i] := 1;

  for i := 0 to High(__FIRST_CHARS) do
  begin
    C := __FIRST_CHARS[i];
    FIRST_CHARS[Ord(C)] := i;
    case C of
      'a'..'z': FIRST_CHARS[Ord(C) xor $20] := i;
    end;
  end;

  for i := 1 to High(__SECOND_CHARS) do
  begin
    C := __SECOND_CHARS[i];
    SECOND_CHARS[Ord(C)] := i * Length(__FIRST_CHARS);
    case C of
      'a'..'z': SECOND_CHARS[Ord(C) xor $20] :=  i * Length(__FIRST_CHARS);
    end;
  end;

  for i := 1 to High(__THIRD_CHARS) do
  begin
    C := __THIRD_CHARS[i];
    THIRD_CHARS[Ord(C)] := i * Length(__FIRST_CHARS) * Length(__SECOND_CHARS);
    case C of
      'a'..'z': THIRD_CHARS[Ord(C) xor $20] :=  i * Length(__FIRST_CHARS) * Length(__SECOND_CHARS);
    end;
  end;

  for i := Low(LEXEME_TABLE) to High(LEXEME_TABLE) do
  begin
    if (i = 166) then
    begin
      FIRST_CHARS[0] := FIRST_CHARS[0];
    end;

    _F := i mod Length(__FIRST_CHARS);
    _S := (i div (Length(__FIRST_CHARS)) mod Length(__SECOND_CHARS));
    _T := i div (Length(__FIRST_CHARS) * Length(__SECOND_CHARS));
    F := __FIRST_CHARS[_F];
    S := __SECOND_CHARS[_S];
    T := __THIRD_CHARS[_T];

    Lexeme := T_UNKNOWN;
    case F of
      'u': // use
      begin
        if (S = 's') and (T = 'e') then
          Lexeme := T_USE;
      end;
      'v': // var
      begin
        if (S = 'a') and (T = 'r') then
          Lexeme := T_VAR;
      end;
      'r': // require_once, return
      begin
        if (S = 'e') then
        case T of
          'q': Lexeme := T_REQUIRE_ONCE;
          't': Lexeme := T_RETURN;
        end;
      end;
      'p': // protected
      begin
        if (S = 'r') and (T = 'o') then
          Lexeme := T_PROTECTED;
      end;
      'i': // isset, if
      begin
        case S of
          'f': Lexeme := T_IF;
          's':
          begin
            if (T = 's') then
              Lexeme := T_ISSET;
          end;
        end;
      end;
      'l': // list
      begin
        if (S = 'i') and (T = 's') then
          Lexeme := T_LIST;
      end;
      'g': // goto
      begin
        if (S = 'o') and (T = 't') then
          Lexeme := T_GOTO;
      end;
      'e': // endswitch, endwhile
      begin
        if (S = 'n') and (T = 'd') then
          Lexeme := T_ENDWHILE;
      end;
      '_': // __CLASS__, __DIR__
      begin
        if (S = '_') then
        case T of
          'c': Lexeme := T_CLASS_C;
          'd': Lexeme := T_DIR;
        end;
      end;
      '=': // ===, ==, =>, =
      begin
        Lexeme := T_ASSIGN;
        case S of
          '=':
          begin
            Lexeme := T_IS_EQUAL;
            if (T = '=') then
              Lexeme := T_IS_IDENTICAL;
          end;
          '>':
          begin
            Lexeme := T_DOUBLE_ARROW;
          end;
        end;
      end;
      '>':  // >>=, >>, >=, >
      begin
        Lexeme := T_GREATER;
        case S of
          '>':
          begin
            Lexeme := T_SR;
            if (T = '=') then
              Lexeme := T_SR_EQUAL;
          end;
          '=':
          begin
            Lexeme := T_IS_GREATER_OR_EQUAL;
          end;
        end;
      end;
    end;

    LEXEME_TABLE[i] := Ord(Lexeme);
  end;
end;

procedure SaveTables;
var
  List: TStringList;

  procedure Add(const S: string); overload;
  begin
    List.Add(S);
  end;

  procedure Add(const FmtStr: string; const Args: array of const); overload;
  begin
    Add(Format(FmtStr, Args));
  end;

  procedure StartTable(const Name: string; const Count: Integer; const _Type: string);
  begin
    Add('  %s: array[0..%d] of %s = (', [Name, Count - 1, _Type]);
  end;

  procedure AddValuesLine(const Values: string; const Finish: Boolean);
  var
    S: string;
  begin
    S := '    ' + Values;

    if (Finish) then
    begin
      S[Length(S) - 1] := ')';
      S[Length(S)] := ';';
    end;

    Add(S);
    if (Finish) then
      Add('');
  end;

  procedure AddBytesLine(const Values: array of Byte; const Finish: Boolean);
  var
    i: Integer;
    S: string;
  begin
    for i := Low(Values) to High(Values) do
      S := S + Format('$%0.2x, ', [Values[i]]);

    AddValuesLine(S, Finish);
  end;

  procedure AddWordsLine(const Values: array of Word; const Finish: Boolean);
  var
    i: Integer;
    S: string;
  begin
    for i := Low(Values) to High(Values) do
      S := S + Format('$%0.4x, ', [Values[i]]);

    AddValuesLine(S, Finish);
  end;

  procedure AddBytes(const Name: string; const Values: array of Byte);
  const
    ITEMS_COUNT = 20;
  var
    Buffer, SubItems: TArray<Byte>;
  begin
    SetLength(Buffer, Length(Values));
    Move(Values, Pointer(Buffer)^, Length(Values) * SizeOf(Values[Low(Values)]));

    StartTable(Name, Length(Values), 'Byte');
    repeat
      SubItems := Copy(Buffer, 0, ITEMS_COUNT);
      Delete(Buffer, 0, ITEMS_COUNT);
      AddBytesLine(SubItems, (Buffer = nil));
    until (Buffer = nil);
  end;

  procedure AddWords(const Name: string; const Values: array of Word);
  const
    ITEMS_COUNT = 14;
  var
    Buffer, SubItems: TArray<Word>;
  begin
    SetLength(Buffer, Length(Values));
    Move(Values, Pointer(Buffer)^, Length(Values) * SizeOf(Values[Low(Values)]));

    StartTable(Name, Length(Values), 'Word');
    repeat
      SubItems := Copy(Buffer, 0, ITEMS_COUNT);
      Delete(Buffer, 0, ITEMS_COUNT);
      AddWordsLine(SubItems, (Buffer = nil));
    until (Buffer = nil);
  end;
begin
  List := TStringList.Create;
  try
    AddBytes('FIRST_CHARS', FIRST_CHARS);
    AddBytes('SECOND_CHARS', SECOND_CHARS);
    AddWords('THIRD_CHARS', THIRD_CHARS);
    AddBytes('LEXEME_TABLE', LEXEME_TABLE);

    List.SaveToFile('Tables.txt');
  finally
    List.Free;
  end;

  Halt;
end;

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

Дальше бы, выделил новую строку, вместе с длиной всех заменяемых символов.

Копировал бы строку в новую, до Н найденного. Копировал найденное. Передвинул указатель до X заменяемого. И так, пока всё не скопирую в новую строку.

А старую, бы, попутно через N количество отчищал, что бы память не гадить сильно.


....
Такой подход должен быстро работать, за счёт одного раза выделения новой памяти. И простому копирование в неё.
...
Рейтинг: 0 / 0
Поиск последовательности в бинарном массиве
    #39587839
SOFT FOR YOU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BellicСказал же уже что проседает в другом месте!
Ты нас за лохов что ли держишь?
У тебя 357 пар замен на 48Кб, где он у тебя ещё может проседать при замене в одинаковую длину?

Bellicнадеюсь так мой вопрос понятен?
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
procedure TestString;
var
  S: string;
begin
  S := 'privet';
  S := 'poka';

  Writeln(S);
end;

procedure TestRawByteString;
var
  S: RawByteString;
begin
  S := 'privet';
  S := 'poka';

  Writeln(S);
end;



На выходе:
Код: plaintext
1.
poka
poka

Что я делаю не так?
...
Рейтинг: 0 / 0
Поиск последовательности в бинарном массиве
    #39587845
Bellic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот код, одинаковый для фраз Поиска и Замены:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
//--------------- Заполняем массив фразы Поиска ----------------------
DlinaPoiska := DlinaPoiska div 2; // Длина Фразы-поиска в Байтах
RawPoisk := '';
SetLength(BPoisk, (DlinaPoiska));  // Инициируем длину массива фразы Поиска байтах
for m  := 0 to DlinaPoiska-1 do    // Заполняем массив фразы Поиска в байтах
   begin //FPerevod.Seek(AddressPoiska + m*2, soFromBeginning);
         //FPerevod.ReadBuffer(SPSimvol[1],2);
         SPSimvol[1] := AnsiChar(BPerevod[AddressPoiska + m*2]);
         SPSimvol[2] := AnsiChar(BPerevod[AddressPoiska + m*2 + 1]);
         PSimvol := StrToInt('$' + SPSimvol);
         BPoisk[m] := PSimvol;
   end;
RawPoisk := RawByteString(BPoisk);

При повторном прохождении - без оператора во второй строке (RawPoisk := '';) - последняя строка дает неверный результат!
(Изначально фразы поиска и замены хранятся в Нех-виде, например: "31 32 33 34 45" - это соответственно цифры 1 2 3 4 5)
...
Рейтинг: 0 / 0
Поиск последовательности в бинарном массиве
    #39587851
Bellic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В данном коде как я понял, строка
Код: pascal
1.
RawPoisk := RawByteString(BPoisk);

Примерно аналогична присваиванию:
Код: pascal
1.
s := 'privet';

???
...
Рейтинг: 0 / 0
Поиск последовательности в бинарном массиве
    #39587856
SOFT FOR YOU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bellic,

Приведи полноценный тестовый проект (небольшой)
Где можно оттрейсить и найти проблему
Пока ты разговариваешь не непонятном языке
...
Рейтинг: 0 / 0
Поиск последовательности в бинарном массиве
    #39587861
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BellicВ данном коде
В данном коде нет объявлений переменных, поэтому там может быть всё что угодно.
...
Рейтинг: 0 / 0
Поиск последовательности в бинарном массиве
    #39587897
Няшик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SOFT FOR YOUВ продолжении к 21123582 выкладываю таблички

Код: 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.
const
  {14: #0, #1..#32, ?, 'u', 'v', 'r', 'p', 'i', 'l', 'g', 'e', '_', '=', '>'}
  FIRST_CHARS: array[0..255] of Byte = (
    $00, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01,
    $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $01, $02, $02, $02, $02, $02, $02, $02,
    $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02,
    $02, $0C, $0D, $02, $02, $02, $02, $02, $02, $0A, $02, $09, $02, $07, $02, $02, $08, $02, $02, $02,
    $06, $02, $05, $02, $02, $03, $04, $02, $02, $02, $02, $02, $02, $02, $02, $0B, $02, $02, $02, $02,
    $02, $0A, $02, $09, $02, $07, $02, $02, $08, $02, $02, $02, $06, $02, $05, $02, $02, $03, $04, $02,
    $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02,
    $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02,
    $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02,
    $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02,
    $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02,
    $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02,
    $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02, $02);

  {12: ?, 's', 'a', 'e', 'r', 'i', 'o', 'f', 'n', '_', '=', '>'}
  SECOND_CHARS: array[0..255] of Byte = (
    $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
    $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
    $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
    $00, $8C, $9A, $00, $00, $1C, $00, $00, $00, $2A, $62, $00, $00, $46, $00, $00, $00, $00, $70, $54,
    $00, $00, $38, $0E, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $7E, $00, $1C, $00, $00,
    $00, $2A, $62, $00, $00, $46, $00, $00, $00, $00, $70, $54, $00, $00, $38, $0E, $00, $00, $00, $00,
    $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
    $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
    $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
    $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
    $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
    $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
    $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00);

  {10: ?, 'e', 'r', 'q', 't', 'o', 's', 'd', 'c', '='}
  THIRD_CHARS: array[0..255] of Word = (
    $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000,
    $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000,
    $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000,
    $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000,
    $0000, $0000, $0000, $0000, $0000, $05E8, $0000, $0000, $0000, $0000, $0000, $0540, $0498, $00A8,
    $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0348, $0000, $01F8, $0150, $03F0,
    $02A0, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000,
    $0000, $0540, $0498, $00A8, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0348,
    $0000, $01F8, $0150, $03F0, $02A0, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000,
    $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000,
    $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000,
    $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000,
    $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000,
    $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000,
    $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000,
    $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000,
    $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000,
    $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000,
    $0000, $0000, $0000, $0000);

  LEXEME_TABLE: array[0..1679{14 * 12 * 10}] of Byte = (
    $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $02, $00, $00, $00, $00, $00, $00,
    $00, $00, $00, $00, $00, $00, $01, $02, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
    $01, $02, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $02, $00, $00, $00, $00,
    $00, $00, $00, $00, $00, $00, $00, $00, $01, $02, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
    $00, $00, $01, $02, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $02, $00, $00,
    $00, $00, $00, $00, $00, $07, $00, $00, $00, $00, $01, $02, $00, $00, $00, $00, $00, $00, $00, $00,
    $00, $00, $00, $00, $01, $02, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $02,
    $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $03, $06, $00, $00, $00, $00, $00, $00,
    $00, $00, $00, $00, $00, $00, $04, $05, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
    $01, $02, $00, $00, $00, $0A, $00, $00, $00, $00, $00, $00, $00, $00, $01, $02, $00, $00, $00, $00,
    $00, $00, $00, $00, $00, $00, $00, $00, $01, $02, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
    $00, $00, $01, $02, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $02, $00, $00,
    $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $02, $00, $00, $00, $00, $00, $00, $00, $00,
    $00, $00, $00, $00, $01, $02, $00, $00, $00, $00, $00, $00, $00, $07, $00, $00, $00, $00, $01, $02,
    $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $02, $00, $00, $00, $00, $00, $00,
    $00, $00, $00, $00, $00, $00, $01, $02, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
    $03, $06, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $04, $05, $00, $00, $00, $00,
    $00, $00, $00, $00, $00, $00, $00, $00, $01, $02, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
    $00, $00, $01, $02, $00, $00, $00, $00, $0B, $00, $00, $00, $00, $00, $00, $00, $01, $02, $00, $00,
    $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $02, $00, $00, $00, $00, $00, $00, $00, $00,
    $00, $00, $00, $00, $01, $02, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $02,
    $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $02, $00, $00, $00, $00, $00, $00,
    $00, $07, $00, $00, $00, $00, $01, $02, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
    $01, $02, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $02, $00, $00, $00, $00,
    $00, $00, $00, $00, $00, $00, $00, $00, $03, $06, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
    $00, $00, $04, $05, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $02, $00, $00,
    $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $02, $00, $00, $00, $00, $00, $00, $00, $00,
    $00, $00, $00, $00, $01, $02, $00, $00, $00, $00, $00, $15, $00, $00, $00, $00, $00, $00, $01, $02,
    $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $02, $00, $00, $00, $00, $00, $00,
    $00, $00, $00, $00, $00, $00, $01, $02, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
    $01, $02, $00, $00, $00, $00, $00, $00, $00, $07, $00, $00, $00, $00, $01, $02, $00, $00, $00, $00,
    $00, $00, $00, $00, $00, $00, $00, $00, $01, $02, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
    $00, $00, $01, $02, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $03, $06, $00, $00,
    $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $04, $05, $00, $00, $00, $00, $00, $00, $00, $00,
    $00, $00, $00, $00, $01, $02, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $02,
    $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $02, $00, $00, $00, $00, $00, $0F,
    $00, $00, $00, $00, $00, $00, $01, $02, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
    $01, $02, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $02, $00, $00, $00, $00,
    $00, $00, $00, $00, $00, $0D, $00, $00, $01, $02, $00, $00, $00, $00, $00, $00, $00, $07, $00, $00,
    $00, $00, $01, $02, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $02, $00, $00,
    $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $02, $00, $00, $00, $00, $00, $00, $00, $00,
    $00, $00, $00, $00, $03, $06, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $04, $05,
    $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $02, $00, $00, $00, $00, $00, $00,
    $00, $00, $00, $00, $00, $00, $01, $02, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
    $01, $02, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $02, $00, $00, $00, $00,
    $00, $00, $12, $00, $00, $00, $00, $00, $01, $02, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
    $00, $00, $01, $02, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $02, $00, $00,
    $00, $00, $00, $00, $00, $07, $00, $00, $00, $00, $01, $02, $00, $00, $00, $00, $00, $00, $00, $00,
    $00, $00, $00, $00, $01, $02, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $02,
    $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $03, $06, $00, $00, $00, $00, $00, $00,
    $00, $00, $00, $00, $00, $00, $04, $05, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
    $01, $02, $00, $00, $00, $00, $00, $00, $00, $0E, $00, $00, $00, $00, $01, $02, $00, $00, $00, $00,
    $00, $00, $00, $00, $00, $00, $00, $00, $01, $02, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
    $00, $00, $01, $02, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $02, $00, $00,
    $00, $00, $00, $00, $00, $00, $0C, $00, $00, $00, $01, $02, $00, $00, $00, $00, $00, $00, $00, $00,
    $00, $00, $00, $00, $01, $02, $00, $00, $00, $00, $00, $00, $00, $07, $00, $00, $00, $00, $01, $02,
    $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $02, $00, $00, $00, $00, $00, $00,
    $00, $00, $00, $00, $00, $00, $01, $02, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
    $03, $06, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $04, $05, $00, $00, $00, $00,
    $00, $00, $00, $00, $00, $00, $00, $00, $01, $02, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
    $00, $00, $01, $02, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $02, $00, $00,
    $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $02, $00, $00, $00, $00, $00, $00, $00, $00,
    $00, $00, $00, $00, $01, $02, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $02,
    $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $02, $00, $00, $00, $00, $00, $00,
    $00, $07, $00, $00, $00, $00, $01, $02, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $11, $00,
    $01, $02, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $10, $01, $02, $00, $00, $00, $00,
    $00, $00, $00, $00, $00, $00, $00, $00, $03, $06, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
    $00, $00, $04, $05, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $02, $00, $00,
    $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $02, $00, $00, $00, $00, $00, $00, $00, $00,
    $00, $00, $00, $00, $01, $02, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $02,
    $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $02, $00, $00, $00, $00, $00, $00,
    $00, $00, $00, $00, $00, $00, $01, $02, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
    $01, $02, $00, $00, $00, $00, $00, $00, $00, $07, $00, $00, $00, $00, $01, $02, $00, $00, $00, $00,
    $00, $00, $00, $00, $00, $00, $00, $00, $01, $02, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
    $00, $14, $01, $02, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $03, $06, $00, $00,
    $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $04, $05, $00, $00, $00, $00, $00, $00, $00, $00,
    $00, $00, $00, $00, $01, $02, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $02,
    $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $02, $00, $00, $00, $00, $00, $00,
    $00, $00, $00, $00, $00, $00, $01, $02, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
    $01, $02, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $02, $00, $00, $00, $00,
    $00, $00, $00, $00, $00, $00, $00, $00, $01, $02, $00, $00, $00, $00, $00, $00, $00, $07, $00, $00,
    $00, $00, $01, $02, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $02, $00, $00,
    $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $02, $00, $00, $00, $00, $00, $00, $00, $00,
    $00, $00, $00, $00, $08, $06, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $04, $09);



Начал тестировать твой код тщательнее.. И заметил, что у тебя колоссальная ошибка.

Ты не проверяешь конец слова, к примеру issetError и isset будут ровны, потому что он сравнит только isset и скипнет 5 символов.


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


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