Присвоение массиву значений

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Присвоение массиву значений

Сообщение Ichthyander » 07.12.2015 08:26:55

Вот интересна мне такая тема. Ведь вроде возможностей-то у среды программирования и у самого языка много: далеко не обо всех я знаю. Чувствую, что можно сделать то, что я делаю более рациональным и красивым способом, но пока не понимаю как. К примеру, есть у меня массивы в программе. В частности, массивы типа записей (record). Данных в массиве много и они в принципе статичны. Загружать данные из внешнего файла по нескольким причинам (эмпирические данные, которые не хочу светить и т.д.) нет желания. Ну, и присваиваю значения этому массиву классическим (?) способом:
Код: Выделить всё
ArrayOfRecords: array[0..99] of
        TDataRecord =
    (
      (FirstStringField: 'SomeStringValue';
        SecondIntegerField: 123456;
        ThirdSetField: [tsfOne, tsfTwo, ...] ...),
      (FirstStringField: 'OtherStringValue';
        SecondIntegerField: 123456;
        ThirdSetField: [tsfOne, tsfTSeven, ...] ...),
       ... ...
    )

Периодически приходится добавлять новые данные, править существующие. Можно ли как-то это сделать по-другому? К примеру, отдельный файл, удобный для правки табличных данных для нашего массива, который подключается на стадии компиляции? Или может еще какие-то интересные инструменты есть для этого?
Аватара пользователя
Ichthyander
энтузиаст
 
Сообщения: 698
Зарегистрирован: 04.04.2007 08:32:43
Откуда: Астрахань

Re: Присвоение массиву значений

Сообщение resident » 07.12.2015 08:59:40

Ichthyander писал(а):которые не хочу светить

Так вы своим способом храните данные в открытом виде.
Любой поток при записи на диск можно шифровать встроенным BlowFish.

Ichthyander писал(а):К примеру, отдельный файл, удобный для правки табличных данных для нашего массива, который подключается на стадии компиляции?

CsvDocument и файл будет можно править из любого табличного редактора.

Ichthyander писал(а):Или может еще какие-то интересные инструменты есть для этого?

Базы данных?
resident
энтузиаст
 
Сообщения: 605
Зарегистрирован: 13.03.2013 16:58:51

Re: Присвоение массиву значений

Сообщение Ichthyander » 08.12.2015 08:59:28

resident писал(а):Так вы своим способом храните данные в открытом виде.
Любой поток при записи на диск можно шифровать встроенным BlowFish.
... ...
CsvDocument и файл будет можно править из любого табличного редактора.
... ...
Базы данных?

Спасибо за рекомендации, но это все не то, что мне хотелось бы. Я могу конечно и базу данных для этого массива подключить и шифрование данных сделать, но это все усложнит код. Если ничего такого нет, о чем я говорил в начале тема, то более целесообразным вижу все-таки оставить как есть. Присвоение значений этому массиву непосредственно в исходном коде файла .pas
Аватара пользователя
Ichthyander
энтузиаст
 
Сообщения: 698
Зарегистрирован: 04.04.2007 08:32:43
Откуда: Астрахань

Re: Присвоение массиву значений

Сообщение azsx » 08.12.2015 10:07:20

1. вынести подгрузку данных в отдельный pas файл;
2. написать простой макрос конвертор в екселе, который формирует ваш pas файл целиком.
В итоге данные будете править в екселе, а потом просто макросом формировать новый файл.
зы
но я солидарен, как раз именно так вы храните данные в открытом виде.
azsx
энтузиаст
 
Сообщения: 959
Зарегистрирован: 16.11.2015 06:38:32

Re: Присвоение массиву значений

Сообщение Ichthyander » 08.12.2015 11:27:55

azsx писал(а):1. вынести подгрузку данных в отдельный pas файл;
2. написать простой макрос конвертор в екселе, который формирует ваш pas файл целиком.

Кстати, именно в этом направлении я и думал. Просто рассчитывал на готовые инструменты для этого. В свое время очень был рад открытию возможностей по локализации программы с помощью средств Lazarus с файлами *.po :)
но я солидарен, как раз именно так вы храните данные в открытом виде.
Ну, как бы хранение данных непосредственно в в exe-шнике непонятном для стороннего формате и не в виде ресурса отсекает некоторое число любопытных, которые будут тырить эти данные для своих скриптов или программ. С другой стороны это не так уж секретно, чтобы шифровать эти данные да еще и внутри программы
Аватара пользователя
Ichthyander
энтузиаст
 
Сообщения: 698
Зарегистрирован: 04.04.2007 08:32:43
Откуда: Астрахань

Re: Присвоение массиву значений

Сообщение resident » 08.12.2015 21:35:01

Ichthyander писал(а):и не в виде ресурса

Ichthyander писал(а):но это все усложнит код

Ichthyander писал(а):рассчитывал на готовые инструменты

А если так, правда придется написать одну строку кода:
1) Включить любой текстовый файл
Код: Выделить всё
{$INCLUDE YourFileName.inc}

2) Создать файл можно в табличном редакторе, сохранив как текстовый. Между колонок с данными будут колонки с хламом типа
Код: Выделить всё
(FirstStringField: '
,
Код: Выделить всё
'; SecondIntegerField:
и т.д. Колонки вычисляемые - есть данные, есть и хлам. Колонки скрыть, чтоб не мешались.
3) (Необязательно) Еще перед компиляцией Лазарус может делать предварительную обработку каким-нить своим файлом. Даже и не знаю пока зачем такое понадобится в данном случае.

http://wiki.freepascal.org/Lazarus_IDE_ ... lude_Files
resident
энтузиаст
 
Сообщения: 605
Зарегистрирован: 13.03.2013 16:58:51

Re: Присвоение массиву значений

Сообщение Ichthyander » 09.12.2015 10:03:26

resident писал(а):
Ichthyander писал(а):и не в виде ресурса

Ichthyander писал(а):но это все усложнит код

Ichthyander писал(а):рассчитывал на готовые инструменты

А если так, правда придется написать одну строку кода:
1) Включить любой текстовый файл
Код: Выделить всё
{$INCLUDE YourFileName.inc}

2) Создать файл можно в табличном редакторе, сохранив как текстовый. Между колонок с данными будут колонки с хламом типа
Код: Выделить всё
(FirstStringField: '
,
Код: Выделить всё
'; SecondIntegerField:
и т.д. Колонки вычисляемые - есть данные, есть и хлам. Колонки скрыть, чтоб не мешались.
3) (Необязательно) Еще перед компиляцией Лазарус может делать предварительную обработку каким-нить своим файлом. Даже и не знаю пока зачем такое понадобится в данном случае.
http://wiki.freepascal.org/Lazarus_IDE_ ... lude_Files

Это конечно тоже вариант, но уже не такой красивый
Аватара пользователя
Ichthyander
энтузиаст
 
Сообщения: 698
Зарегистрирован: 04.04.2007 08:32:43
Откуда: Астрахань

Re: Присвоение массиву значений

Сообщение resident » 04.03.2016 21:15:45

Кстати, в новом EmEditor-е обнаружил удобное редактирование CSV файлов в виде таблицы.
Качать, как всегда, на руборде :mrgreen:
resident
энтузиаст
 
Сообщения: 605
Зарегистрирован: 13.03.2013 16:58:51

Re: Присвоение массиву значений

Сообщение bormant » 05.03.2016 23:06:50

В бесплатном варианте EmEditor-а этой функциональности нет?
Аватара пользователя
bormant
постоялец
 
Сообщения: 408
Зарегистрирован: 21.03.2012 11:26:01

Re: Присвоение массиву значений

Сообщение sign » 06.03.2016 08:36:33

Данные в базу.
В программу морду для редактирования данных.
sign
энтузиаст
 
Сообщения: 1131
Зарегистрирован: 30.08.2009 09:20:53

Re: Присвоение массиву значений

Сообщение resident » 06.03.2016 23:00:35

bormant писал(а):В бесплатном варианте EmEditor-а этой функциональности нет?

Дык, вроде бесплатных вариантов не было никогда. (Независимо от набора функциональностей.)

sign
База не подходит, он уж грил.
А можно файлы в exe-шник включать и на них ссылаться?
Например, скомпилировать exe вместе с csv таблицей? И в этом ехе брать данные из прилепленного csv?
resident
энтузиаст
 
Сообщения: 605
Зарегистрирован: 13.03.2013 16:58:51

Re: Присвоение массиву значений

Сообщение sign » 07.03.2016 07:43:39

resident писал(а):А можно файлы в exe-шник включать и на них ссылаться?

Если нужно непременно хранить данные в программе, то чем плох файл ресурсов?
Данные легко редактируются, встраиваются в exe`шник.
sign
энтузиаст
 
Сообщения: 1131
Зарегистрирован: 30.08.2009 09:20:53

Re: Присвоение массиву значений

Сообщение resident » 07.03.2016 11:04:20

Ok
resident
энтузиаст
 
Сообщения: 605
Зарегистрирован: 13.03.2013 16:58:51

Re: Присвоение массиву значений

Сообщение Ichthyander » 10.03.2016 12:55:37

Если нужно непременно хранить данные в программе, то чем плох файл ресурсов?
Данные легко редактируются, встраиваются в exe`шник.

А как можно использовать файл ресурсов для хранения табличных данных? Честно говоря особо никогда не углублялся в тему файлов ресурсов, думал только для медиаданных используется
Аватара пользователя
Ichthyander
энтузиаст
 
Сообщения: 698
Зарегистрирован: 04.04.2007 08:32:43
Откуда: Астрахань

Re: Присвоение массиву значений

Сообщение Лекс Айрин » 10.03.2016 13:00:13

Ichthyander, например, как бинарный массив. Заливаешь в память единым куском и кидаешь на нее типизированную ссылку. Только в этом случае надо аккуратно работать -- чуть что не так и программа свалится.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

След.

Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 231

Рейтинг@Mail.ru