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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.09.2010, 14:24   #1
khrenkov
Новичок
Джуниор
 
Регистрация: 20.09.2010
Сообщений: 2
Вопрос Проблемы с записью/чтением типизированного файла

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

Необходимо, чтобы программа делала следующее (последовательно):
1. при нажатии кнопки ConversBtn обрабатывается выбранный файл *.CSV и его содержимое заносится в массив структур.
2. при нажатии кнопки SaveBtn файл, заполненный массивом структур записывается в файл *.SCDA.
3. при нажатии кнопки OpenBtn должен загружаться выбранный файл *.SCDA и в соответствии с его содержимым должны строиться графики.
Так же необходимо, чтобы п.3 выполнялся "самостоятельно", т.е. чтобы была возможность открыть сохраненный ранее файл *.SCDA.
Проблема:
При запуске приложения и выполнении п. 3 без п.1,2, т.е. при открытии ранее сохраненного файла *.SCDA загружается файл, значения полей структур в котором заполнены "плохими" значениями: нулями, очень маленькими значениями или Nan.
Примечание:
Если запустить приложение и выполнить п.1 и п.2, а в п.3 выбрать тот же файл, что был сохранен в п.2(предположим xxx.SCDA), то все строится и все функционирует.
Если же перезапустить приложение и выполняя п.3 выбрать файл xxx.SCDA, то загружаются некорректные данные.
Предположения:
Либо не правильно пишу в файл
Либо не правильно читаю файл

Кто чем может помочь?

Код:
 TDataRecord = class(TObject)
  private
    FChan1: Single;
    .............
    FChan7: Single;
    FDate: Double;
    FDateTime: Double;
    FTime: Double;
  public
    property Chan1: Single read FChan1 write FChan1;
    .........
    property Chan7: Single read FChan7 write FChan7;
    property Date: Double read FDate write FDate;
    property DateTime: Double read FDateTime write FDateTime;
    property Time: Double read FTime write FTime;
    { Public declarations }
  end;

  TDataField = array of TDataRecord;

var
  MainForm: TMainForm;
  DataField1: TDataField;
  Data: TDataField;

implementation

{$R *.dfm}

function TMainForm.ChangeSeparator(var StrTemp: string): string;
..............

function TMainForm.BRKCheck(var StrTemp: string): string;
...........



procedure TMainForm.ConversBtnClick(Sender: TObject);
var
  OD: TOpenDialog;
  Excel: Variant;
  I, J, DocSize: Longint;
  TempStr: string;
  StopFlag: Boolean;
const
  STRNUMBER: Longint = 20;
  ROWNUMBER: Longint = 9;
begin
  OD := TOpenDialog.Create(nil);
  try
    OD.Filter := 'Файлы CSV|*.CSV';
    OD.InitialDir := 'C:\Program Files\Borland\Delphi7\Projects\Stove';
    if OD.Execute then
    begin
      DataField1 := nil;
      DocSize := 1;
      StopFlag := true;
      Excel := CreateOleObject('Excel.Application');
      Excel.Workbooks.Open[OD.FileName];
      .............
      try
        for I := 1 to (DocSize div 10) do
        begin
          DataField1[I-1] := TDataRecord.Create;
          for J := 1 to ROWNUMBER do
          begin
            case J of
              1:
                begin
                  TempStr := Excel.Range['A' + IntToStr(I * 10)];
                  ChangeSeparator(TempStr);
                  DataField1[I-1].Date := StrToDate(TempStr);
                end;
              .....................
              9:
                begin
                  TempStr := Excel.Range['I' + IntToStr(I * 10)];
                 .................
                end;
            end;
          end;
        end;
      finally
        Excel.ActiveWorkbook.Close;
        Excel.Application.Quit;
        Excel := Unassigned;
      end;
    end;
  finally
    OD.Free;
  end;
end;

procedure TMainForm.SaveBtnClick(Sender: TObject);
var
  SD: TSaveDialog;
  FileName: string;
  FileForWrite: File of TDataRecord;
  I: Longint;
begin
  SD := TSaveDialog.Create(nil);
  try
    SD.Filter := 'Файлы SCDA|*.SCDA';
    SD.InitialDir := 'C:\Program Files\Borland\Delphi7\Projects\Stove';
    if SD.Execute then
    begin
      FileName := Concat(SD.FileName,'.SCDA'); 
      AssignFile(FileForWrite,FileName);
      Rewrite(FileForWrite);
      for I := 0 to Length(DataField1) - 1 do
        Write(FileForWrite,DataField1[I]);
      CloseFile(FileForWrite);
    end
  finally
    SD.Free;
  end;
end;

procedure TMainForm.OpenBtnClick(Sender: TObject);
var
  DataFile: TDataRecord;
  OD: TOpenDialog;
  FileName: string;
  FileForRead: File of TDataRecord;
  I: Longint;
  Size: Integer;
begin
  Data := nil;
  OD := TOpenDialog.Create(nil);
  try
    OD.Filter := 'Файлы SCDA|*.SCDA';
    OD.InitialDir := 'C:\Program Files\Borland\Delphi7\Projects\Stove';
    if OD.Execute then
    begin
      FileName := OD.FileName;
      AssignFile(FileForRead,FileName);
      Reset(FileForRead);
      Size := FileSize(FileForRead);
      SetLength(Data,Size);
      for I := 0 to Size - 1 do
      begin
        Data[I] := TDataRecord.Create;
        Read(FileForRead,Data[I]);
      end;
      CloseFile(FileForRead);
     // Edit1.Text := FileName;
    end
  finally
    OD.Free;
  end;
end;
end.
khrenkov вне форума Ответить с цитированием
Старый 20.09.2010, 15:09   #2
khrenkov
Новичок
Джуниор
 
Регистрация: 20.09.2010
Сообщений: 2
По умолчанию

Уже помогли разобраться
khrenkov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблемы с записью звука Master255 Мультимедиа в Delphi 6 18.06.2010 16:53
Проблемы с чтением данных в Delphi cyberandom Помощь студентам 11 05.02.2010 19:52
проблемы с записью дисков iamramirez Компьютерное железо 12 20.11.2009 07:18
Проблема с чтением типизированного файла. Вадим Буренков Общие вопросы Delphi 8 28.05.2009 13:31
Проблемы с записью в файл ROD Общие вопросы C/C++ 9 03.04.2009 12:32