Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.04.11;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.45 MB
Время: 0.047 c
1-1079963769
Layner
2004-03-22 16:56
2004.04.11
Как после инсталяции сервиса, сразу же запустить его?


1-1082201734
тракторист
2004-04-17 15:35
2004.04.11
Помогите с FastReport


4-1075757030
Gogi
2004-02-03 00:23
2004.04.11
Список окон и всплывающие подсказки (hint)


3-1078988276
_sulent
2004-03-11 09:57
2004.04.11
Проблема со smallDateTime


1-1082471791
UnDISCOvery
2004-04-20 18:36
2004.04.11
ActionToolBar. Проблемы с отрисовкой. Как бороть ???





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский