Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > [Delphi]Чтение файла,поиск нужных символов и заме.


Автор: shoker 23.7.2012, 23:24
добрый день:),в delphi я новичок,вот столкнулся с такой проблемой:
нужно загрузить файл в память (filestream если я правильно понял)вот,найти в нем символы ffff0000,и заменить их на символы ffff1111 из едит,но,файл имеет расширение *.class,он не текстовый,в этом собственно и проблема:)


заранее спасибо за ответ:)

Автор: bems 26.7.2012, 02:38
TFileStream это не загрузка целиком в память. Целиком в память это TMemoryStream.
Для твоих целей может подойти TStringStream. Грузишь в него методом LoadFromFile и потом ищешь в строке DataString нужную последовательность символов. Если конечно в нетекстовом файле нужные данные лежат именно в текстовом виде.
Может быть нужно найти именно шестнадцатеричное значение, а не его текстовое представление?

Автор: shoker 26.7.2012, 13:45
Цитата(bems @ 26.7.2012,  02:38)
TFileStream это не загрузка целиком в память. Целиком в память это TMemoryStream.
Для твоих целей может подойти TStringStream. Грузишь в него методом LoadFromFile и потом ищешь в строке DataString нужную последовательность символов. Если конечно в нетекстовом файле нужные данные лежат именно в текстовом виде.
Может быть нужно найти именно шестнадцатеричное значение, а не его текстовое представление?

да,скорре ты всего прав.....нужно шестнадцатеричное значение найти

Автор: bems 26.7.2012, 18:22
Код

procedure TForm10.FormClick(Sender: TObject);
const
  FileName = '......';
var
  Ms: TMemoryStream;
  pDw: PDWORD;
  Found: Boolean;
begin
  Found := False;

  Ms := TMemoryStream.Create;
  try
    Ms.LoadFromFile(FileName);

    pDw := Ms.Memory;
    while ULONG_PTR(pDw) + SizeOf(pDw^) <= ULONG_PTR(Ms.Memory) + Ms.Size do
      if pDw^ = $FFFF0000
         then begin
              Found := True;
              pDw^ := $FFFF1111;
              Inc(pDw)
              end
         else Inc(PByte(pDw))

    if Found then Ms.SaveToFile(FileName);
  finally
    FreeAndNil(Ms)
  end;
end;

Автор: shoker 27.7.2012, 18:15
Цитата(bems @ 26.7.2012,  18:22)
Код

procedure TForm10.FormClick(Sender: TObject);
const
  FileName = '......';
var
  Ms: TMemoryStream;
  pDw: PDWORD;
  Found: Boolean;
begin
  Found := False;

  Ms := TMemoryStream.Create;
  try
    Ms.LoadFromFile(FileName);

    pDw := Ms.Memory;
    while ULONG_PTR(pDw) + SizeOf(pDw^) <= ULONG_PTR(Ms.Memory) + Ms.Size do
      if pDw^ = $FFFF0000
         then begin
              Found := True;
              pDw^ := $FFFF1111;
              Inc(pDw)
              end
         else Inc(PByte(pDw))

    if Found then Ms.SaveToFile(FileName);
  finally
    FreeAndNil(Ms)
  end;
end;

спасибо,попробую компилировать

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)