Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.01.2011, 20:22   #1
Siammi
Новичок
Джуниор
 
Регистрация: 31.01.2011
Сообщений: 1
По умолчанию Чтение файла в Delphi

Здравствуйте!

У меня есть файл. Вот на него ссылка: http://dl.dropbox.com/u/280706/bul_hip_art.spo

Информация к файлу: Данные представлены последовательно тремя отсчетами в формате long по трем каналам
(t - указатель чтения потока данных из файла):

red = bufstream[t]; //канал красного
fon = bufstream[t+1]; //канал фона
ired = bufstream[t+2]; //канал инфракрасного

Помогите, пожалуйста, прочитать данные из файла с помощью Delphi и создать по одному массиву чисел на каждый канал.

Заранее спасибо.
Siammi вне форума Ответить с цитированием
Старый 01.02.2011, 09:47   #2
Прик
Форумчанин
 
Регистрация: 08.09.2010
Сообщений: 880
По умолчанию

Код:
var
  arRed, arFon, arIRed : array of Longint;

procedure TForm1.Button1Click(Sender: TObject);
var
  F : File;
  Buf : array[0..2] of Longint;
  NRead : Integer;
begin
{$I-}
  AssignFile(F, ExtractFilePath(Application.Exename)+'bul_hip_art.spo');
  try
    Reset(F, 1);
{$I+}
    if IOResult <> 0 then Exit;

    repeat
      BlockRead(F, Buf, SizeOf(Buf), NRead);
      if NRead > 0 then begin
        SetLength(arRed, Length(arRed)+1);  arRed[High(arRed)] := Buf[0];
        SetLength(arFon, Length(arRed)+1);  arFon[High(arRed)] := Buf[1];
        SetLength(arIRed, Length(arRed)+1); arIRed[High(arRed)] := Buf[2];
      end;
    until NRead = 0;

  finally
    CloseFile(F);
  end;  
end;
Прик вне форума Ответить с цитированием
Старый 01.02.2011, 09:57   #3
mss
Заблокирован
 
Регистрация: 27.05.2010
Сообщений: 1,099
По умолчанию

Проще пареной репы:

Код:
type
  TMyData = packed record
     Red, Back, IR: Long;
  end;
  PMyArray = ^TMyArray;
  TMyArray = array[0..0] of TMyData;
var
  ms: TMemoryStream;
..
  ms := TMemoryStream.Create;
  ms.LoadFromFile('MyFile');
// обращение к i-му отсчету  
  for i := 0 to ms.Size div SizeOf(TMyData) - 1 do begin
    PMyArray(ms.Memory)[i].Red
    PMyArray(ms.Memory)[i].Back
    PMyArray(ms.Memory)[i].IR
 end;
mss вне форума Ответить с цитированием
Старый 01.02.2011, 10:35   #4
Прик
Форумчанин
 
Регистрация: 08.09.2010
Сообщений: 880
По умолчанию

Позвольте полюбопытствовать, что за конструкция такая
Код:
    PMyArray(ms.Memory)[i].Red;
которую компилятор не понимает?
Прик вне форума Ответить с цитированием
Старый 01.02.2011, 10:54   #5
mss
Заблокирован
 
Регистрация: 27.05.2010
Сообщений: 1,099
По умолчанию

> которую компилятор не понимает

Конструкция приведена для головы, а не для компилятора.
А компилятор, разумеется, ожидает обращения к полю конкретно для записи или для чтения.

Додуматься до

Код:
SomeValue := PMyArray(ms.Memory)[i].Red; // чтение поля
PMyArray(ms.Memory)[i].Red := SomeValue; // запись поля
это, конечно, очень сложно)
mss вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Чтение из файла(записи) [Delphi] kop Помощь студентам 6 30.01.2011 06:46
Чтение из файла Delphi VadEr Помощь студентам 2 25.10.2009 17:29
чтение файла Delphi world12_tk Помощь студентам 1 07.10.2009 08:16
Чтение данных из файла (Delphi 7) alxd Помощь студентам 15 14.08.2009 13:21