我覺得你真的有兩個問題,所以我會盡力單獨回答。
的第一個問題是「我怎樣才能解析看起來像這樣一個文件...
DIRT: 3;
STONE: 6;
爲名稱和整數?」您可以從每行刪除所有空白和分號,然後拆分冒號。一個清潔的方式,在我看來,是使用正則表達式:
// load your file
var fileLines = new[]
{
"DIRT: 3;",
"STONE: 6;"
};
// This regular expression will match anything that
// begins with some letters, then has a colon followed
// by optional whitespace ending in a number and a semicolon.
var regex = new Regex(@"(\w+):\s*([0-9])+;", RegexOptions.Compiled);
foreach (var line in fileLines)
{
// Puts the tokens into an array.
// The zeroth token will be the entire matching string.
// Further tokens will be the contents of the parentheses in the expression.
var tokens = regex.Match(line).Groups;
// This is the name from the line, i.e "DIRT" or "STONE"
var name = tokens[1].Value;
// This is the numerical value from the same line.
var value = int.Parse(tokens[2].Value);
}
如果你不熟悉正則表達式,我建議你檢查出來;他們可以很容易地格式化字符串並提取值。 http://regexone.com/
第二個問題,「我如何將價值與名稱一起存儲?」,我不確定自己完全理解。如果你想要做的是用文件中指定的數值返回每個項目,那麼的建議對你有好處。您需要將名稱作爲顯示成員,值作爲值成員。但是,由於您的數據不在表格中,因此您必須將數據放置在可訪問的位置,以便您可以對要使用的屬性進行命名。我推薦一本字典:
// This is your ComboBox.
var comboBox = new ComboBox();
// load your file
var fileLines = new[]
{
"DIRT: 3;",
"STONE: 6;"
};
// This regular expression will match anything that
// begins with some letters, then has a colon followed
// by optional whitespace ending in a number and a semicolon.
var regex = new Regex(@"(\w+):\s*([0-9])+;", RegexOptions.Compiled);
// This does the same as the foreach loop did, but it puts the results into a dictionary.
var dictionary = fileLines.Select(line => regex.Match(line).Groups)
.ToDictionary(tokens => tokens[1].Value, tokens => int.Parse(tokens[2].Value));
// When you enumerate a dictionary, you get the entries as KeyValuePair objects.
foreach (var kvp in dictionary) comboBox.Items.Add(kvp);
// DisplayMember and ValueMember need to be set to
// the names of usable properties on the item type.
// KeyValue pair has "Key" and "Value" properties.
comboBox.DisplayMember = "Key";
comboBox.ValueMember = "Value";
在這個版本中,我用Linq來構造字典。如果您不喜歡Linq語法,則可以使用循環代替:
var dictionary = new Dictionary<string, int>();
foreach (var line in fileLines)
{
var tokens = regex.Match(line).Groups;
dictionary.Add(tokens[1].Value, int.Parse(tokens[2].Value));
}
嘗試創建一個類來保存該信息。拆分逗號是沒有意義的,因爲在您的示例數據中,您沒有顯示任何逗號。你的意思是:冒號? – LarsTech
'ComboBox'有兩個屬性可以使用。一個是「ValueMember」,另一個是「DisplayMember」。例如,你可以將你的數據庫文件讀入一個包含兩列,'element'和'value'等的表格。然後將'ValueMember'設置爲'value'並將'DisplayMember'設置爲'element'。當然,您還必須確保將「ComboBox」的數據源設置爲包含您的數據的表格。 –
@LarsTech在我之前的DB文件中,我有逗號,那就是爲什麼它仍然存在。對於新的,我必須使用分號。這讓我想到了一個想法:如果我在雙點上有線問題,我還能讀出線的其餘部分嗎? – devRicher