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

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

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

Аватара пользователя
Ichthyander
энтузиаст
Сообщения: 701
Зарегистрирован: 04.04.2007 08:32:43
Откуда: Астрахань
Контактная информация:

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

Сообщение Ichthyander »

Вот интересна мне такая тема. Ведь вроде возможностей-то у среды программирования и у самого языка много: далеко не обо всех я знаю. Чувствую, что можно сделать то, что я делаю более рациональным и красивым способом, но пока не понимаю как. К примеру, есть у меня массивы в программе. В частности, массивы типа записей (record). Данных в массиве много и они в принципе статичны. Загружать данные из внешнего файла по нескольким причинам (эмпирические данные, которые не хочу светить и т.д.) нет желания. Ну, и присваиваю значения этому массиву классическим (?) способом:

Код: Выделить всё

ArrayOfRecords: array[0..99] of
        TDataRecord =
    (
      (FirstStringField: 'SomeStringValue';
        SecondIntegerField: 123456;
        ThirdSetField: [tsfOne, tsfTwo, ...] ...),
      (FirstStringField: 'OtherStringValue';
        SecondIntegerField: 123456;
        ThirdSetField: [tsfOne, tsfTSeven, ...] ...),
       ... ...
    )

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

Сообщение resident »

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

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

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

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

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

Базы данных?
Аватара пользователя
Ichthyander
энтузиаст
Сообщения: 701
Зарегистрирован: 04.04.2007 08:32:43
Откуда: Астрахань
Контактная информация:

Сообщение Ichthyander »

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

Спасибо за рекомендации, но это все не то, что мне хотелось бы. Я могу конечно и базу данных для этого массива подключить и шифрование данных сделать, но это все усложнит код. Если ничего такого нет, о чем я говорил в начале тема, то более целесообразным вижу все-таки оставить как есть. Присвоение значений этому массиву непосредственно в исходном коде файла .pas
azsx
энтузиаст
Сообщения: 959
Зарегистрирован: 16.11.2015 05:38:32

Сообщение azsx »

1. вынести подгрузку данных в отдельный pas файл;
2. написать простой макрос конвертор в екселе, который формирует ваш pas файл целиком.
В итоге данные будете править в екселе, а потом просто макросом формировать новый файл.
зы
но я солидарен, как раз именно так вы храните данные в открытом виде.
Аватара пользователя
Ichthyander
энтузиаст
Сообщения: 701
Зарегистрирован: 04.04.2007 08:32:43
Откуда: Астрахань
Контактная информация:

Сообщение Ichthyander »

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

Кстати, именно в этом направлении я и думал. Просто рассчитывал на готовые инструменты для этого. В свое время очень был рад открытию возможностей по локализации программы с помощью средств Lazarus с файлами *.po :)
но я солидарен, как раз именно так вы храните данные в открытом виде.
Ну, как бы хранение данных непосредственно в в exe-шнике непонятном для стороннего формате и не в виде ресурса отсекает некоторое число любопытных, которые будут тырить эти данные для своих скриптов или программ. С другой стороны это не так уж секретно, чтобы шифровать эти данные да еще и внутри программы
resident
энтузиаст
Сообщения: 605
Зарегистрирован: 13.03.2013 16:58:51

Сообщение resident »

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

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

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

А если так, правда придется написать одну строку кода:
1) Включить любой текстовый файл

Код: Выделить всё

{$INCLUDE YourFileName.inc}

2) Создать файл можно в табличном редакторе, сохранив как текстовый. Между колонок с данными будут колонки с хламом типа

Код: Выделить всё

(FirstStringField: '
,

Код: Выделить всё

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

http://wiki.freepascal.org/Lazarus_IDE_ ... lude_Files
Аватара пользователя
Ichthyander
энтузиаст
Сообщения: 701
Зарегистрирован: 04.04.2007 08:32:43
Откуда: Астрахань
Контактная информация:

Сообщение Ichthyander »

resident писал(а):
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

Сообщение resident »

Кстати, в новом EmEditor-е обнаружил удобное редактирование CSV файлов в виде таблицы.
Качать, как всегда, на руборде :mrgreen:
Аватара пользователя
bormant
постоялец
Сообщения: 408
Зарегистрирован: 21.03.2012 11:26:01

Сообщение bormant »

В бесплатном варианте EmEditor-а этой функциональности нет?
sign
энтузиаст
Сообщения: 1131
Зарегистрирован: 30.08.2009 09:20:53

Сообщение sign »

Данные в базу.
В программу морду для редактирования данных.
resident
энтузиаст
Сообщения: 605
Зарегистрирован: 13.03.2013 16:58:51

Сообщение resident »

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

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

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

Сообщение sign »

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

Если нужно непременно хранить данные в программе, то чем плох файл ресурсов?
Данные легко редактируются, встраиваются в exe`шник.
resident
энтузиаст
Сообщения: 605
Зарегистрирован: 13.03.2013 16:58:51

Сообщение resident »

Ok
Аватара пользователя
Ichthyander
энтузиаст
Сообщения: 701
Зарегистрирован: 04.04.2007 08:32:43
Откуда: Астрахань
Контактная информация:

Сообщение Ichthyander »

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

А как можно использовать файл ресурсов для хранения табличных данных? Честно говоря особо никогда не углублялся в тему файлов ресурсов, думал только для медиаданных используется
Аватара пользователя
Лекс Айрин
долгожитель
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград
Контактная информация:

Сообщение Лекс Айрин »

Ichthyander, например, как бинарный массив. Заливаешь в память единым куском и кидаешь на нее типизированную ссылку. Только в этом случае надо аккуратно работать -- чуть что не так и программа свалится.
Ответить