Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Чтение из файла побайтно.


Автор: DimassS 29.5.2006, 08:55
Доброго времени суток!!!! 

У меня вот какая проблема возникла, как мне прочитать из файла определённое колличество байт...

например есть строка:

Трансформаторы             123-1                 456.67                 ,01                     8956,587                    3565                и т.д.
Это String(16 байт)      str(6 байт)     Float(4 байта)    Float(4 байта)     Float(4 байта)        Integer(4 байта)

Как мне её прочитать из файла побайтно.
Читаю сначала строкой, потом побайтно разбираю:
readln(f,ss);
for i:=1 to MyCol.count do
MyCol[i]:={Как мне сказать чтобы он прочитал 16 байт из строки? и присвоил переменной массиву}
 smile  smile 

Помогите плз...
Заранее благодарю!! 

Автор: ShadeSt 29.5.2006, 09:06
Насколько я понял надо просто вырезать из строки 16 символов.
Код

Const
  MySizes : array[1..N] of Smallint = (16, 6, 4, ....);
....
  MyCol[i] := Copy (ss, 1, MySizes[i]);
  Delete(ss,1, MySizes[i])

Наверное, примерно так. А между данными разделитель какой нибудь есть? или они просто подряд идут? 

Автор: DimassS 29.5.2006, 09:10
Цитата

А между данными разделитель какой нибудь есть? или они просто подряд идут?

я сам еще не знаю как они представлены, заказчик каждый день меняет... 
а чтение из файла 1 символ значит 1 байт? или я не понял... 

Автор: Romikgy 29.5.2006, 09:16
BlockRead
Код

var

  FromF, ToF: file;
  NumRead, NumWritten: Integer;
  Buf: array[1..2048] of Char;
begin
  if OpenDialog1.Execute then     { Display Open dialog box }
  begin
    AssignFile(FromF, OpenDialog1.FileName);
    Reset(FromF, 1);    { Record size = 1 }
    if SaveDialog1.Execute then      { Display Save dialog box}
    begin
      AssignFile(ToF, SaveDialog1.FileName);    { Open output file }

      Rewrite(ToF, 1);    { Record size = 1 }
      Canvas.TextOut(10, 10, 'Copying ' + IntToStr(FileSize(FromF))
        + ' bytes...');
      repeat
        BlockRead(FromF, Buf, SizeOf(Buf), NumRead);
        BlockWrite(ToF, Buf, NumRead, NumWritten);
      until (NumRead = 0) or (NumWritten <> NumRead);
      CloseFile(FromF);
      CloseFile(ToF);
    end;
  end;
end;
 

Автор: ShadeSt 29.5.2006, 09:55
Цитата(DimassS @  29.5.2006,  09:10 Найти цитируемый пост)
а чтение из файла 1 символ значит 1 байт? или я не понял... 


Ну вообще для того кода, который приведен в первом посте, где чтение из файла идет по строкам, я привел пример как вытащить данные из строки, непонятно надо ли в данном случае читать файл побайтно, тем более что:
Цитата(DimassS @  29.5.2006,  08:55 Найти цитируемый пост)
Читаю сначала строкой, потом побайтно разбираю:

Если уже прочитана строка, то можно работать со строкой.
...
Говоря о кодировках: 1 символ представлен одним байтом, если не идет речь о Unicode, где для представления одного символа искользуется два байта.
 

Автор: DimassS 30.5.2006, 03:40
Круто BlokRead помог, и как я этот пример в справке не заметил... smile Romikgy Спасибо!!!! 

Автор: Romikgy 30.5.2006, 09:06
Цитата(DimassS @ 30.5.2006,  02:40)
Круто BlokRead помог, и как я этот пример в справке не заметил... smile Romikgy Спасибо!!!!

Пжалста smile 

Автор: BUGOR 30.5.2006, 17:52
Если, что можно было сделать с помощью апи:

CreateFile
SetFilePointer
ReadFile
CloseHandle

Написал в той последовательность в которой надо использовать. 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)