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

Вниз

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

 
Anton   (2004-03-23 13:49) [0]

Подскажите , пожалуйста!!!
У меня есть нетипизированный(бинарный) файл. В каждых 2 байтах находится число. Мне необходимо извлечь из него все числа. Очень нужен точный код, а особенно как правильно написать процедурки Reset и BlockRead. И еще вопрос , можно ли и как именно полученные данные привести к восьмеричному формату. Второй вопрос не так важен. мой код такой :
var
 a: Word;
 f: File;
begin
 AssignFile(f, "...");
 Reset(f, 2);
 while not EOF(f) do
   BlockRead(f, a, SizeOf(a));
 CloseFile(f);
end;
 При таком коде мне выдаются неправильные данные.  

Спасибо за любую помощь.


 
Johnmen ©   (2004-03-23 13:53) [1]

Reset(f, 1);


 
Romkin ©   (2004-03-23 13:56) [2]

А почему его нельзя просто объявить как file of word? Из чего следует, что он нетипизированный?


 
Zacho ©   (2004-03-23 13:57) [3]

А что такое "восьмеричный формат" ??? Или имеется в виду отображение чисел в восьмеричной системе счисления ?


 
Anatoly Podgoretsky ©   (2004-03-23 14:02) [4]

В данном случае ты затираешь память, поскольку запрашиваешь 4 байта, а переменная только 2. Правильнее будет


Reset(f, SizeOf(a));
while not EOF(f) do
  BlockRead(f, a, 1);


 
Digitman ©   (2004-03-23 14:34) [5]

писал навскидку, проверь

var
 srcfs, dstfs: TFilestream;
 i, WordNum: Integer;
 NextWord: Word;
 OctStr: String;
...

procedure WordToOct(AWord: Word; Buffer: PChar);
var
 i: Integer;
 b: Byte;
begin
 for i:= 5 downto 0 do
   begin
     Buffer[i] := Char(AWord and 7 + Ord("0"));
     AWord := AWord shr 3;      
   end;
end;

...
SetLength(OctStr, 8);
OctStr[7] := #10;
OctStr[8] := #13;

srcfs := TFilestream.Create("myfile.bin", fmOpenRead);
dstfs := TFilestream.Create("myfile.oct", fmCreate);
try
 WordNum := fs.Size shr 1;
 for i:= 1 to WordNum do
  begin
    NextWord := srcfs.ReadBuffer(NextWord, SizeOf(NextWord));
    WordToOct(NextWord, @OctStr[1]);
    dstfs.WriteBuffer(OctStr[1], 8);
  end;  
finally
 srcfs.Free;
 dstfs.Free;
end;



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

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

Наверх




Память: 0.48 MB
Время: 0.032 c
11-1068772474
Ciber SLasH
2003-11-14 04:14
2004.04.11
Почему в KOL форма сворачивается начиная с левого угла


14-1079286422
Kamerad
2004-03-14 20:47
2004.04.11
HELP!


7-1079803900
$tranger
2004-03-20 20:31
2004.04.11
Инфо из БИОСа


1-1082452915
Max003
2004-04-20 13:21
2004.04.11
Перевести CHAR в STRING


1-1080123899
Layner
2004-03-24 13:24
2004.04.11
Мастера, требуется совет! Когда WinAmp сворачиваешь в полоску