C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[10]: パラメータとINIファイル


(過去ログ 35 を表示中)

[トピック内 20 記事 (1 - 20 表示)]  << 0 >>

■17872 / inTopicNo.1)  パラメータとINIファイル
  
□投稿者/ tanaka (18回)-(2008/05/02(Fri) 19:31:56)

分類:[C#] 

幾つかのパラメータをINIファイルから読み込み・書き込みさせる処理をさせてます。
今のやり方はパラメータの数分読み書きそれぞれにコードを追加している状態で今後パラメータが増えた場合や違う人が追加した時等で大変であり汎用性がないのでいろいろ検討していますが悩んでます。(INIファイル使用自体は変えたくない)

【例】
public struct Param1
{
    public static float a;
    public static int   b; 
}
public struct Param2
{
    public static string c;
    public static byte   d; 
}
            :
            :

// INIFILE                  :INIファイルのパス
// GetPrivateProfileString  :INIファイル読み込みDLL
// WritePrivateProfileString:INIファイル書き込みDLL

// INIファイル読み込み
public void ParameterRead()
{
  StringBuilder strBuilder = new StringBuilder(255);
    GetPrivateProfileString("PARAMETER", "KEY1", "default", strBuilder, (uint)strBuilder.Capacity, INIFILE);
    Param1.a = float.Parse(strBuilder.ToString());
    GetPrivateProfileString("PARAMETER", "KEY2", "default", strBuilder, (uint)strBuilder.Capacity, INIFILE);
    Param1.b = int.Parse(strBuilder.ToString());
  StringBuilder strBuilder = new StringBuilder(255);
    GetPrivateProfileString("PARAMETER", "KEY3", "default", strBuilder, (uint)strBuilder.Capacity, INIFILE);
    Param2.c = strBuilder.ToString();
    GetPrivateProfileString("PARAMETER", "KEY4", "default", strBuilder, (uint)strBuilder.Capacity, INIFILE);
    Param2.d = byte.Parse(strBuilder.ToString());
            :
            :
}

// INIファイル書き込み
pubulic void ParameterWrite()
{
    WritePrivateProfileString("PARAMETER", "KEY1", "" + Param1.a, INIFILE);
    WritePrivateProfileString("PARAMETER", "KEY2", "" + Param1.b, INIFILE);
    WritePrivateProfileString("PARAMETER", "KEY3", "" + Param2.c, INIFILE);
    WritePrivateProfileString("PARAMETER", "KEY4", "" + Param3.d, INIFILE);
            :
            :
}

引用返信 編集キー/
■17875 / inTopicNo.2)  Re[1]: パラメータとINIファイル
□投稿者/ 魔界の仮面弁士 (714回)-(2008/05/02(Fri) 20:26:32)
No17872 (tanaka さん) に返信
> 今のやり方はパラメータの数分読み書きそれぞれにコードを追加している状態で
> 今後パラメータが増えた場合や違う人が追加した時等で大変であり汎用性がないので

この場合の「パラメータ」というのは、構造体メンバの意味でしょうか?

(案1) DataTable の Columns のように、メンバをコレクションとして保持する形式にする。
(案2) リフレクションでメンバを列挙して処理すように実装する。
引用返信 編集キー/
■17876 / inTopicNo.3)  Re[2]: パラメータとINIファイル
□投稿者/ Azulean (94回)-(2008/05/02(Fri) 21:29:51)
>今後パラメータが増えた場合や違う人が追加した時等で大変であり汎用性がないので
構造体の中に構造体を持たせる、保存したくないメンバーが出てくる等を考えると、本当の意味で汎用的なものは難しいかと思います。

ところでINIにこだわる理由があるのでしょうか?
(.NETではシリアライズという仕組みがあるのに対して使わない理由が何かあるのかなと考えたものです)
引用返信 編集キー/
■17878 / inTopicNo.4)  Re[3]: パラメータとINIファイル
□投稿者/ tanaka (19回)-(2008/05/02(Fri) 22:11:18)
>この場合の「パラメータ」というのは、構造体メンバの意味でしょうか?
その通りです。
現状は、public staticにしていますので、各classではparam1.aと直に参照させるようにしています。

>(案1) DataTable の Columns のように、メンバをコレクションとして保持する形式にする。
>(案2) リフレクションでメンバを列挙して処理すように実装する。
各classで直にparam1.aのようにアクセスさせることでわかりやすいとおもい今のようにしているのですが
上記の案でも問題なくできるのでしょうか。

> ところでINIにこだわる理由があるのでしょうか?
特にこだわっていたわけではないのですが設定ファイル=INIファイルのイメージがあった為使用しました。

> (.NETではシリアライズという仕組みがあるのに対して使わない理由が何かあるのかなと考えたものです)
シリアライズの存在を知りませんでした。これからいろいろ調べてみようと思いますがもしよろしければ使用例とか
教えていただけますと助かります。
引用返信 編集キー/
■17879 / inTopicNo.5)  Re[4]: パラメータとINIファイル
□投稿者/ tanaka (20回)-(2008/05/02(Fri) 22:16:52)
>構造体の中に構造体を持たせる
c#で構造体の中に構造体定義した場合メンバーにアクセス出来ないと思ったのですが
当方の勘違いなのでしょうか
引用返信 編集キー/
■17881 / inTopicNo.6)  Re[4]: パラメータとINIファイル
□投稿者/ 渋木宏明(ひどり) (738回)-(2008/05/02(Fri) 22:26:11)
渋木宏明(ひどり) さんの Web サイト
>>ところでINIにこだわる理由があるのでしょうか?
> 特にこだわっていたわけではないのですが設定ファイル=INIファイルのイメージがあった為使用しました。

.NET には標準で「、設定ファイル」用の枠組みとして .config が用意されています。

>>(.NETではシリアライズという仕組みがあるのに対して使わない理由が何かあるのかなと考えたものです)
> シリアライズの存在を知りませんでした。これからいろいろ調べてみようと思いますがもしよろしければ使用例とか
> 教えていただけますと助かります。

シリアライズは「オブジェクトインスタンスの状態を保存・復帰するモノ」です。
「設定」を格納するのにも使えますが、保存された「設定」をテキストエディタで編集したような場合にはあまり適していません。

逆に、「設定」の手編集を考えていないなら、シリアライズを使えば

> 現状は、public staticにしていますので、各classではparam1.aと直に参照させるようにしています。

みたいなことも容易に実現できます。

引用返信 編集キー/
■17884 / inTopicNo.7)  Re[5]: パラメータとINIファイル
□投稿者/ tanaka (22回)-(2008/05/02(Fri) 23:09:24)
No17881 (渋木宏明(ひどり) さん) に返信
> シリアライズは「オブジェクトインスタンスの状態を保存・復帰するモノ」です。
> 「設定」を格納するのにも使えますが、保存された「設定」をテキストエディタで編集したような場合にはあまり適していません。
>
最終的には設定画面を用意してパラメータを編集させたいと考えていますが、最初のうちはテキストエディタ等で編集する形に
なると思います。
やはりシリアライズを使用したやり方が一般的なのでしょうか。(仕様等にもよるのかもしれませんが)
INIファイルも標準ではサポートされていませんし。XMLの方がいいのでしょうか。
引用返信 編集キー/
■17885 / inTopicNo.8)  Re[5]: パラメータとINIファイル
□投稿者/ Azulean (95回)-(2008/05/02(Fri) 23:12:02)
No17879 (tanaka さん) に返信
> >構造体の中に構造体を持たせる
> c#で構造体の中に構造体定義した場合メンバーにアクセス出来ないと思ったのですが
> 当方の勘違いなのでしょうか
恐らく、次のようなことだと解釈しました。

public struct A
{
struct B
{
public int value;
}
B member;
}

この場合、struct Bと、memberにpublicをつける必要があります。


※当初の発言の意図しては次のようなものを考えていました。
構造体の中に構造体のメンバーがいると、リフレクションで追うのが大変かなと思っての発言です。

public struct B
{
public int value;
}

public struct A
{
public B member;
}


なお、既に出ていますが、シリアライズはオブジェクトの状態の保存するものですので、staticな変数には通じません。
変数がstaticである必要がある場合はシリアライズでは問題が出てきますのでご注意下さい。
(当初の発言はstaticメンバー変数であることに意識が向いていませんでした。すみません)
引用返信 編集キー/
■17886 / inTopicNo.9)  Re[6]: パラメータとINIファイル
□投稿者/ Azulean (96回)-(2008/05/02(Fri) 23:19:48)
config(設定)の機能で出力されるファイルのイメージややり方はどぼんさんのサイトにあります。
Visual Studioというより、.NET Frameworkのバージョンによってはできませんが…。

http://dobon.net/vb/dotnet/programing/mysettings.html
引用返信 編集キー/
■17887 / inTopicNo.10)  Re[6]: パラメータとINIファイル
□投稿者/ 渋木宏明(ひどり) (739回)-(2008/05/03(Sat) 00:11:47)
渋木宏明(ひどり) さんの Web サイト
> 最終的には設定画面を用意してパラメータを編集させたいと考えていますが、最初のうちはテキストエディタ等で編集する形に
> なると思います。
> やはりシリアライズを使用したやり方が一般的なのでしょうか。(仕様等にもよるのかもしれませんが)

僕自身は「設定」の格納にはシリアライズを使いません。
理由は、開発期間中などに「設定」を手編集したいからです。

シリアライズでも XML シリアライズを使えばテキストエディタによる編集は可能ですが、僕にはそれが「扱いやすい」とは感じられません。

> INIファイルも標準ではサポートされていませんし。XMLの方がいいのでしょうか。

僕は XML を使用しています。
DOM や LINQ to XML を使えば、いちいち「設定を格納するためだけのクラス」を作らないで済んでしまう場合も多いです。

.NET で標準サポートのない .INI を使用することに関しては、まったく利点をみいだせません。

引用返信 編集キー/
■17889 / inTopicNo.11)  Re[6]: パラメータとINIファイル
□投稿者/ 倉田 有大 (213回)-(2008/05/03(Sat) 03:48:41)
> やはりシリアライズを使用したやり方が一般的なのでしょうか。(仕様等にもよるのかもしれませんが)
> INIファイルも標準ではサポートされていませんし。XMLの方がいいのでしょうか。

設定の保存だけなら、シリアライズがむちゃくちゃ楽です。
テキストエディターで設定を変更したいというのであればiniファイルですね。
引用返信 編集キー/
■17891 / inTopicNo.12)  Re[7]: パラメータとINIファイル
□投稿者/ Azulean (97回)-(2008/05/03(Sat) 06:04:44)
> テキストエディターで設定を変更したいというのであればiniファイルですね。
XMLも十分エディタで修正できるものですし、INIを推すには当初の問題が残ります。(パラメータ追加でコードのメンテが残るという意味で)

INIはかつてよく使いましたが、今後は使用頻度は低くなっていく方向にあると思います。
(アプリのデザインガイドみたいなものでは否定的なんでしたっけ?)

参考
http://msdn.microsoft.com/en-us/library/ms724353.aspx
>Note This function is provided only for compatibility with 16-bit Windows-based applications. Applications should store initialization information in the registry.

引用返信 編集キー/
■17894 / inTopicNo.13)  Re[8]: パラメータとINIファイル
□投稿者/ 渋木宏明(ひどり) (740回)-(2008/05/03(Sat) 08:56:46)
渋木宏明(ひどり) さんの Web サイト
>テキストエディターで設定を変更したいというのであればiniファイルですね。

旧版との互換とかの要件があるならともかく、DllImport したり、読み書き用のクラスを自作してまで .ini を使う意義ってあるのかな?

階層型のデータや項目数可変のデータを扱うのが面倒なので、僕は MSXML が使えるようなった時点で見切りました>.ini

シリアライズデータを手でいじるのはぞっとしませんが、それらしいスキーマを決めとけば、テキストエディタでの修正もそれほど苦役ではありません>xml

何より、読み/書きのコードを自分で書かなくていいところがステキ>xml

引用返信 編集キー/
■17910 / inTopicNo.14)  Re[9]: パラメータとINIファイル
□投稿者/ tanaka (23回)-(2008/05/03(Sat) 15:04:40)
皆様方たくさんのご意見ありがとうございます。いろいろと参考になります。

シリアライズだと名前の部分がパラメータ変数になると思うのですが、
(パラメータというよりはアプリ自体の処理用設定値という感じで違和感あり)
そうなると何のパラメータなのかが分かり難い感じがするので構造体を使用し
param1.aと今までと同じように直に参照等をさせたいと思います。

そこでXMLを使用したやり方を検証してみたいと思うのですが渋木宏明(ひどり) 様が書かれた
DOM や LINQ to XMLについてどのようなものか簡単でかまいませんのでご説明
頂ければと思うのですが。
引用返信 編集キー/
■17913 / inTopicNo.15)  Re[10]: パラメータとINIファイル
□投稿者/ 渋木宏明(ひどり) (741回)-(2008/05/03(Sat) 16:01:44)
渋木宏明(ひどり) さんの Web サイト
> そこでXMLを使用したやり方を検証してみたいと思うのですが渋木宏明(ひどり) 様が書かれた
> DOM や LINQ to XMLについてどのようなものか簡単でかまいませんのでご説明
> 頂ければと思うのですが。

ヘルプじゃダメなんですか?

引用返信 編集キー/
■17916 / inTopicNo.16)  Re[11]: パラメータとINIファイル
□投稿者/ tanaka (26回)-(2008/05/03(Sat) 18:02:33)
No17913 (渋木宏明(ひどり) さん) に返信
> ヘルプじゃダメなんですか?
ヘルプではヒットしなかったのでネット検索してサイトを探している状態です。

引用返信 編集キー/
■17922 / inTopicNo.17)  Re[12]: パラメータとINIファイル
□投稿者/ 渋木宏明(ひどり) (742回)-(2008/05/04(Sun) 01:02:21)
渋木宏明(ひどり) さんの Web サイト
> ヘルプではヒットしなかったのでネット検索してサイトを探している状態です。

下記他、ふんだんに情報は収録されています。

XML ドキュメントと XML データ
ms-help://MS.VSCC.v90/MS.MSDNQTR.v90.ja/dv_radcon/html/f3f63195-82c6-48e8-a4a0-612810e7d093.htm

引用返信 編集キー/
■17923 / inTopicNo.18)  Re[13]: パラメータとINIファイル
□投稿者/ Azulean (98回)-(2008/05/04(Sun) 01:09:32)
2008/05/04(Sun) 01:12:47 編集(投稿者)

ここまで一度も書かれていませんが、LINQを使うならVisual Studio 2008である必要があります。
Visual Studio 2005では使えませんのでご注意を。

※VS2005でLINQは使えませんが、XMLを扱う手段は他にあります。

追記
VS2008であっても、ターゲットが.NET 2.0/.NET 3.0の場合は使えないと考えるべきです。
引用返信 編集キー/
■17925 / inTopicNo.19)  Re[9]: パラメータとINIファイル
□投稿者/ 倉田 有大 (215回)-(2008/05/04(Sun) 03:18:05)
> 何より、読み/書きのコードを自分で書かなくていいところがステキ>xml

素敵ですね。プロパティーやフィールド加えるだけで、勝手にシリアライズ、デシリアライズ・・はー、らくー
その割には、あまり普及してないような。iniファイルて、まだまだよく使われていますね。
LINQってはじめて聞きました、今度、ぐぐろう。
引用返信 編集キー/
■17935 / inTopicNo.20)  Re[10]: パラメータとINIファイル
 
□投稿者/ tanaka (30回)-(2008/05/04(Sun) 15:18:11)
皆様ご意見ありがとうございました。
いろいろ試してより適している方法でやりたいと思います。

ちなみに当方環境は2005を使用しています。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -