2010-03-20 2 views
2

У меня есть набор данных, которые мне нужно хранить во время разработки, чтобы конструировать содержимое группы компонентов во время выполнения.Лучший способ хранения «массива записей» во время разработки

Что-то вроде этого:

type 
    TVulnerabilityData = record 
    Vulnerability: TVulnerability; 
    Name: string; 
    Description: string; 
    ErrorMessage: string; 
    end; 

Какой самый лучший способ хранения этих данных во время разработки для последующего извлечения во время выполнения? У меня будет около 20 записей, для которых я знаю все содержимое каждой «записи», но я застрял в том, что является лучшим способом хранения данных.

только пол-элегантная идея, которую я придумал это «построить» каждую запись по инициализации аппарата, как это:

var 
    VulnerabilityData: array[Low(TVulnerability)..High(TVulnerability)] of TVulnerabilityData; 

.... 

initialization 
    VulnerabilityData[0].Vulnerability := vVulnerability1; 
    VulnerabilityData[0].Name := 'Name of Vulnerability1'; 
    VulnerabilityData[0].Description := 'Description of Vulnerability1'; 
    VulnerabilityData[0].ErrorMessage := 'Error Message of Vulnerability1'; 

    VulnerabilityData[1]...... 
    ..... 
    VulnerabilityData[20]...... 

Есть ли лучше и/или более элегантное решение, чем это?

Спасибо за чтение и за любые идеи, которые вы могли бы предоставить.

ответ

8

Вы также можете объявить массив в качестве consts и инициализировать его ...

const 
    VulnerabilityData: array[Low(TVulnerability)..High(TVulnerability)] of TVulnerabilityData = 
( 
    (Vulnerability : vVulnerability1; Name : Name1; Description : Description1; ErrorMessage : ErrorMessage1), 
    (Vulnerability : vVulnerability2; Name : Name2; Description : Description2; ErrorMessage : ErrorMessage2), 
[...] 
    (Vulnerability : vVulnerabilityX; Name : NameX; Description : DescriptionX; ErrorMessage : ErrorMessageX) 
    ) 
); 

не имеет IDE на этом компьютере для двойной проверки синтаксиса ... может быть запятой или два отсутствует , Но вот как вы должны это делать, я думаю.

+3

Это единственный простой ответ на вопрос, который был опубликован до сих пор: используйте _const_, для чего он создан. Что касается кода, используйте _array [TVulnerability] для TVulnerabilityData_, без каких-либо проблем с Low и High. –

+0

Спасибо Пол-Ян за идею массива. Я также думаю, что использование констант было бы самой гибкой идеей, поскольку в будущем это будет легко локализовать, если есть необходимость. – smartins

0

Типичным способом будет файл, либо стиль свойства (a = b \ n в каждой строке) cdf, xml, yaml (предпочтительно, если у вас есть синтаксический анализатор для него), либо база данных.

Если вы должны указать его в коде, как в вашем примере, вы должны начать с того, чтобы поместить его в то, что вы можете проанализировать в простой формат, а затем перебрать по нему. Так, например, в Java я бы создать экземпляр массива:

String[] vals=new String[]{ 
    "Name of Vulnerability1", "Description of Vulnerability1", "Error Message of Vulnerability1", 
    "Name of Vulnerability2", ... 
} 

Это помещает все данные в одно место, и цикл, который читает его можно легко изменить, чтобы прочитать его из файла.

Я использую этот шаблон все время для создания меню и для другой инициализации с интенсивной интенсивностью.

Не забывайте, что вы тоже можете бросить какую-то логику! Например, с меню я иногда создавать их, используя данные, как это:

"^File", "Open", "Close", "^Edit", "Copy", "Paste" 

Как я читаю это в I отсканировать для ^, который указывает код, чтобы сделать эту запись элемент верхнего уровня. Я также использую «+ Item» для создания подгруппы и «-Item», чтобы вернуться к предыдущей группе.

Поскольку вы полностью указываете формат, вы можете добавить мощность позже. Например, если вы закодировали меню, используя указанную выше систему, сначала вы можете решить, что вы можете использовать первую букву каждого элемента в качестве ключа ускорителя. Позже вы обнаружите, что File/Close конфликтует с другим элементом «C», вы можете просто изменить протокол, чтобы позволить «Close * e» указать, что E должен быть ускорителем. Вы даже можете включить ctrl-x с другим символом. (Если вы делаете короткие трюки ввода данных, как это, документируйте это с комментариями!)

Не бойтесь писать маленькие инструменты, подобные этому, в конечном итоге они вам очень помогут, и я могу получить парсер например, и скопировать/вставить значения в мой код быстрее, чем вы можете форматировать текстовый файл в соответствии с вашим примером.

1

не является ответом, но может быть ключом: элементы управления временем могут иметь изображения и другие связанные с ним двоичные данные, почему бы не записать ваши данные в файл ресурсов и прочитать оттуда? итерации, конечно, чтобы сделать его более простым, расширяемым и более элегантным.

Смежные вопросы