powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Поиск последовательности в бинарном массиве
25 сообщений из 270, страница 1 из 11
Поиск последовательности в бинарном массиве
    #39586584
Bellic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Други, есть ли в современных Delphi (XE и выше) функции поиска последовательности в массиве?
Если есть - ткните, плизз, носом и научите пользоваться...

Имеем:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
// Несущественные детали в коде - упущены!!
var
BBin: TBytes;
const
// массив Поиска (могут быть и другие значения и длина)
Poisk: array[0..4] of Byte = ($31, $32, $33, $34, $35);    
// FullBinFileName - полный путь к файлу
FBin:=TFileStream.Create(FullBinFileName, fmOpenRead);
SizeBinFile := FBin.Size;
SetLength(BBin, SizeBinFile); // Определяем длину массивa TBytes
FBin.ReadBuffer(BBin, SizeBinFile); // Читаем BIN-Файл в массив

Т.е. имеем на входе два массива:

- первый - это большой массив (например это файл, загруженный в TBytes);
- второй - небольшой массив, который нужно искать в первом.

Задача:
Найти индекс в первом массиве, начиная с которого идет искомый.

P.S. похожая задача уже рассматривалась мной в теме Поиск и Замена последовательности байт в бинарном файле с использованием TMemoryStream , но по некоторым причинам хочу попробовать простым перебором и сравнением с использованием массивов TBytes или может есть уже готовые функции?
...
Рейтинг: 0 / 0
Поиск последовательности в бинарном массиве
    #39586587
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bellic,

есть такие средства. Называются "перебор в цикле" и "сравнение".
...
Рейтинг: 0 / 0
Поиск последовательности в бинарном массиве
    #39586589
Bellic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
чччД, ну это понятно!
Я же спросил - может быть есть другие варианты, кроме банальных
автор"перебор в цикле" и "сравнение"???
...
Рейтинг: 0 / 0
Поиск последовательности в бинарном массиве
    #39586590
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bellic,

Звиняйте хлопцi, бананiв нема!
...
Рейтинг: 0 / 0
Поиск последовательности в бинарном массиве
    #39586622
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bellic,

Можно прочитать кусок из файла в AnsiString и пользоваться Pos()
...
Рейтинг: 0 / 0
Поиск последовательности в бинарном массиве
    #39586623
Bellic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DarkMasterBellic,
Можно прочитать кусок из файла в AnsiString и пользоваться Pos()
Файл - не текстовый, а бинарный! - В нем может быть непредсказуемое сочетание байт!
...
Рейтинг: 0 / 0
Поиск последовательности в бинарном массиве
    #39586626
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bellic,

И что мешает проверить?
...
Рейтинг: 0 / 0
Поиск последовательности в бинарном массиве
    #39586634
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DarkMasterМожно прочитать кусок из файла в AnsiString и пользоваться Pos()
Тогда уже в RawByteString.
...
Рейтинг: 0 / 0
Поиск последовательности в бинарном массиве
    #39586635
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BellicФайл - не текстовый, а бинарный! - В нем может быть непредсказуемое сочетание байт!А в строке такого быть не может?
...
Рейтинг: 0 / 0
Поиск последовательности в бинарном массиве
    #39586639
кеп-ко
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
есть уже готовые функции ? - Да, есть, куча!

- Ха, не угадали!, так-какможет быть непредсказуемое сочетание байт!
...
Рейтинг: 0 / 0
Поиск последовательности в бинарном массиве
    #39586643
Bellic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
кеп-коесть уже готовые функции ? - Да, есть, куча!
Например?
Только без Стрингов в различном их виде и в пределах Темы топика!?..))
...
Рейтинг: 0 / 0
Поиск последовательности в бинарном массиве
    #39586650
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bellic,

вместо того, чтобы клянчить на паперти, уже бы написал, что нужно.
...
Рейтинг: 0 / 0
Поиск последовательности в бинарном массиве
    #39586652
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
имхо, тут программист нужен (С)
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Поиск последовательности в бинарном массиве
    #39586657
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Первый результат в гугле...

Код: 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.
function BytePos(const Pattern: TBytes; const Buffer: PByte; const BufLen: cardinal): PByte;
var
  PatternLength: cardinal;
  i: cardinal;
  j: cardinal;
  OK: boolean;
begin
  result := nil;
  PatternLength := length(Pattern);
  if PatternLength > BufLen then Exit;
  if PatternLength = 0 then Exit(Buffer);
  for i := 0 to BufLen - PatternLength do
    if PByte(Buffer + i)^ = Pattern[0] then
    begin
      OK := true;
      for j := 1 to PatternLength - 1 do
        if PByte(Buffer + i + j)^ <> Pattern[j] then
        begin
          OK := false;
          break
        end;
      if OK then
        Exit(Buffer + i);
    end;
end;
...
Рейтинг: 0 / 0
Поиск последовательности в бинарном массиве
    #39586658
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Но вангую что Pos +RawByteString будет работать быстрей.
...
Рейтинг: 0 / 0
Поиск последовательности в бинарном массиве
    #39586660
кеп-ко
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
...
Рейтинг: 0 / 0
Поиск последовательности в бинарном массиве
    #39586661
Bellic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
чччДBellic,
вместо того, чтобы клянчить на паперти, уже бы написал, что нужно.
Попрошу не фыркать и иметь малейшее уважение!!!
Я и не сижу на месте - отлаживаю простой перебор со сравнением, а он у меня гораздо сложнее чем Задача !
...
Рейтинг: 0 / 0
Поиск последовательности в бинарном массиве
    #39586665
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bellic,

Все равно это сведется к асмовым командам семейства SCASxxx :) Тебе уже дали поиск и по байтам и по символам - пробуй, что тебе больше подойдет.
...
Рейтинг: 0 / 0
Поиск последовательности в бинарном массиве
    #39586670
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BellicчччДBellic,
вместо того, чтобы клянчить на паперти, уже бы написал, что нужно.
Попрошу не фыркать и иметь малейшее уважение!!!
Я и не сижу на месте - отлаживаю простой перебор со сравнением, а он у меня гораздо сложнее чем Задача !

Что же у тебя за Задача такая, которая гораздо проще, чем простой перебор со сравнением???
...
Рейтинг: 0 / 0
Поиск последовательности в бинарном массиве
    #39586674
Bellic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
rgreat
Первый результат в гугле...
Код: 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.
function BytePos(const Pattern: TBytes; const Buffer: PByte; const BufLen: cardinal): PByte;
var
  PatternLength: cardinal;
  i: cardinal;
  j: cardinal;
  OK: boolean;
begin
  result := nil;
  PatternLength := length(Pattern);
  if PatternLength > BufLen then Exit;
  if PatternLength = 0 then Exit(Buffer);
  for i := 0 to BufLen - PatternLength do
    if PByte(Buffer + i)^ = Pattern[0] then
    begin
      OK := true;
      for j := 1 to PatternLength - 1 do
        if PByte(Buffer + i + j)^ <> Pattern[j] then
        begin
          OK := false;
          break
        end;
      if OK then
        Exit(Buffer + i);
    end;
end;

rgreat , спасибо за идею!)))

кеп-коBellic,
Код: plaintext
CompareMem
Это я уже делал - читайте ссылку в первом сообщении!
...
Рейтинг: 0 / 0
Поиск последовательности в бинарном массиве
    #39586676
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрюха, найми студента.
так будет гораздо быстрее.
далсЯ тебе это программизмЪ, на старости лет...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Поиск последовательности в бинарном массиве
    #39586677
Bellic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
rgreatНо вангую что Pos +RawByteString будет работать быстрей.
Попробую и это реализовать, просто еще не со всеми возможностями знаком..(
Читал разом файл в массив TByte и спокойно работал с ним, а в RawByteString - реально засунуть бинарник длиной к примеру 25 Мбайт а потом искать в нем вхождение с помощью Pos?

(Т.е. стандартных функций поиска в массиве - нету?)
...
Рейтинг: 0 / 0
Поиск последовательности в бинарном массиве
    #39586680
Bellic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
МимопроходящийАндрюха, найми студента.
так будет гораздо быстрее.
далсЯ тебе это программизмЪ, на старости лет...
Опаньки!!!???
А Вы - кто, раз имя мое знаете?..)))

Отвечаю! - Мой интерес-не интересен никому! Все с кем я общался, хотят все на халяву или же занимаются другими направлениями!
Поэтому пришлось изучать и осваивать самому, а позже вспомнить уроки программирования и одолеть начальные азы Дэлфи, дабы автоматизировать и ускорить получение результатов своего Хобби!..)))

А еще - "программизмЪ" не дает закоксоваться мозгам и впасть в старческий маразм!..)))) Рекомендую!..)))
...
Рейтинг: 0 / 0
Поиск последовательности в бинарном массиве
    #39586683
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
18.01.2018 19:17, Bellic пишет:
> А еще - "программизмЪ" не дает закоксоваться мозгам и впасть в старческий маразм!..)))) Рекомендую!..)))

да ну его нафиг.
я бросил.
и тебе рекомендую.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Поиск последовательности в бинарном массиве
    #39586687
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bellic...закоксоваться мозгам и впасть в старческий маразм!...

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


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