Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.03.05;
Скачать: CL | DM;

Вниз

Чтение строки из файла   Найти похожие ветки 

 
ma5ter ©   (2006-01-29 15:22) [0]

Что-то не получается прочитать из бинарника строку по определенному адресу. Кажется я что-то делаю не так ...

type
mTYPE=(mCHAR, mINT, mINT2, mDOUBLE, mFLOAT, mTEXT);

MyConponent=class(TComponent)
private
 FImaFile:TMemoryStream;
 FFile_Size:integer;
 Manufacturer:string;
 Function MyComponent.bin2text (input_type:mTYPE; counter:byte; adress:cardinal):string;
published
  procedure LoadFromStream(Stream:TStream);
end;

procedure Register;

implementation

constructor MyComponent.Create(aowner:Tcomponent);
begin
inherited create(Aowner);
FImaFile:=TMemoryStream.Create;
end;

destructor MyComponent.Destroy;
begin
FImaFile.Free;
end;

Function MyComponent.bin2text (input_type:mTYPE; counter:byte; adress:cardinal):string;
var s:string;
begin
  case input_type of
  SUN_CHAR:
     begin
     GetMem(pS,255);
     adr:=Cardinal(pS);
     FImaFile.Position:=adress;
     FImaFile.Read(pS^,counter);
     s:=pS^;//вот здесь ошибка Access violation at address ...
     freemem(pS);
  end;
result:=s;
end;

Procedure MyComponent.LoadFromStream(Stream:TStream);
begin
FImaFile.LoadFromStream(stream);
FImaFile.Position:=0;
FFile_Size:=FImaFile.Size;
Manufacturer:=bin2text(mCHAR, 9, $60);
end;


 
Eraser ©   (2006-01-29 15:34) [1]


> ma5ter ©   (29.01.06 15:22)

А TFileStream не пробовал использовать?


 
ma5ter ©   (2006-01-29 15:35) [2]

а какая разница то?


 
Fay ©   (2006-01-29 15:36) [3]

Где тут строки?
Где здесь файлы?
Что это за фигня (уверен, это даже не компилируется) вАщЕ?

P.S.
SetString тебе в помощь


 
ma5ter ©   (2006-01-29 15:40) [4]

Тут другой случай. Я через TFileStream открываю файл и передаю в потоке в стандартную процедуру. Но не в этом дело однозначано. Если добавить:

     for i:=0 to counter-1 do
      begin
       pC:=ptr(adr+cardinal(i));
       s:=s+pC^;
      end;

вместо s:=pS^;//вот здесь ошибка Access violation at address ... все работает. Почему не работает первый вариант?


 
ma5ter ©   (2006-01-29 15:44) [5]

2Fay: Это не должно компилироваться, т.к. это пример кода. Кучи кода не относящейся к делу не представлено. А проблемка в предпоследней строке Manufacturer:=bin2text(mCHAR, 9, $60);, где идет чтение строки 9 символов (mCHAR) из файла находящемся в TMemoryStream по адресу $60.


 
ma5ter ©   (2006-01-29 15:46) [6]

да pC это ^char


 
ma5ter ©   (2006-01-29 15:48) [7]

pS:^string


 
Eraser ©   (2006-01-29 15:49) [8]


> ma5ter ©   (29.01.06 15:44) [5]

Сначала давай реальный код - потом будут советы, то что ты тут выложил -  не код, а набор символов, в котором абсолютно нет желания разбираться.

> pS:^string

ужос.


 
Fay ©   (2006-01-29 16:12) [9]

s:= pS^ будет ползти до первого #0, и не факт, что он найдется в пределах выделенной памяти.

> pS : ^String
Действительно, ужос (с) Eraser



Страницы: 1 вся ветка

Текущий архив: 2006.03.05;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.054 c
2-1140026301
Корешь
2006-02-15 20:58
2006.03.05
Массив из записей как с ним работать?


15-1139495181
BFG9k
2006-02-09 17:26
2006.03.05
Проблемы с удаленной отладкой


3-1136463543
Нютик
2006-01-05 15:19
2006.03.05
Дроби в Аксесе!!!!


3-1136875938
Kim
2006-01-10 09:52
2006.03.05
Сравнение таблиц


2-1140011423
Ice
2006-02-15 16:50
2006.03.05
Виртуальный TCanvas и его фоновый цвет...