2010-03-20 24 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_,這是它的目的。至於代碼,使用TVulnerabilityData_的_array [TVulnerability],不要搞亂Low和High。 – 2010-03-20 11:31:37

+0

感謝Paul-Jan爲陣列構思。我也認爲使用常量是最靈活的想法,因爲如果需要的話,將來可以很容易地進行本地化。 – smartins 2010-03-20 11:59:01

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" 

正如我在讀這在我掃描了^它告訴代碼,以使該條目中的頂級項目。我還使用「+ Item」創建子組,並使用「-Item」返回到前一組。

由於您完全指定了可以稍後添加電源的格式。例如,如果您使用上述系統對菜單進行編碼,您可能會首先決定使用每個項目的第一個字母作爲加速鍵。後來你發現文件/關閉與另一個「C」項衝突,你可以改變協議以允許「關閉* e」指定E應該是加速器。你甚至可以用不同的字符包含ctrl-x。 (如果你這樣做的速記數據輸入技巧,用註釋文檔記錄它!)

不要害怕寫這樣的小工具,從長遠來看,他們會幫助你很大,我可以把解析器像這樣,並且將值複製/粘貼到我的代碼中的速度比您可以根據您的示例更快地創建文本文件。

1

不是一個答案,但可能是一個線索:設計時控件可以有圖像和其他二進制數據與它關聯,爲什麼不把數據寫入資源文件並從那裏讀取?迭代當然,使其更簡單,可擴展和更優雅