Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.11.2009, 10:33   #1
Gerzs
Форумчанин
 
Аватар для Gerzs
 
Регистрация: 23.07.2009
Сообщений: 185
По умолчанию Поиск байт

Здравствуйте.
Подскажите, пожалуйста, как найти положение двух байта в файле, стоящих последовательно?
Gerzs вне форума Ответить с цитированием
Старый 06.11.2009, 11:06   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Чего найти?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 06.11.2009, 11:31   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Вы не поверите - читать содержимое файла и сравнивать побайтно, если первый байт совпал, сравнивать второй байт.
При этом учесть, что таких совпадений может быть несколько...

p.s. пример кода нужен?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 06.11.2009, 13:35   #4
Gerzs
Форумчанин
 
Аватар для Gerzs
 
Регистрация: 23.07.2009
Сообщений: 185
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
p.s. пример кода нужен?
Дайте, если не сложно.
Gerzs вне форума Ответить с цитированием
Старый 06.11.2009, 13:44   #5
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

1. TFileStream
2. читать кусок в буфер (буфер - обычный массив из байтов), потому что побайтно будет медленно
3. в этом массиве искать в цикле нужные тебе байты

Ищи темы на форуме, где TFileStream обсуждали. Или смотри в справке, там все есть.
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог
mutabor вне форума Ответить с цитированием
Старый 06.11.2009, 13:53   #6
Gerzs
Форумчанин
 
Аватар для Gerzs
 
Регистрация: 23.07.2009
Сообщений: 185
По умолчанию

mutabor, я в принципе так и делал, только файл весь пробовал читать в динамический массив, а ничего не читал(

Вот, может ошибка где-то?
Код:
var
  FS:TFileStream;
  b:array of byte;
  buf,i:integer;
begin
  FS:=TFileStream.Create('filename', fmOpenReadWrite);
  buf:=FS.Size;
  FS.Seek(buf, soFromBeginning);
  SetLength(b, buf);

  FS.Read(b, buf);
  for i:=1 to 200 do
  begin
    Form11.Memo1.Lines.Add(IntToStr(b[i]))
  end;
  FS.Free;
end;
В итоге в мемо одни нули.

Последний раз редактировалось Stilet; 06.11.2009 в 16:08.
Gerzs вне форума Ответить с цитированием
Старый 06.11.2009, 15:55   #7
s.Creator
Форумчанин
 
Регистрация: 28.09.2008
Сообщений: 344
По умолчанию

а если
Код:
FS.Seek(0, soFromBeginning);
s.Creator вне форума Ответить с цитированием
Старый 06.11.2009, 16:31   #8
Gerzs
Форумчанин
 
Аватар для Gerzs
 
Регистрация: 23.07.2009
Сообщений: 185
По умолчанию

Цитата:
Сообщение от s.Creator Посмотреть сообщение
а если
Код:
FS.Seek(0, soFromBeginning);
не помогло
и даже
Код:
FS.Seek(1, soFromBeginning);
Gerzs вне форума Ответить с цитированием
Старый 06.11.2009, 16:37   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А так:
Код:
var
  FS:TFileStream;
  ss:TStringStream;
  b:array of byte;
  buf,i:integer;
begin
  FS:=TFileStream.Create('C:\temp\q.txt ', fmOpenReadWrite);
  ss:=TStringStream.Create;
  ss.CopyFrom(fs,fs.Size);
  for i:=1 to ss.Size do
  begin
   Memo1.Lines.Add((ss.DataString[i]))
  end;
  FS.Free; ss.Free;
end;
P.S. не люблю борландовские стримы, корявые донельзя...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 06.11.2009, 17:28   #10
Gerzs
Форумчанин
 
Аватар для Gerzs
 
Регистрация: 23.07.2009
Сообщений: 185
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
А так:
Код:
var
  FS:TFileStream;
  ss:TStringStream;
  b:array of byte;
  buf,i:integer;
begin
  FS:=TFileStream.Create('C:\temp\q.txt ', fmOpenReadWrite);
  ss:=TStringStream.Create;
  ss.CopyFrom(fs,fs.Size);
  for i:=1 to ss.Size do
  begin
   Memo1.Lines.Add((ss.DataString[i]))
  end;
  FS.Free; ss.Free;
end;
P.S. не люблю борландовские стримы, корявые донельзя...
Нет, так тоже не работает.
А для чего копировать в StringStream?
Gerzs вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
hello world менее 42 байт romark Паскаль, Turbo Pascal, PascalABC.NET 9 28.12.2008 16:52
Hello world менее 42 байт romark Общие вопросы C/C++ 7 26.12.2008 17:09
1 байт 9 бит ?! Иллидан Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 4 13.04.2008 12:47
байт режима адресации fermat_c Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 10.04.2008 15:39
записать байт файл мандарин Общие вопросы Delphi 8 09.05.2007 20:45