Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.032 c
3-1081437543
jenbond
2004-04-08 19:19
2004.04.11
Присвоить полю значение NULL


1-1082707151
Oleg)
2004-04-23 11:59
2004.04.11
Как определить шрифт при копировании через буфер обмена?


6-1075817986
able
2004-02-03 17:19
2004.04.11
UDP vs Sockets


1-1082456952
Ruslan
2004-04-20 14:29
2004.04.11
Как узнать по какой строке щелкнул пользователь в ListView?


3-1082027419
Vitaly
2004-04-15 15:10
2004.04.11
Ребята, не могу найти d5adoupdate2.exe




   Наверх