Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 24.11.2012, 11:53
Аватар для Edinora
Edinora Edinora вне форума
Прохожий
 
Регистрация: 12.11.2012
Сообщения: 22
Репутация: 10
По умолчанию чтение изапись динамического двумерного масива в типизированній файл, в чем ошибка?

Есть динамический двухмерный массив, его надо записать и счтитать с типизированного файла.
Запись:
Код:
procedure Save2DArray(FileName:String);
 var
  F:file of String[6];
  I,J,num:Integer;
begin
   Assignfile(F,FileName);  
   Rewrite(F);       
   Seek(F,0); 

   for I := 0 to High(TAr) do
       begin
          for J := 0 to High(TAr) do
              begin
                Write(F,TbArray[i, j]); 
              end;
        end;
  CloseFile(F);
end;
И чтение:
Код:
procedure Load2DArray(FileName:String);
var
  F:File of String[6];
  I,J:Integer;
begin
  Assignfile(F,FileName);
  Rewrite(F);  
               
  Seek(F,0);

  for I := 0 to High(TAr) do
  begin
    for J := 0 to  High(TAr) do
      begin
         Read(F, TbArray[i,j]); // Здесь не компилируется - пишет несовместимость типов. Хотя TbArray[i,j]:String[6]; тоже.
       end;
  end;
  CloseFile(F);
 end;
Подскажите в чем проблема?
__________________
По переживать и по сокрушаться - я всегда успею.
Так что, дайте мне порадоваться в свое удовольствие!
Ответить с цитированием
  #2  
Старый 24.11.2012, 11:56
Аватар для PhoeniX
PhoeniX PhoeniX вне форума
Always hardcore!
 
Регистрация: 04.03.2009
Адрес: СПб
Сообщения: 3,239
Версия Delphi: GCC/FPC/FASM
Репутация: 62149
По умолчанию

TbArray что из себя представляет?
__________________
Оставайтесь хорошими людьми...
VK id2634397, ds [at] phoenix [dot] dj
Ответить с цитированием
  #3  
Старый 26.11.2012, 13:07
Аватар для Edinora
Edinora Edinora вне форума
Прохожий
 
Регистрация: 12.11.2012
Сообщения: 22
Репутация: 10
По умолчанию

Код:
TbArray:array of array of string[6];
__________________
По переживать и по сокрушаться - я всегда успею.
Так что, дайте мне порадоваться в свое удовольствие!
Ответить с цитированием
  #4  
Старый 26.11.2012, 13:18
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

TbArray это TAr? Тогда в процедурах Write(F,TAr[i, j]) и Read(F, TAr[i,j]) наверное надо обозвать.
Ответить с цитированием
  #5  
Старый 26.11.2012, 13:30
Аватар для Edinora
Edinora Edinora вне форума
Прохожий
 
Регистрация: 12.11.2012
Сообщения: 22
Репутация: 10
По умолчанию

обявление в форм1:
Код:
type
  TKom = record
    FEmblem: string[50];
    FTeam: string[30];   
  end;

  TKomFile = file of TKom;

type
  TForm1 = class(TForm) 
    procedure FormCreate(Sender: TObject);
    procedure btn3Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    TAr:array of TKom;
    TbArray:array of array of string[6];   
  end;

В другой форме создается табличка (длина(TAr)+1(фиксированные строки), длина(TAr)+1(фиксированные столбцы)). Данные с нее должны записываться в типизированный файл. И при необходимости считываться.
Делаю отдельный юнит для процедур. Прописала считывание- запись, но не работает.
__________________
По переживать и по сокрушаться - я всегда успею.
Так что, дайте мне порадоваться в свое удовольствие!
Ответить с цитированием
  #6  
Старый 26.11.2012, 13:32
Аватар для Edinora
Edinora Edinora вне форума
Прохожий
 
Регистрация: 12.11.2012
Сообщения: 22
Репутация: 10
По умолчанию

Я в прошлом коде не прописала Form1.TAr и Form1.TbArray, что бы не путать.
__________________
По переживать и по сокрушаться - я всегда успею.
Так что, дайте мне порадоваться в свое удовольствие!
Ответить с цитированием
  #7  
Старый 26.11.2012, 13:33
Pyro Pyro вне форума
Так проходящий
 
Регистрация: 18.07.2011
Сообщения: 805
Версия Delphi: 7Lite
Репутация: 6063
По умолчанию

Цитата:
Сообщение от Edinora
Подскажите в чем проблема?
кроме этой неясной мне проблемы, есть ещё такие:
перед чтением(load) файл первым делом полностью очищается, размер массива в save не записывается, в load не читается и не устанавливается
__________________
>woweook<
Ответить с цитированием
  #8  
Старый 26.11.2012, 13:36
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

А что если в var объявить просто F:File of String;, хуже не будет (строки в массиве и так уже ограничены)

З.Ы. Угу, пропустил ключевую фразу "Типизированный файл" мимо ушей, и только дошло, что String в "чистом виде" в них использовать нельзя, каюсь.

Последний раз редактировалось Alegun, 26.11.2012 в 14:45.
Ответить с цитированием
  #9  
Старый 26.11.2012, 13:43
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Цитата:
Сообщение от Pyro
...файл первым делом полностью очищается...
Правильно, вместо Rewrite(F); нужно использовать обнуление Reset(f);
Ответить с цитированием
Этот пользователь сказал Спасибо Alegun за это полезное сообщение:
Edinora (26.11.2012)
  #10  
Старый 26.11.2012, 15:30
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Извините за назойливость, а вот так работать случайно не будет?
Код:
procedure Save2DArray(FileName: String);
 var
  F: file of String[6];
  tmp: string[6];
  I, J, num: Integer;
begin
   Assignfile(F, FileName);
   Rewrite(F);
   Seek(F, 0);

   for I := 0 to High(TAr) do
    for J := 0 to High(TAr) do
       begin
        tmp:= TbArray[i, j];
        Write(F, tmp);
       end;
  CloseFile(F);
end;

procedure Load2DArray(FileName:String);
var
  F: File of String[6];
  tmp: string[6];
  I, J: Integer;
begin
  if FileExists(FileName) then
  begin
  Assignfile(F, FileName);
  Reset(F);
  for I:= 0 to High(TAr) do
   for J:= 0 to High(TAr) do
    begin
     Read(F, tmp);
     TbArray[i, j]:= tmp;
    end;
  CloseFile(F);
  end;
 end;
Проверить сам не могу - нет над чем издеваться :-).
Ответить с цитированием
Этот пользователь сказал Спасибо Alegun за это полезное сообщение:
Edinora (26.11.2012)
  #11  
Старый 26.11.2012, 15:57
Pyro Pyro вне форума
Так проходящий
 
Регистрация: 18.07.2011
Сообщения: 805
Версия Delphi: 7Lite
Репутация: 6063
По умолчанию

тоже нечем проверить, без дельфи видно что дин.массив не сохраняет размерности
Цитата:
Код:
   for I := 0 to High(TAr) do
    for J := 0 to High(TAr) do
а это значит, что массив квадратный
__________________
>woweook<
Ответить с цитированием
  #12  
Старый 26.11.2012, 16:32
Аватар для YVitaliy
YVitaliy YVitaliy вне форума
Местный
 
Регистрация: 14.12.2011
Сообщения: 481
Версия Delphi: Borland Delphi7
Репутация: 17
По умолчанию

Ну, вообще-то для типизированного файла нужно создавать отдельный тип, а не записывать "строку, ограниченную по длине". Тоесть, там где, например, описано
Цитата:
Код:
type
  TKom = record
    FEmblem: string[50];
    FTeam: string[30];   
  end;
 
  TKomFile = file of TKom;
Все сделано верно, то нужно и для
Код:
string[6]
описать свой отдельный тип:
Код:
TString6=string[6];
и тогда будет
Код:
TbArray:array of array of TString6; 
и тд.
Ответить с цитированием
Этот пользователь сказал Спасибо YVitaliy за это полезное сообщение:
Edinora (26.11.2012)
  #13  
Старый 26.11.2012, 18:40
Аватар для Edinora
Edinora Edinora вне форума
Прохожий
 
Регистрация: 12.11.2012
Сообщения: 22
Репутация: 10
По умолчанию

Цитата:
Сообщение от Alegun
Извините за назойливость, а вот так работать случайно не будет?
Не-а, так не работает.
Цитата:
Сообщение от Pyro
а это значит, что массив квадратный
Да. Массив квадратный. А количество столбцов и строк == размерности массива TAr.
Цитата:
Сообщение от YVitaliy
Ну, вообще-то для типизированного файла нужно создавать отдельный тип, а не записывать "строку, ограниченную по длине".
Спасибо, помогло=) Ошибка несовместимости типов пропала.
__________________
По переживать и по сокрушаться - я всегда успею.
Так что, дайте мне порадоваться в свое удовольствие!
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 17:20.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025