Форум программистов, компьютерный форум, киберфорум
Наши страницы
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.73
Snayper
0 / 0 / 0
Регистрация: 20.11.2009
Сообщений: 21
#1

Функции save и load - Delphi

22.12.2009, 20:00. Просмотров 1682. Ответов 10
Метки нет (Все метки)

помогите пожалуйста! нужно дописать в программу функции, чтобы программа могла сохранять массив и загружать его. нужно для консоли.
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
program Project1;
 
{$APPTYPE CONSOLE}
 
uses
  SysUtils;
type arr=array[1..100] of integer;
 
procedure sortdown (var a:arr;n:integer);
var i,j,nmax,buf:integer;
begin
 for i := 1 to n - 1 do begin
      nmax := i;
      for j := i + 1 to n do
         if a[j] > a[nmax] then nmax := j;
      buf := a[i];
      a[i]:= a[nmax];
      a[nmax]:= buf;
   end;
end;
 
procedure sortup (var a:arr;n:integer);
var i,j,nmax,buf:integer;
begin
for i := 1 to n - 1 do begin
      nmax := i;
      for j := i + 1 to n do
         if a[j] < a[nmax] then nmax := j;
      buf := a[i];
      a[i]:= a[nmax];
      a[nmax]:= buf;
   end;
end;
 
procedure show (var a:arr;n:integer);
var i:integer;
begin
    for i := 1 to n do write(a[i],',') ;
end;
 
var a:arr;n,i:integer;c:char;
begin
     randomize;
     repeat
     writeln(#10#13,'1-Make Massiv,2-Upsort,3-Downsort,4-Show,0-Quit');
     readln(c);
     case c of
'1':begin
     write('Enter N=');readln(n);
   for i := 1 to n do a[i]:=random(100); show(a,n);end;
'2':begin sortup(a,n); show(a,n) end;
'3':begin sortdown(a,n); show(a,n) end;
'4':show(a,n);
'0':exit
  end;
     until false;
    readln;
 
  { TODO -oUser -cConsole Main : Insert code here }
end.
Добавлено через 21 час 51 минуту
up! помогите пожалуйста!!!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.12.2009, 20:00
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Функции save и load (Delphi):

save to file
как текст из memo сохранить в текстовый файл

Button caption save
Изменяю название кнопки Button через Edit. Можно как-то сохранить её название,...

Open,Save Dialog
Сап работяги. Не могу понять почему не работает код, в частности сохраняет...

OpenDialog Save Dialog
Мне нужно, чтобы при нажатии на пункты MainMenu &quot;Открыть&quot; и &quot;Сохранить&quot;,...

Перехватить стандартный Save As диалог.
Нужно перехватить сообщение стандартного диалога сохранения файла в ДРУГОЙ...

Файлы из BLOB открыть (без save)
Как не сохраняя на диск открыть файл из BLOBа в соответствующем приложении,...

10
Snayper
0 / 0 / 0
Регистрация: 20.11.2009
Сообщений: 21
28.12.2009, 23:03  [ТС] #2
помогите, где ошибка? почему после закрытия проги и потом ее открытия загружается только первое число?
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
program Project1;
 
{$APPTYPE CONSOLE}
 
uses
  SysUtils;
type arr=array[1..100] of integer;
 
procedure sortdown (var a:arr;n:integer);
var i,j,nmax,buf:integer;
begin
 for i := 1 to n - 1 do begin
      nmax := i;
      for j := i + 1 to n do
         if a[j] > a[nmax] then nmax := j;
      buf := a[i];
      a[i]:= a[nmax];
      a[nmax]:= buf;
   end;
end;
 
procedure sortup (var a:arr;n:integer);
var i,j,nmax,buf:integer;
begin
for i := 1 to n - 1 do begin
      nmax := i;
      for j := i + 1 to n do
         if a[j] < a[nmax] then nmax := j;
      buf := a[i];
      a[i]:= a[nmax];
      a[nmax]:= buf;
   end;
end;
 
procedure show (var a:arr;n:integer);
var i:integer;
begin
    for i := 1 to n do write(a[i],',') ;
end;
 
procedure save(way:string; var a:arr;n:integer);
var
 f:file of integer;
 i:integer;
begin
 AssignFile(f,way);
  rewrite(f);
 for i:=1 to n do
  write(f,a[i]);
 CloseFile(f);
end;
 
procedure load(way:string; var a:arr;n:integer);
var
 f:file of integer;
 i:integer;
begin
AssignFile(f,way);
    reset(f);
      for i:=1 to n do
    read(f,a[i]);
 CloseFile(f);
end;
 
var a:arr;n,i:integer;c:char;
begin
     randomize;
     repeat
     writeln(#10#13,'1-Make Massiv,2-Upsort,3-Downsort,4-Show,5-Save,6-Load,0-Quit');
     readln(c);
     case c of
'1':begin
     write('Enter N=');readln(n);
   for i := 1 to n do a[i]:=random(100); show(a,n);end;
'2':begin sortup(a,n); show(a,n) end;
'3':begin sortdown(a,n); show(a,n) end;
'4':show(a,n);
'5':save('1.dat',a,n);
'6':begin load('1.dat',a,n); show(a,n)end;
'0':exit
  end;
     until false;
    readln;
 
  { TODO -oUser -cConsole Main : Insert code here }
end.
0
deathNC
1891 / 1004 / 123
Регистрация: 08.12.2009
Сообщений: 2,792
Записей в блоге: 2
28.12.2009, 23:16 #3
Delphi
1
2
3
4
5
6
7
8
9
10
11
procedure load(way:string; var a:arr;n:integer);
var
 f:file of integer;
 i:integer;
begin
AssignFile(f,way);
    reset(f);
      for i:=1 to n do
    read(f,a[i]);// !!!!!!!!! может тут ReadLn стоит использовать
 CloseFile(f);
end;
Добавлено через 42 секунды
Delphi
1
2
3
4
5
6
7
8
9
10
11
procedure load(way:string; var a:arr;n:integer);
var
 f:file of integer;
 i:integer;
begin
AssignFile(f,way);
    reset(f);
      for i:=1 to n do
    readLN(f,a[i]);
 CloseFile(f);
end;
0
Snayper
0 / 0 / 0
Регистрация: 20.11.2009
Сообщений: 21
28.12.2009, 23:24  [ТС] #4
неа, ошибку пишет
0
deathNC
1891 / 1004 / 123
Регистрация: 08.12.2009
Сообщений: 2,792
Записей в блоге: 2
28.12.2009, 23:32 #5
вообще-то так не делается, как у тебя - загрузка через цикл For..

Вот более правильный вариант загрузки:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Procedure LoadFromFile(FileName: String);
var
  a: Array Of Integer;
  f: file of Integer;
begin
  AssignFile(filename, f);
  Reset(f);
  While not EOF(f) do
    begin
      SetLength(a, High(a) + 2);
      Read(f, a[High(a)]);
    end;
  CloseFile;
end;
тут в динамический массив загружаются данные из указанного файла...

P.S. это просто пример, я его сделал не для твоей программы, а в качестве ПРИМЕРА, чтобы показать тебе, как лучше делать...
0
Snayper
0 / 0 / 0
Регистрация: 20.11.2009
Сообщений: 21
28.12.2009, 23:47  [ТС] #6
у меня будет вот так?
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
procedure load(way:string; var a:arr);
var
 f:file of integer;
 i:integer;
begin
AssignFile(f,way);
    reset(f);
      while not eof(f) do
      begin
        SetLength(a,High(a) + 2);
      Read(f, a[High(a)]);
    end;
    CloseFile(f);
end;
0
deathNC
1891 / 1004 / 123
Регистрация: 08.12.2009
Сообщений: 2,792
Записей в блоге: 2
28.12.2009, 23:54 #7
да...
только кое-что надо изменить...
Delphi
1
2
3
[FONT=monospace]
[/FONT]type 
  arr=array of integer; // Это вместо этого: arr=array[1..100] of integer;
и все остальные функции и процедуры тебе надо подстроить под динамический массив...

слово Динамический означает, что кол-во элементов заранее не определено... и в ходе программы ты изменяешь его размер функцией SetLength....
Delphi
1
2
3
4
// Допустим массив а после этого:
SetLength(A, 100);
// будет выглядеть так, будто ты его объявил так:
var a: array[0..99] of Integer;
надеюсь, всё понятно объясняю?
0
Snayper
0 / 0 / 0
Регистрация: 20.11.2009
Сообщений: 21
29.12.2009, 22:32  [ТС] #8
блин не догоняю. можешь,пожалуйста, четко объяснить что и где менять? мне проще понять когда уже написано...

Добавлено через 11 минут
мне препод объяснил вот так: у меня не идет загрузка из файла, а идет из кеша. нужно сделать n:=filesize(f), но я не знаю как это применить
0
Андрей Борисови
708 / 396 / 33
Регистрация: 04.10.2009
Сообщений: 1,687
29.12.2009, 23:57 #9
Функция filesize(f) используется с типизированными файлами. Т.е. с записями.
тебе надо:
1. Определить тип данных (целое, дробное, текст или строка)
2. Создать Тип Record
3. Создать файл с этим типом
4. Органищовать ввод дланных и запись их в файл.
5. Чтение данных из файла.
0
Snayper
0 / 0 / 0
Регистрация: 20.11.2009
Сообщений: 21
30.12.2009, 14:05  [ТС] #10
Цитата Сообщение от Андрей Борисови Посмотреть сообщение
Функция filesize(f) используется с типизированными файлами. Т.е. с записями.
тебе надо:
1. Определить тип данных (целое, дробное, текст или строка)
2. Создать Тип Record
3. Создать файл с этим типом
4. Органищовать ввод дланных и запись их в файл.
5. Чтение данных из файла.
можешь написать? пожалуйста..
0
Андрей Борисови
708 / 396 / 33
Регистрация: 04.10.2009
Сообщений: 1,687
01.01.2010, 00:09 #11
Как срочно надо?
0
01.01.2010, 00:09
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.01.2010, 00:09
Привет! Вот еще темы с решениями:

Can not load package. Problem?
Есть один пакет (назовём его &quot;мой пакет&quot;), который использует библиотеку...

Ошибка Cant load package
Добавила компоненты alfascins(делала по видеоурокам разным).Но при загрузке...

Не выполняется процедура ("Variant of save array index out of bounds")
Ребят что то я затупил. Подскажите почему не выполняется процедура. Ниже код...

Open/Save Dialog. Сериализация данных. Запись/чтение данных объектов в/из потока.
Описана файловая переменная FileOfFilms: file of TFilmArr и переменная,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru