Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как сохранить массив Record в INI файл / 10 сообщений из 10, страница 1 из 1
19.08.2020, 13:43
    #39990765
NikolasGood
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сохранить массив Record в INI файл
Привет!
У меня есть разнотиповый массив ArrVoices типа TArrVoices

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
type
  TArrVoices = record
    Id: Integer;
    Name: string;       
    Visible: Boolean;  
  end;

var
ArrVoices: array of TArrVoices;


Как мне его сохранить в файл.ini чтобы потом подгрузить с него же?

Модератор: Как мне оформить свое сообщение?
...
Рейтинг: 0 / 0
19.08.2020, 13:48
    #39990773
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сохранить массив Record в INI файл
Это сложно, надо код писать. Циклом проходишь по массиву и сохраняешь каждую запись. Как
её сериализовать - выбирай сам. Можно по значениям, можно по секциям.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
19.08.2020, 13:53
    #39990778
iStrannik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сохранить массив Record в INI файл
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
Запись
        Ini.WriteInteger('Common', 'ArrVoiceLength', Length(ArrVoices));

        for I := 0 to High(ArrVoices) do
         begin
           Ini.WriteInteger('ArrVoice' + I, 'Id', ArrVoices[I].Id);
           Ini.WriteString('ArrVoice' + I, 'Name', ArrVoices[I].Name);
           Ini.WriteBool('ArrVoice' + I, 'Visible', ArrVoices[I].Visible);
         end;
Чтение
        Len := Ini.ReadInteger('Common', 'ArrVoiceLength', 0);

        SetLength(ArrVoices, Len);
        for I := 0 to High(ArrVoices) do
         begin
           ArrVoices[I].Id := Ini.ReadInteger('ArrVoice' + I, 'Id', 0);
           ArrVoices[I].Name := Ini.ReadString('ArrVoice' + I, 'Name', '');
           ArrVoices[I].Visible := Ini.ReadBool('ArrVoice' + I, 'Visible', false);
         end;
...
Рейтинг: 0 / 0
19.08.2020, 13:56
    #39990780
NikolasGood
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сохранить массив Record в INI файл
iStrannik
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
Запись
        Ini.WriteInteger('Common', 'ArrVoiceLength', Length(ArrVoices));

        for I := 0 to High(ArrVoices) do
         begin
           Ini.WriteInteger('ArrVoice' + I, 'Id', ArrVoices[I].Id);
           Ini.WriteString('ArrVoice' + I, 'Name', ArrVoices[I].Name);
           Ini.WriteBool('ArrVoice' + I, 'Visible', ArrVoices[I].Visible);
         end;
Чтение
        Len := Ini.ReadInteger('Common', 'ArrVoiceLength', 0);

        SetLength(ArrVoices, Len);
        for I := 0 to High(ArrVoices) do
         begin
           ArrVoices[I].Id := Ini.ReadInteger('ArrVoice' + I, 'Id', 0);
           ArrVoices[I].Name := Ini.ReadString('ArrVoice' + I, 'Name', '');
           ArrVoices[I].Visible := Ini.ReadBool('ArrVoice' + I, 'Visible', false);
         end;



Спасибо!

А что High(ArrVoices) одно и тоже, что Length(ArrVoices) ?
...
Рейтинг: 0 / 0
19.08.2020, 14:00
    #39990784
iStrannik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сохранить массив Record в INI файл
Length - длина массива(количество элементов)
High - индекс последнего элемента, так как массив динамический значит
нумерация с нуля начинается, соответственно Length(ArrVoices) - 1 = High(ArrVoices)
...
Рейтинг: 0 / 0
19.08.2020, 14:06
    #39990789
DimaBr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сохранить массив Record в INI файл
NikolasGood
А что High(ArrVoices) одно и тоже, что Length(ArrVoices) ?

Нет, не одно и то же
...
Рейтинг: 0 / 0
19.08.2020, 14:06
    #39990790
NikolasGood
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сохранить массив Record в INI файл
iStrannik
Length - длина массива(количество элементов)
High - индекс последнего элемента, так как массив динамический значит
нумерация с нуля начинается, соответственно Length(ArrVoices) - 1 = High(ArrVoices)

Спасибо!
...
Рейтинг: 0 / 0
19.08.2020, 14:12
    #39990793
NikolasGood
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сохранить массив Record в INI файл
DimaBr
NikolasGood
А что High(ArrVoices) одно и тоже, что Length(ArrVoices) ?

Нет, не одно и то же

Это потому что Length(ArrVoices) по сути ведёт отсчёт кол-ва строк?
...
Рейтинг: 0 / 0
19.08.2020, 15:07
    #39990823
iStrannik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сохранить массив Record в INI файл
Вам бы про массивы почитать.

Length возвращает длину массива (количество элементов)

Если массив объявлен как у Вас
ArrVoices: array of TArrVoices;
то это динамический массив(его длина может изменяться во время выполнения программы)
у таких массивов индекс первого элемента ВСЕГДА = 0, а индекс последнего Length() - 1
Есть еще статические массивы их длина задается заранее при объявлении и не изменяется,
Пример:
X: array[0..9] of byte;
У таких массивов индекс первого элемента может быть >= 0

Длина такого массива = 10, а индекс последнего элемента = 9
Если вы хотите определить длину массива то используете функцию
Length(X) = 10
Если хотите определить индекс последнего элемента массива то используете функцию
High(X) = 9
Если хотите определить индекс первого элемента массива то используете функцию
Low(X) = 0

Как Вам заметили Выше если статический массив объявлен например так
X: array[6..9] of byte;
тогда
Length(X) = 4
High(X) = 9
Low(X) = 6
...
Рейтинг: 0 / 0
19.08.2020, 18:07
    #39990911
NikolasGood
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сохранить массив Record в INI файл
iStrannik
Вам бы про массивы почитать.

Length возвращает длину массива (количество элементов)

Если массив объявлен как у Вас
ArrVoices: array of TArrVoices;
то это динамический массив(его длина может изменяться во время выполнения программы)
у таких массивов индекс первого элемента ВСЕГДА = 0, а индекс последнего Length() - 1
Есть еще статические массивы их длина задается заранее при объявлении и не изменяется,
Пример:
X: array[0..9] of byte;
У таких массивов индекс первого элемента может быть >= 0

Длина такого массива = 10, а индекс последнего элемента = 9
Если вы хотите определить длину массива то используете функцию
Length(X) = 10
Если хотите определить индекс последнего элемента массива то используете функцию
High(X) = 9
Если хотите определить индекс первого элемента массива то используете функцию
Low(X) = 0

Как Вам заметили Выше если статический массив объявлен например так
X: array[6..9] of byte;
тогда
Length(X) = 4
High(X) = 9
Low(X) = 6

Спасибо, всё ясно, понятно, почти всё знал, кроме длинны массива Length.
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как сохранить массив Record в INI файл / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]