![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
|
|
#1
|
||||
|
||||
|
Есть динамический двухмерный массив, его надо записать и счтитать с типизированного файла.
Запись: Код:
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
|
||||
|
||||
|
TbArray что из себя представляет?
|
|
#3
|
||||
|
||||
|
Код:
TbArray:array of array of string[6]; |
|
#4
|
||||
|
||||
|
TbArray это TAr? Тогда в процедурах Write(F,TAr[i, j]) и Read(F, TAr[i,j]) наверное надо обозвать.
|
|
#5
|
||||
|
||||
|
обявление в форм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
|
||||
|
||||
|
Я в прошлом коде не прописала Form1.TAr и Form1.TbArray, что бы не путать.
|
|
#7
|
||||
|
||||
|
А что если в var объявить просто F:File of String;, хуже не будет (строки в массиве и так уже ограничены)
З.Ы. Угу, пропустил ключевую фразу "Типизированный файл" мимо ушей, и только дошло, что String в "чистом виде" в них использовать нельзя, каюсь. Последний раз редактировалось Alegun, 26.11.2012 в 14:45. |
|
#8
|
|||
|
|||
|
Цитата:
перед чтением(load) файл первым делом полностью очищается, размер массива в save не записывается, в load не читается и не устанавливается |
|
#9
|
||||
|
||||
|
Цитата:
|
| Этот пользователь сказал Спасибо Alegun за это полезное сообщение: | ||
Edinora (26.11.2012)
| ||
|
#10
|
||||
|
||||
|
Извините за назойливость, а вот так работать случайно не будет?
Код:
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
|
|||
|
|||
|
тоже нечем проверить, без дельфи видно что дин.массив не сохраняет размерности
Цитата:
|
|
#12
|
||||
|
||||
|
Ну, вообще-то для типизированного файла нужно создавать отдельный тип, а не записывать "строку, ограниченную по длине". Тоесть, там где, например, описано
Цитата:
Код:
string[6] Код:
TString6=string[6]; Код:
TbArray:array of array of TString6; |
| Этот пользователь сказал Спасибо YVitaliy за это полезное сообщение: | ||
Edinora (26.11.2012)
| ||