6 / 6 / 2
Регистрация: 24.09.2012
Сообщений: 381
1

Сохранение и чтение динамического массива из файла

03.03.2014, 11:32. Показов 5535. Ответов 14
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток, у меня есть динамический массив
Delphi
1
2
3
4
5
6
Tother=record
i:integer;
a:byte;
end;
 
var b:array of Tother;
как мне записать его в файл (ну можно перевести его в статический и записать, ладно, следующий вопрос), и как открыть его с файла, если я не знаю количество элементов массива?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.03.2014, 11:32
Ответы с готовыми решениями:

Чтение из файла динамического массива.
Добрый день! Подскажите пожалуйста как правильно считать динамический массив из файла. Если можно...

Сохранение массива в файл и чтение массива из файла
Имеется массив: int region_coordinates; Надо его записать в файл(неважно, в каком формате,...

Чтение массива из файла в textbox и сохранение его в виде матрицы
Здравствуйте! Читаю массив из файла, после чего пихаю его в текстбокс, после чего надо сохранить...

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

14
пофигист широкого профиля
4732 / 3167 / 858
Регистрация: 15.07.2013
Сообщений: 18,248
03.03.2014, 11:47 2
Цитата Сообщение от vadim23409 Посмотреть сообщение
как открыть его с файла, если я не знаю количество элементов массива?
Посчитать по размеру файла и размеру Тother?
0
6 / 6 / 2
Регистрация: 24.09.2012
Сообщений: 381
03.03.2014, 13:09  [ТС] 3
Цитата Сообщение от northener Посмотреть сообщение
Посчитать по размеру файла и размеру Тother?
ну логично я понял, что делать, но написать это в коде не знаю как...
0
Модератор
3490 / 2613 / 741
Регистрация: 19.09.2012
Сообщений: 7,974
03.03.2014, 13:46 4
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// Запись
AssignFile(myFile, 'Test.txt');
ReWrite(myFile);
for i := 0 to High(b) do
  Write(myFile, b[i]);
CloseFile(myFile);
 
// Чтение
i := 0;
AssignFile(myFile, 'Test.txt');
Reset(myFile);
while not Eof(myFile) do
begin
  SetLength(b, i+1);
  Read(myFile, b[i]);
  inc(i);
end;
CloseFile(myFile);
2
6 / 6 / 2
Регистрация: 24.09.2012
Сообщений: 381
03.03.2014, 13:49  [ТС] 5
то есть
Delphi
1
2
3
4
5
var a:integer;
begin
a:=filesize(f) div sizeof(Tother);
setlength(b,a);
read(f,b);
так ведь должно быть?
0
пофигист широкого профиля
4732 / 3167 / 858
Регистрация: 15.07.2013
Сообщений: 18,248
03.03.2014, 13:57 6
Цитата Сообщение от vadim23409 Посмотреть сообщение
read(f,b);
так ведь должно быть?
Нет. Если читать процедурой read, то только поштучно. Если BlockRead, то можно и все сразу.
0
Почетный модератор
64299 / 47594 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
03.03.2014, 14:00 7
Цитата Сообщение от vadim23409 Посмотреть сообщение
как мне записать его в файл
Смотря какой файл, текстовый или типизированный.
Цитата Сообщение от vadim23409 Посмотреть сообщение
и как открыть его с файла, если я не знаю количество элементов массива?
Если массив уже есть, зачем его читать из файла?
Может данные записаны в текстовый файл и их нужно вытащить в массив записей?
0
6 / 6 / 2
Регистрация: 24.09.2012
Сообщений: 381
03.03.2014, 14:09  [ТС] 8
Цитата Сообщение от Puporev Посмотреть сообщение
текстовый или типизированный.
файл типизированный
Цитата Сообщение от Puporev Посмотреть сообщение
Если массив уже есть, зачем его читать из файла?
программа должна открыть массив, который создали раньше, и не известно, сколько элементов в нём
0
Почетный модератор
64299 / 47594 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
03.03.2014, 14:18 9
Цитата Сообщение от vadim23409 Посмотреть сообщение
программа должна открыть массив, который создали раньше
Так он сохранен в файле, файл и читай, зачем вообще нужен массив?

Добавлено через 5 минут
А читать массив из типизированного файла так
Delphi
1
2
3
4
reset(f);
n:=filesize(f);
for i:=0 to n-1 do
read(f,a[i]);
0
6 / 6 / 2
Регистрация: 24.09.2012
Сообщений: 381
06.03.2014, 12:06  [ТС] 10
Цитата Сообщение от Puporev Посмотреть сообщение
reset(f);
n:=filesize(f);
for i:=0 to n-1 do
read(f,a[i]);
пишет ошибку ввода-вывода (I/O error 998)

Добавлено через 1 минуту
может быть нужно еще использовать seek при чтении элементов массива из файла?
0
Почетный модератор
64299 / 47594 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
06.03.2014, 12:09 11
А файл типизированный создан, путь к нему указан?

Добавлено через 1 минуту
Выложи свой код, или иди на форум телепатов.
0
6 / 6 / 2
Регистрация: 24.09.2012
Сообщений: 381
06.03.2014, 12:10  [ТС] 12
да, типизирован

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 Tpoint = record  
    pointX:integer;  
    pointY:integer;  
    pointtype:byte;
 
  end;
 
var
fileobjects: file of Tpoint;
 
AssignFile(fileobjects,getcurrentdir+'\project\'+filecontent.objectfilename);
Reset(fileobjects);
i:=filesize(fileobjects);
for n:=0 to i-1 do read(fileobjects,objects[i]);
CloseFile(fileobjects);
0
Почетный модератор
64299 / 47594 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
06.03.2014, 12:15 13
Типизированный файл должен быть создан программно, и в него должны быть занесены записи типа Tpoint
0
6 / 6 / 2
Регистрация: 24.09.2012
Сообщений: 381
06.03.2014, 12:17  [ТС] 14
его сохранение:
Delphi
1
2
3
4
5
AssignFile(fileobjects, Getcurrentdir+'\project\'+filecontent.objectfilename); 
     ReWrite(fileobjects);
      for i := 0 to length(objects)-1 do
      Write(fileobjects, objects[i]);
     CloseFile(fileobjects);
0
Почетный модератор
64299 / 47594 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
06.03.2014, 12:17 15
Если исходные данные в текстовом файле, то все по другому.
Вообще бы написал точное и полное задание, а не это
Цитата Сообщение от vadim23409 Посмотреть сообщение
у меня есть динамический массив
Да и хер с ним, что и где у тебя есть...
0
06.03.2014, 12:17
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.03.2014, 12:17
Помогаю со студенческими работами здесь

Сохранение динамического массива записей в файл
Всем здравствуйте. Имеется тип записи type Tbase = Record Name, group:String; Year:...

Чтение динамического массива с конца
Можно ли каким-то образом считывать динамический массив не с начала,а с конца?

Чтение и запись двухмерного динамического массива
Нужна помощь в работе с массивами: Имеем: 1. Игра типа Blocks (уничтожать несколько блоков...

Чтение и запись в файл динамического массива классов
Здравствуйте! Столкнулся с проблемой во время написания программы, которая бы заносила...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru