Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.61/100: Рейтинг темы: голосов - 100, средняя оценка - 4.61
2 / 2 / 0
Регистрация: 13.08.2010
Сообщений: 74

Сохранение массива в файл

19.09.2010, 15:29. Показов 19664. Ответов 22
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Подскажите, что не так в коде:
Delphi
1
2
3
4
5
6
7
8
9
10
 type
 
  TKot=array[1..500] of Integer;
  SaveKot=Record
 
 
  end;
var
  SaveF:File of Integer;
  FmEUChas: TFmEUChas;
Ввожу данные массива, все работает, сохраняю:
Delphi
1
2
3
4
5
6
7
8
9
10
11
procedure TFmEUChas.MenuSaveKotClick(Sender: TObject);
begin
 AssignFile(SaveF,'D:\sim\Программирование\Delhpi\Проект\Аналитик 3\Kot.txt');
 Rewrite(SaveF);
 for i:=1 to 500 do  //пишем в файл...
  write(SaveF,KotChas[i]);
Reset(SaveF);
CloseFile(SaveF);
i:=1;
 
end;
Загружаю:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
procedure TFmEUChas.MenuOpenKotClick(Sender: TObject);
begin
AssignFile(SaveF,'D:\sim\Программирование\Delhpi\Проект\Аналитик 3\Kot.txt');
 Rewrite(SaveF);
while not Eof(SaveF) do  //читаем из файла....
  begin
    read(SaveF,KotChas[i]);
    Inc(i);
    // Для проверки
Edit1.Text:=IntToStr(KotChas[1]);
Edit2.Text:=IntToStr(KotChas[2]);
Edit3.Text:=IntToStr(KotChas[3]);
Edit4.Text:=IntToStr(KotChas[4]);
Edit5.Text:=IntToStr(KotChas[5]);
Edit6.Text:=IntToStr(KotChas[6]);
Edit7.Text:=IntToStr(KotChas[7]);
  end;
  CloseFile(SaveF);
 
end;

При проверке программы ввожу данные массива, сохраняю, закрываю прогу, открываю, загружаю, а там нули....

В чем проблема, что не так делаю???
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
19.09.2010, 15:29
Ответы с готовыми решениями:

Сохранение элементов массива в файл
Подскажите, написал программу, нужно чтобы все элементы массива записывались в файл Результаты вычислений тоже в файл нужно прописать ...

Сохранение динамического массива в файл
Друзья! Что-то не так делаю, понять не могу что, помогите.. В программе моей все данные сохраняются в сложной структуре (типа record),...

Сохранение и загрузка Массива, stringgrid в файл + Переменную
Matrix :array of integer; сохранение в текстовый файл. Stringgrid и массив сохраняется procedure TForm4.N11Click(Sender:...

22
4 / 4 / 1
Регистрация: 08.09.2010
Сообщений: 12
19.09.2010, 15:48
Во первых, где заполняется массив "KotChas[i]"?.. хотя, вполне возможно где и на находится процедура с заполнением массива.
Во вторых, в процедуре "Загузки" после открытия файла "AssignFile()" идет "Rewrite()", который: "If an external file with the same name already exists, it is deleted and a new empty file is created in its place.", т.е. если существует внешний файл, то он удает его и создает на его месте новый пустой.
0
2 / 2 / 0
Регистрация: 13.08.2010
Сообщений: 74
19.09.2010, 16:00  [ТС]
Т.е. массив заполняется и работает нормально. Проблема в сохранении и загрузки. После сохранения открываю файл с помощью блокнота и вижу, что там что-то меняется (хотя что не пойму). А вот при загрузке ничего не происходит, т.е. не вижу загруженных значений. При загрузке ведь Reset нет...
0
4 / 4 / 1
Регистрация: 08.09.2010
Сообщений: 12
19.09.2010, 16:22
И ещё, когда пишешь в файл, используй какой-нить разделитель, например ";":
Delphi
1
Write(SaveF, KotChas[i], '; ');
или записывай данные массива построчно:
Delphi
1
Writeln(SaveF, KotChas[i]);
0
2 / 2 / 0
Регистрация: 13.08.2010
Сообщений: 74
19.09.2010, 16:36  [ТС]
Ничего не понял... У меня что, записано без разделителей???
write(SaveF,KotChas[i]);?????????
А записывать построчно 500 строк ваще писец....

TKot=array[1..500] of Integer;

Добавлено через 15 секунд
Ничего не понял... У меня что, записано без разделителей???
write(SaveF,KotChas[i]);?????????
А записывать построчно 500 строк ваще писец....

TKot=array[1..500] of Integer;
0
Фрилансер
 Аватар для Mad_Dog
452 / 433 / 117
Регистрация: 01.06.2010
Сообщений: 1,314
19.09.2010, 17:59
Цитата Сообщение от Shurale Посмотреть сообщение
И ещё, когда пишешь в файл, используй какой-нить разделитель, например ";":
Delphi
1
Write(SaveF, KotChas[i], '; ');
или записывай данные массива построчно:
Delphi
1
Writeln(SaveF, KotChas[i]);
Shurale! Прежде чем совет давать, думай что советуешь!!!
ТС пишет данные в типизированный файл!!!

Добавлено через 4 минуты
ДмитрийСтариков, после того, как связал файловую переменну с исходным файлом (AssignFile(...)), нужно этот самый файл открыть для чтения данных из него (оператор Reset(...), но никак не Rewrite(...))!!!
1
2 / 2 / 0
Регистрация: 13.08.2010
Сообщений: 74
19.09.2010, 18:36  [ТС]
Блин, спасибо огромное, заработало.... Еще один вопросик, плиз.. Если мне нужно так же поступить со вторым массивом, то нужно прописать это так?
Delphi
1
2
3
4
5
6
7
8
9
procedure TFmEUChas.MenuOpenKotClick(Sender: TObject);
begin
AssignFile(SaveF,'D:\sim\Программирование\Delhpi\Проект\Аналитик 3\Kot.txt');
Rewrite(SaveF);
while not Eof(SaveF) do //читаем из файла....
begin
read(SaveF,KotChas[i]);
read(SaveF,KotDay[i]);     //второй массив
Inc(i);
0
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
19.09.2010, 19:03
Цитата Сообщение от ДмитрийСтариков Посмотреть сообщение
Если мне нужно так же поступить со вторым массивом, то нужно прописать это так?
Я уже вам писал, что если нужно в файле хранить много массивов, то нужно создать соответствующий файл. Если все массивы одного типа и размера, то файл массивов, например
Delphi
1
2
3
type
  TKot=array[1..500] of Integer;
  Tfail=file of TKot;
тогда компонентой файла будет один массив.
Если массивы разного размера, тогда делаем запись
Delphi
1
2
3
4
5
6
type
  TKot=record
          rz:integer;
          ms:array[1..500] of Integer;
          end;
  Tfail=file of TKot;
2
2 / 2 / 0
Регистрация: 13.08.2010
Сообщений: 74
19.09.2010, 20:02  [ТС]
Массивы разного размера. Спасибо за подсказку, вопросик: как все же записать эти массивы в
procedure TFmEUChas.MenuSaveKotClick(Sender: TObject);???
0
2 / 2 / 0
Регистрация: 13.08.2010
Сообщений: 74
23.09.2010, 16:40  [ТС]
Возникла проблема:
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
procedure TFmEURUSD.ButLoadKotChasYesClick(Sender: TObject);
begin
AssignFile(SaveChasKot,'D:\sim\Программирование\Delhpi\Проект\Основная\EUR_USD_Chas_Kot.txt');
 
 Reset(SaveChasKot);
while not Eof(SaveChasKot) do  //читаем из файла....
  begin
    read(SaveChasKot,KotChas[i]);
    Inc(i);
  end;
  CloseFile(SaveChasKot);
 
 ImChas.Canvas.MoveTo(intVrChas[1], 500-KotChas[1]);
for i:=1 to length(intVrChas)-1 do
begin
ImChas.Visible:=True;
 Canvas.Pen.Color:=ClRed;
ImChas.Canvas.LineTo(intVrChas[i], 500-KotChas[i]);
end;
procedure TFmEURUSD.ButLoadInrVrChasYesClick(Sender: TObject);
begin
AssignFile(SaveIntVrChas,'D:\sim\Программирование\Delhpi\Проект\Основная\EUR_USD_Chas_IntVr.txt');
 
 Reset(SaveIntVrChas);
while not Eof(SaveIntVrChas) do  //читаем из файла....
  begin
    read(SaveIntVrChas,intVrChas[i]);
    Inc(i);
end;
  CloseFile(SaveIntVrChas);
  z:=IntVrChas[1];
 
 
 // Для проверки
 
  Edit2.Text:=IntToStr(intVrChas[1]);
  Edit3.Text:=IntToStr(intVrChas[2]);
  Edit4.Text:=IntToStr(intVrChas[3]);
  end;
]

Вне зависимости от очередности, вторая процедура не срабатывает, только после нескольких нажатий туда-сюда. И почему-то рисует черным???
0
23.09.2010, 16:43
 Комментарий модератора 
ДмитрийСтариков, Я понимаю что правила Вы не читали и читать не собираетесь. Но неужели так трудно догадаться, что код программы нужно обрамлять тегами DELPHI, а не цитатой?
0
2 / 2 / 0
Регистрация: 13.08.2010
Сообщений: 74
23.09.2010, 20:28  [ТС]
Я имею ввиду, что если первой запустить
ButLoadInrVrChasYesClick(, то она работает, но не работает первая...???
0
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
23.09.2010, 20:32
Цитата Сообщение от ДмитрийСтариков Посмотреть сообщение
Я имею ввиду, что если первой запустить
ButLoadInrVrChasYesClick(
А HrenEgoZnaetClick не пробовали???
0
2 / 2 / 0
Регистрация: 13.08.2010
Сообщений: 74
23.09.2010, 20:45  [ТС]
Пробовал, не помогает.... Действительно, что не так?? Извините за ошибки, на форуме не так давно и далеко не все знаю... правила прочел
0
2 / 2 / 0
Регистрация: 13.08.2010
Сообщений: 74
26.09.2010, 17:39  [ТС]
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
// сохраняем данные средней скользящей
 begin
 AssignFile(SavessChas,'D:\sim\Программирование\Delhpi\Проект\Основная\save\EUR_USD_ssChas_IntVr.txt');
 Rewrite(SavessChas);
 for srschas:=0 to 500 do  //пишем в файл...
  write(SavessChas,ssChas[srschas]);
Reset(SavessChas);
CloseFile(SavessChas);
srschas:=0;
end;
 
 
// сохраняем данные для MACD
  begin
 AssignFile(SaveMacdChas,'D:\sim\Программирование\Delhpi\Проект\Основная\save\EUR_USD_MacdChas_IntVr.txt');
 Rewrite(SaveMacdChas);
 for macdchas:=0 to 500 do  //пишем в файл...
  write(SaveMacdChas,MacdCh[macdchas]);
Reset(SaveMacdChas);
CloseFile(SaveMacdChas);
macdchas:=0;
end;

Подскажите, почему второй оператор постоянно вставляет в начало 10 пустых значений, хотя первый работает нормально, как и третий (такой же).???? Перед сохранением все значения есть...
0
215 / 215 / 20
Регистрация: 18.05.2010
Сообщений: 865
26.09.2010, 17:47
Цитата Сообщение от ДмитрийСтариков Посмотреть сообщение
Reset(SavessChas);
Зачем эта строчка? Может лучше ее убрать.
0
2 / 2 / 0
Регистрация: 13.08.2010
Сообщений: 74
26.09.2010, 17:54  [ТС]
Насколько я понимаю для открытия файла, но ведь первый работает с ней же....
0
215 / 215 / 20
Регистрация: 18.05.2010
Сообщений: 865
26.09.2010, 17:57
ДмитрийСтариков, Да для открытия но только в режиме чтения а не записи. Вы же используете для записи ReWrite так что уберите здесь Reset. К тому же он стоит непостредственно перед CloseFile
0
2 / 2 / 0
Регистрация: 13.08.2010
Сообщений: 74
26.09.2010, 18:09  [ТС]
Убрал, но проблема не решилась... Вообще не пойму что такое. При введении значений вывожу их на Editы, все нормально, сохраняю - первые 10 пустые, при чем когда снова ввожу, сохраняю, получается такая же песня. В итоге все значения сохраняются, но с промежутками в 10 пустых значений...
0
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
26.09.2010, 18:15
Цитата Сообщение от ДмитрийСтариков Посмотреть сообщение
for macdchas:=0 to 500 do *//пишем в файл...
* write(SaveMacdChas,MacdCh[macdchas]);
А что в первых 10 ячейках массива?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
26.09.2010, 18:15
Помогаю со студенческими работами здесь

Сохранение массива в файл, проверка целого числа и тд
Всем привет. Пишу курсовую работу, нужна ваша помощь. Уже не знаю что делать, есть несколько ошибок, надеюсь на вашу помощь, в решении...

Сохранение/чтение в нетипизированный файл массива используя потоки
Здравствуйте, необходима помощь, так как не понимаю использования потоков, сделал без них, преподаватель сказал переделать, а так же...

Сохранение в файл
скажите пожалуйста, как сделать так, что бы после удачный результат сохранялся в файл?

Сохранение в файл
Всем здравствуйте. Такая проблема в этом коде не работает сохранение: procedure TMainForm.FileSaveClick(Sender: TObject); var ...

Сохранение в файл
Здравствуйте, помогите сделать сохранение координат обхода матрицы в файл. Начала делоать, пробую так, как в коде написано - выдаёт ошибку...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru