|
Вопрос # 4 739/ вопрос открыт / |
|
Приветствую, уважаемые эксперты!
подскажите пожалуйста, как сохранить массив(массивы) в файл.
 |
Вопрос задал: Ham_ele_on (статус: Посетитель)
Вопрос отправлен: 16 ноября 2010, 21:14
Состояние вопроса: открыт, ответов: 1.
|
Ответ #1. Отвечает эксперт: min@y™
Ну, как один из вариантов:
var
Ar: array[0..3,0..4,0..3] of integer;
fs: TFileStream;
begin
// <--- здесь какая-либо инициализация массива
fs:= TFileStream.Create(Путь_и_Имя_файла.Расширение, fmOpenWrite or fmShareExclusive);
try
fs.Write(Ar, SizeOf(Ar));
finally
fs.Free();
end;
end;
 |
Ответ отправил: min@y™ (статус: Доктор наук)
Время отправки: 17 ноября 2010, 13:31
Оценка за ответ: 5
|
Мини-форум вопроса
Всего сообщений: 17; последнее сообщение — 29 ноября 2010, 08:49; участников в обсуждении: 3.
16 ноября 2010, 21:28: Вопрос перемещён из тематического раздела Delphi » Общие вопросы по программированию в раздел Delphi » Работа с файловой системой модератором Ерёмин А.А.
|
Жикльор (статус: 5-ый класс), 16 ноября 2010, 21:44 [#1]:
Самый простой способ:
var
f: TextFile;
i: integer;
mas: array [1..10] of integer;
begin
AssignFile(f,'file.txt');
Rewrite(f);
for i:=1 to 10 do
begin
mas[i]:=Random(20);
Write(f,mas[i]);
end;
CloseFile(f);
end;
Если бы строители строили дома так, как программисты пишут программы, то первый же дятел уничтожил бы цивилизацию.
|
|
Ham_ele_on (статус: Посетитель), 17 ноября 2010, 07:23 [#2]:
извините, забыл сказать, массив числовой и многомерный.
|
|
min@y™ (статус: Доктор наук), 17 ноября 2010, 08:19 [#3]:
Цитата (Ham_ele_on):
извините, забыл сказать, массив числовой и многомерный.
Приведи описание типа массива, например:
type
TMyArray = array[1..100500] of Byte;
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
Ham_ele_on (статус: Посетитель), 17 ноября 2010, 13:14 [#4]:
var
Ar:array [0..3,0..4,0..3]of integer;
|
|
Жикльор (статус: 5-ый класс), 17 ноября 2010, 18:47 [#5]:
Ну так а в чем проблема, по тому же принципу.
var
i,j,k: integer;
A: array [1..4,1..5,1..4] of integer;
begin
for i:=1 to 4 do
begin
for j:=1 to 5 do
begin
for k:=1 to 4 do
begin
write(f,A[i][j][k]);
end;
writeln(f,#13);
end;
writeln(f,#13);
end;
end;
Если бы строители строили дома так, как программисты пишут программы, то первый же дятел уничтожил бы цивилизацию.
|
|
Ham_ele_on (статус: Посетитель), 17 ноября 2010, 18:56 [#6]:
а можно теперь словами объяснить?
|
|
Жикльор (статус: 5-ый класс), 17 ноября 2010, 23:52 [#7]:
Мне вариант min@y™ даже больше понравился. Объясняю что он делает:
var
Ar: array[0..3,0..4,0..3] of integer; //объявляем массив
fs: TFileStream; // объявляем файловый поток
begin
// <--- здесь какая-либо инициализация массива
fs:= TFileStream.Create(Путь_и_Имя_файла.Расширение, fmOpenWrite or fmShareExclusive); //создаешь файловый поток и
связываешь его с твоим файлом
try
fs.Write(Ar, SizeOf(Ar)); //пробуешь записать в поток массив Ar и размер записываемого равен размеру массива
finally
fs.Free(); //освобождаем файловый поток
end;
end;
Если бы строители строили дома так, как программисты пишут программы, то первый же дятел уничтожил бы цивилизацию.
|
|
Ham_ele_on (статус: Посетитель), 18 ноября 2010, 06:43 [#8]:
почему то этого ответа я не видел.
а как прочитать из файла массив??? а если он не один??? а если вместе с массивом ещё и переменные в файл нужно записать и потом прочитать?
|
|
min@y™ (статус: Доктор наук), 18 ноября 2010, 08:18 [#9]:
Цитата (Ham_ele_on):
почему то этого ответа я не видел.
Он в самом верху, под вопросом. 
Цитата (Ham_ele_on):
а как прочитать из файла массив??? а если он не один??? а если вместе с массивом ещё и переменные в файл нужно записать и потом прочитать?
Для начала тыкай вот сюда и читай, читай, читай.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
Ham_ele_on (статус: Посетитель), 19 ноября 2010, 06:57 [#11]:
получилось вот так(тестовый код):procedure TForm1.LoadClick(Sender: TObject);
var Ar,Ar1:array[1..3,1..4] of integer;
SumAr:array [1..4] of integer;
Fs:TFileStream ;
begin
Fs:=TFileStream.Create('Test.mr',fmOpenRead);
try
Fs.Read(Ar,SizeOf(Ar));
Fs.Read(Ar1,SizeOf(Ar1));
L1.Caption:=IntToStr(Ar[1,1]);
L2.Caption:=IntToStr(Ar[1,2]);
L3.Caption:=IntToStr(Ar[1,3]);
L4.Caption:=IntToStr(Ar[2,1]);
L5.Caption:=IntToStr(Ar[2,2]);
L6.Caption:=IntToStr(Ar[2,3]);
L12.Caption:=IntToStr(Ar1[1,1]);
L22.Caption:=IntToStr(Ar1[1,2]);
L32.Caption:=IntToStr(Ar1[1,3]);
L42.Caption:=IntToStr(Ar1[2,1]);
L52.Caption:=IntToStr(Ar1[2,2]);
L62.Caption:=IntToStr(Ar1[2,3]);
Fs.Read(SumAr,SizeOf(SumAr));
Label1.Caption:=IntToStr(SumAr[1]);
Label2.Caption:=IntToStr(SumAr[2]);
Label3.Caption:=IntToStr(SumAr[3]);
Label4.Caption:=IntToStr(SumAr[4]);
finally
Fs.Free();
end;
end;
procedure TForm1.saveClick(Sender: TObject);
var Ar,Ar1:array[1..3,1..4] of integer;
SumAr:array [1..4] of integer;
Fs:TFileStream ;
begin
Ar[1,1]:=StrToInt(E1.Text);
Ar[1,2]:=StrToInt(E2.Text);
Ar[1,3]:=StrToInt(E3.Text);
Ar[2,1]:=StrToInt(E4.Text);
Ar[2,2]:=StrToInt(E5.Text);
Ar[2,3]:=StrToInt(E6.Text);
Ar1[1,1]:=StrToInt(E12.Text);
Ar1[1,2]:=StrToInt(E22.Text);
Ar1[1,3]:=StrToInt(E32.Text);
Ar1[2,1]:=StrToInt(E42.Text);
Ar1[2,2]:=StrToInt(E52.Text);
Ar1[2,3]:=StrToInt(E62.Text);
SumAr[1]:=11; SumAr[2]:=22;
SumAr[3]:=33; SumAr[4]:=44;
Fs:=TFileStream.Create('Test.mr',fmOpenWrite);
try
Fs.Write(Ar,SizeOf(Ar));
Fs.Write(Ar1,SizeOf(Ar1));
Fs.Write(SumAr,SizeOf(SumAr));
finally
Fs.Free();
end;
end;
почему то не получилось использовать Wiht..do,
и если я пробовал суммировать значения массивов и записывать их в третий массив SumAr[1]:=Ar1[2,3]+Ar[1,3]; то данные записываются не туда куда нужно.
|
|
Ham_ele_on (статус: Посетитель), 28 ноября 2010, 17:55 [#12]:
подскажите пожалуйста, а этот код никак нельзя оптимизировать???
|
|
min@y™ (статус: Доктор наук), 28 ноября 2010, 18:32 [#13]:
Где код?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
Ham_ele_on (статус: Посетитель), 28 ноября 2010, 20:41 [#14]:
procedure TForm1.LoadClick(Sender: TObject);
var Ar,Ar1:array[1..3,1..4] of integer;
SumAr:array [1..4] of integer;
Fs:TFileStream ;
begin
Fs:=TFileStream.Create('Test.mr',fmOpenRead);
try
Fs.Read(Ar,SizeOf(Ar));
Fs.Read(Ar1,SizeOf(Ar1));
L1.Caption:=IntToStr(Ar[1,1]);
L2.Caption:=IntToStr(Ar[1,2]);
L3.Caption:=IntToStr(Ar[1,3]);
L4.Caption:=IntToStr(Ar[2,1]);
L5.Caption:=IntToStr(Ar[2,2]);
L6.Caption:=IntToStr(Ar[2,3]);
L12.Caption:=IntToStr(Ar1[1,1]);
L22.Caption:=IntToStr(Ar1[1,2]);
L32.Caption:=IntToStr(Ar1[1,3]);
L42.Caption:=IntToStr(Ar1[2,1]);
L52.Caption:=IntToStr(Ar1[2,2]);
L62.Caption:=IntToStr(Ar1[2,3]);
Fs.Read(SumAr,SizeOf(SumAr));
Label1.Caption:=IntToStr(SumAr[1]);
Label2.Caption:=IntToStr(SumAr[2]);
Label3.Caption:=IntToStr(SumAr[3]);
Label4.Caption:=IntToStr(SumAr[4]);
finally
Fs.Free();
end;
end;
procedure TForm1.saveClick(Sender: TObject);
var Ar,Ar1:array[1..3,1..4] of integer;
SumAr:array [1..4] of integer;
Fs:TFileStream ;
begin
Ar[1,1]:=StrToInt(E1.Text);
Ar[1,2]:=StrToInt(E2.Text);
Ar[1,3]:=StrToInt(E3.Text);
Ar[2,1]:=StrToInt(E4.Text);
Ar[2,2]:=StrToInt(E5.Text);
Ar[2,3]:=StrToInt(E6.Text);
Ar1[1,1]:=StrToInt(E12.Text);
Ar1[1,2]:=StrToInt(E22.Text);
Ar1[1,3]:=StrToInt(E32.Text);
Ar1[2,1]:=StrToInt(E42.Text);
Ar1[2,2]:=StrToInt(E52.Text);
Ar1[2,3]:=StrToInt(E62.Text);
SumAr[1]:=11; SumAr[2]:=22;
SumAr[3]:=33; SumAr[4]:=44;
Fs:=TFileStream.Create('Test.mr',fmOpenWrite);
try
Fs.Write(Ar,SizeOf(Ar));
Fs.Write(Ar1,SizeOf(Ar1));
Fs.Write(SumAr,SizeOf(SumAr));
finally
Fs.Free();
end;
end;
|
|
Ham_ele_on (статус: Посетитель), 29 ноября 2010, 07:44 [#15]:
код не видно, или его нельзя оптимизировать??
|
|
min@y™ (статус: Доктор наук), 29 ноября 2010, 08:17 [#16]:
Цитата (Ham_ele_on):
код не видно, или его нельзя оптимизировать??
Код можно оптимизировать так:
1. Выкинуть полностью обработчики LoadClick() и SaveClick();
2. Поставить пакет RxLib 2.75.
3. Положить на форму компонент TFormStorage из этого пакета и грамотно его настроить.
Вот и вся оптимизация.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
Ham_ele_on (статус: Посетитель), 29 ноября 2010, 08:49 [#17]:
спасибо. буду попробовать
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|