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

Так добавь проверку на конец слова сам в коде
...
Рейтинг: 0 / 0
Поиск последовательности в бинарном массиве
    #39587962
Bellic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alekcvpВ данном коде нет объявлений переменных, поэтому там может быть всё что угодно.
Прилагаю Тестовый проект в котором возникает ошибка в метке "Err" на втором проходе внешнего цикла (i).
В реальном проекте помогало разремливание строчки
Код: pascal
1.
//RawString := '';

Тут эта строка тоже выдает ошибку.
... открывать файл "file.tst" в каталоге проекта.
...
Рейтинг: 0 / 0
Поиск последовательности в бинарном массиве
    #39587970
Няшик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bellic,

Во первых при диалоги открытии ты должен весь код засунуть в begin а не только извлечения имени файла.

Во вторых, у тебя два символа первых будут указывать на $00 = 0 что ровно #0 и твоя строка RawString дальше не выведется.

Пользуйся отладчиком. Ёмаё.
...
Рейтинг: 0 / 0
Поиск последовательности в бинарном массиве
    #39587979
Bellic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
НяшикВо первых при диалоги открытии ты должен весь код засунуть в begin а не только извлечения имени файла.
Няшик, Диалог - не суть вопроса, а просто подготовка!.. Это всеж Тестовый код, без проверок и прочего!
Если для тебя это сейчас важно - подправь у себя:
Код: pascal
1.
2.
3.
4.
if OpenDialog1.Execute then
          begin
               FullName := OpenDialog1.FileName;
          end;


Тогда уже и " Try--Finally--End " добавь себе для полноты счастья!..)))
...
я таки и смотрел все в отладчике! - Первый проход все нормально идет, как и запланировано!
Не придирайся к упрощению - запусти отладчик и посмотри сам лучше!
...
Рейтинг: 0 / 0
Поиск последовательности в бинарном массиве
    #39587980
Bellic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Няшик, там так и задумано - первый $00 = 0 и т.д.
И все попадает и в массив и в RawString...
...
Рейтинг: 0 / 0
Поиск последовательности в бинарном массиве
    #39587987
SOFT FOR YOU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: pascal
1.
RawString := RawByteString(BPoisk);


Нельзя таким образом приводить массив байт к строке
...
Рейтинг: 0 / 0
Поиск последовательности в бинарном массиве
    #39587993
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BellicПоиск последовательности в бинарном массиве
"Бинарный массив" - это что?
...
Рейтинг: 0 / 0
Поиск последовательности в бинарном массиве
    #39587995
Bellic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SOFT FOR YOU
Код: pascal
1.
RawString := RawByteString(BPoisk);

Нельзя таким образом приводить массив байт к строкеТогда как?
...
Рейтинг: 0 / 0
Поиск последовательности в бинарном массиве
    #39587997
Bellic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
чччД"Бинарный массив" - это что?
Вообще то подразумевалось - BFile: TBytes;

Но по совету Бывалых - уже давно на RawByteString перешли!..))
...
Рейтинг: 0 / 0
Поиск последовательности в бинарном массиве
    #39588000
Bellic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SOFT FOR YOUНельзя таким образом приводить массив байт к строкеВообще - преобразование через Массив можно и исключить - он остался от реализации на TByte...
И даже BFile: TBytes; - файл сразу прочитать в RawByteString... но смысл преобразования должен остаться!
Видно мне еще мозгов не хватает, чтоб это преобразование (даже и не знаю как его назвать) сделать оптимально правильным..))
...
Рейтинг: 0 / 0
Поиск последовательности в бинарном массиве
    #39588001
Няшик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bellic,


А теперь, открой диалог, и закрой его - словишь ошибку, отсутствия файла. Когда ты ничего не выбрал, но ты пытаешься открыть файл, читая переменную которая забита мусором.


....

Ты в отладчике глянь что там за первый символ, не 0. А #0 конец строки! В начале строки.

Вот так ошибок не будет
Код: 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.
procedure TForm1.Test(Sender: TObject);
var
  FFile: TFileStream;
  FullName: string;
  i, m, Dlina, Addr: Integer;
  BPoisk: array of Byte; // Динамический массив
  RawString: RawByteString;
  SPSimvol: ansistring;
  PSimvol: Byte;
  BFile: TBytes;
label Err;
begin
  if OpenDialog1.Execute then
  begin
    FullName := OpenDialog1.FileName;
    FFile := TFileStream.Create(FullName, fmOpenRead);
    SetLength(BFile, FFile.Size);
    FFile.ReadBuffer(BFile, FFile.Size);
    FFile.Free;
    SetLength(SPSimvol, 2);
    Addr := 0;
    Dlina := 6;
    for i := 1 to 2 do
    begin
      Memo1.Lines.Add('Prohod-' + IntToStr(i));
      SetLength(BPoisk, Dlina); // Инициируем длину массива

      for m := 0 to Dlina - 1 do // Заполняем массив
      begin
        SPSimvol[1] := AnsiChar(BFile[Addr + m * 2]);
        SPSimvol[2] := AnsiChar(BFile[Addr + m * 2 + 1]);

        PSimvol := StrToInt('$' + SPSimvol);
        BPoisk[m] := PSimvol;
      end;
    Err:
      RawString := RawByteString(BPoisk);
      PInteger(PByte(RawString) - 8)^ := 0;
      Memo1.Lines.Add('Ok');
    end;
  end;
end;

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

Няшик
Код: pascal
1.
2.
if not OpenDialog1.Execute then
  Exit;


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

Можно конечно же и так. Хотя в коде, разницы не будет
...
Рейтинг: 0 / 0
Поиск последовательности в бинарном массиве
    #39588005
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BellicВообще - преобразование через Массив можно и исключить - он остался от реализации на TByte...
И даже BFile: TBytes; - файл сразу прочитать в RawByteString... но смысл преобразования должен остаться!Не нужны никакие "преобразования", ни разу.
Сразу прочитать надо весь файл в один кусок памяти (TBytes, PByte, PAnsiChar, RawByteString - не важно) и дальше бегать по нему.
...
Рейтинг: 0 / 0
Поиск последовательности в бинарном массиве
    #39588006
Няшик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Точнее в ассемблер, коде
...
Рейтинг: 0 / 0
Поиск последовательности в бинарном массиве
    #39588089
SOFT FOR YOU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BellicSOFT FOR YOU
Код: pascal
1.
RawString := RawByteString(BPoisk);

Нельзя таким образом приводить массив байт к строкеТогда как?
Мне лень объяснять
Сразу читай в строку
...
Рейтинг: 0 / 0
Поиск последовательности в бинарном массиве
    #39588196
Bellic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SOFT FOR YOUМне лень объяснять
Сразу читай в строку
Дык напиши тогда хоть строку кода - о чем думаешь, без объяснений!
...
Рейтинг: 0 / 0
Поиск последовательности в бинарном массиве
    #39588197
Няшик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Его код бред, он собирает по два символа

Код: pascal
1.
2.
        SPSimvol[1] := AnsiChar(BFile[Addr + m * 2]);
        SPSimvol[2] := AnsiChar(BFile[Addr + m * 2 + 1]);



Далее, он пытается перевести в Hex
Код: pascal
1.
 PSimvol := StrToInt('$' + SPSimvol);


Когда $00 = 0 и будет #0 (Конец строки) А что должно быть ?

Притом, хоть он и берёт по два символа. Но он использует стандартный for
Код: pascal
1.
for m := 0 to Dlina - 1 do 


Что значит, что m будет + 1 и если мы вернёмся к заполнению SPSimvol то мы опять же пишем пред последний символ записанный, + 1 новый.

Вместо выделения каких - то байт, мог бы выделить RawString и в неё писать по индексу.

..........

Этот код никогда не в какой мере, не должен был работать.
...
Рейтинг: 0 / 0
Поиск последовательности в бинарном массиве
    #39588210
Bellic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
НяшикЭтот код никогда не в какой мере, не должен был работать.
Ну не знаю..
Предложи конкретный вариант кода...

А изначально, когда я еще пытался воспроизвести это на FileStream , там было сразу чтение 2-х байт:
Код: pascal
1.
2.
FPerevod.Seek(Addr + m*2, soFromBeginning);
FPerevod.ReadBuffer(SPSimvol[1],2);


Ну и после верхний код как то сам навеял это:
Код: pascal
1.
2.
PSimvol := StrToInt('$' + SPSimvol);
BPoisk[m] := PSimvol;


А твой вариант:
Код: pascal
1.
2.
Err:      RawString := RawByteString(BPoisk); // Ошибка на 2-м проходе
          PInteger(PByte(RawString) - 8)^ := 0;

и правда помог, но логичнее было бы вторую строку поставить до начала цикла m , потому что ниже с RawString -гом мне еще предстоит поработать!
Но перенеся " PInteger(PByte(RawString) - 8)^ := 0; " выше цикла - получаем Ошибку!
...
Рейтинг: 0 / 0
Поиск последовательности в бинарном массиве
    #39588218
SOFT FOR YOU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bellic,

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

Ты опять несёшь опять бред.

1) Если ты используешь чтение 2 байт, то и получишь что было
2) Твой Hex перевод, в связке с FileStream даст тоже самое, что у тебя уже есть
3) Читай внимательнее

НяшикВместо выделения каких - то байт, мог бы выделить RawString и в неё писать по индексу.


4) Присвоения ссылок обязательна после, потому что ты присвоил массив байт. В котором ничего нету о количесте ссылок, и переменная RawString не на что не указывает, и у неё нет никакого счётчика = муссор = ERROR
...
Рейтинг: 0 / 0
Поиск последовательности в бинарном массиве
    #39588227
Bellic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
НяшикКогда $00 = 0 и будет #0 (Конец строки) А что должно быть ?
Няшик , а ты вижу - сам то брезгуешь глянуть что происходит с переменными в отладчике!?
А еще загляни что внутри файла "file.txt"!
А там записано "003132333435" и далее куча нулевых байт..
В Hexсе файл выглядит вот так:
Код: pascal
1.
30 30 33 31 33 32 33 33 33 34 35 00 00 00 .......

И задача - прочитать по 2 байта и получить:
00 (тут чисто Ноль), 31h-символ "1", 32h-"2", 33h-"3", ...
...
Рейтинг: 0 / 0
Поиск последовательности в бинарном массиве
    #39588238
Bellic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Возможно и бред.. но все работает!
Через 15 минут я останусь без света и компа, а вы все общими фразами кидаетесь, да оскорблениями!
Просили тестовый код - вот он есть! По моему суть перекодировки прозрачна!?
Ну может по вашему - не правильная! Возможно!
Ни на чего не притендую, но мне было бы проще понят - увидев конкретный вариант замены "моих ошибочных" строк, на
"ваши правильные"!
А выражения типа "присваивай сразу в строку" - понятие растяжимое!
Теперь я попрошу - приведите конкретный свой код, а не пустые слова!
Справедливо?
...
Рейтинг: 0 / 0
Поиск последовательности в бинарном массиве
    #39588247
Няшик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тебя никто не оскорблял, и тебе уже всем помогли. Не строй из себя бедного, лишь потому что до сих пор понять ничего не можешь
...
Рейтинг: 0 / 0
Поиск последовательности в бинарном массиве
    #39588269
Bellic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Няшик, там ноль и должен быть!!!!
Разве нельзя его в RawByteString записать?
Это вообще то подготовка к Поиску и Замене, которую мы уже реализовали по вашему предложению на РавБайтСтрингах и Пос!
Кстати - нули в реале будут и в конце фраз Поиска и Замены!
Это как то противоречит идеалогии RAW?
...
Сижу без света...((( На мобиле..((
...
Рейтинг: 0 / 0
25 сообщений из 270, страница 7 из 11
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Поиск последовательности в бинарном массиве
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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