C#では iniファイルの読み出し用のプロパティが設けられているが、
キーと値が1対1でなければならず、値が複数の場合には登録できない。
そこで、例えば、以下のような音楽ファイルの存在するフォルダを複数登録することはむつかしい。
abcd=1
abcd=2
abcd=3
abc
#音楽フォルダ
/abc/abc
/abc
/abc
このような場合、#以下をキー1、”=”の前をキー2、”=”の後をバリューなどにして、クラスの配列にする。
Cでいう構造体(データのセット)を配列化するようなイメージである。2次元配列でも構わない。
クラスは以下のようなものを考える。
{
public string keyandvalue0 {set;get;}
public string keyandvalue1 {set;get;}
public string keyandvalue2 {set;get;}
}
これはデータセットの設計図で、これを具体的にメモリに領域確保するには、
で、インスタンス化(具体化、製品化)する。newを用いて、いくらでも新しい領域確保ができる。
ここで、「3」は配列の要素数で、配列ではあらかじめ要素数を定める必要がある。
例えば、2番目の#の要素の音楽フォルダを取り出すには、ini_struct[1].keyandvalue1として、
クラスの要素を取り出す。
iniファイルを読み出し、データセットを格納するには、#が存在する行をとらえて、新しいkeyandvalue0 を設定し、
=が存在する場合には、”=”より前を、keyandvalue1に登録する。
とする。
=が存在しない場合には、以下のようにする。
また、”=”より後を、keyandvalue2に登録する。
もっとも、配列の大きさがわからないときは、Listを使う。
上記のデータセットを、複数組み合わせたリストを作成する。
List
として、領域確保。上記と同様にして、
という風に順繰り文字列を登録していく。
#以下のキーに応じたデータセットの集合を取り出すのは、LinQを使わなくても、FindAllを使えば足りる。
ここで、sは、リストの抽出に使うラムダ式のようであるが、とりあえずこれだけを覚えておけば、データセットから必要なものを選択して取り出せる。
例えば、実装するなら、以下のプログラム。
{
public string key_and_value0 { get; set; }
public string key_and_value1 { get; set; }
public string key_and_value2 { get; set; }
public static List
{
List
return selected_data;
}
}
この関数はクラスのリストを返す。
linqをネット検索をすると、数字の抽出のみを紹介するサイトが多くて困った。
データの情報はほとんどが文字列だから、上記の関数を使えば足りる。
分からなくて、本を買ってしまったが、これだけでほとんど事足りる。