Главная страница
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.043 c
1-1138624499
tytus
2006-01-30 15:34
2006.03.05
Как копировать данные с последующей обработкой?


2-1140275296
VAZMan
2006-02-18 18:08
2006.03.05
Регистрация пользователя


2-1140251499
Vandet
2006-02-18 11:31
2006.03.05
Здравствуйте помогите пожалуйста


3-1136392871
Нютик
2006-01-04 19:41
2006.03.05
Как сложить строки с одинаковым кодом?


3-1136907278
alsov
2006-01-10 18:34
2006.03.05
XML с удаленного сервера как результат селекта