2009-07-07 8 views
0

基本的には、自分のプログラムがプログラムで使用するためにハードドライブディスクからさまざまな変数を取得するようにしたいと考えています。私は、詳細を尋ねる前に、それが可能であることを確認する必要があります。それは...ですか?変数を永続データに変換するにはどうすればよいですか?

もしそうなら、どのような方法が最適ですか?私は.iniファイルの使用を見たことがありますが、特に.iniファイルからデータを取得する方法はわかりません。変数が常にx行にあることを確認するために混乱したテキストファイルと同じですか?たとえば、

ifstream variables("variables.ini"); 

//some code later 
//assume line 'x' holds a variable 

if(variables.good()) 
{ 
    variables.get(x); 
} 

//or whatever =/ 

私はここで何をするのか迷っています。

編集:私の選択する言語はC++です。

答えて

1

最初に質問する必要があるのは、whoとwhyです。 のあなたのオプションはそれらの方法に従います。

誰に(または何のために)データにアクセスしますか?それが単なるプログラムであれば、バイナリファイル、XML、データベース、iniファイルなど何でも好きなようにデータを保存できます。しかし、実行前にデータを変更できるようにユーザーが簡単にアクセスできる必要がある場合は、簡単に編集できるiniのようなテキストファイルが理にかなっています。他の形式で保存されたデータを編集するには、保存されたパラメータを操作するために全く別のプログラムを作成する必要があります。たぶんそれはあなたの状況に合っているかもしれませんが、多分それはより多くの仕事になります。

あなたがiniルートに行くことを選択した場合、あなたは正しいトラックにいます。それらは単なるテキストファイルです。一般的な書式は、セクション(通常は角カッコで囲んだもの)と、セクション内のキーと値のペアです。通常、コメント行はセミコロンで始まります。セミコロンは、設定間で前後に移動したいユーザーのための素敵なタッチです。

したがって、このような何か:

[System] 
    datapath = /home/me/data 

[Application] 
    start_count = 12 
; start_count = 20 //this is a comment 

あなたはあなたのデータのための特定の行を心配する必要はありません。ファイルを1行ずつ読むだけです。空行またはコメント行が投げられます。あなたはあなたがいるセクションをメモし、キーと値のペアを処理します。

解析されたファイルをプログラムに格納する方法はたくさんあります。単純なものは、セクション名とキーをマップのキーに連結することです。キー/値のペアの値はマップのデータになります。

"Systemdatapath"は1つのマップキーで、値は "/ home/me/data"です。あなたのプログラムが値を使用する必要があるときには、キーでそれを探します。

これは基本的なことです。最終的にはそれを飾ることになります。たとえば、型で値を取得するメソッド。例えば。 getString()、getInteger()、getFloat()など

+0

偉大な、まさに私が知る必要があった。私は単純なことのためだけに.iniでそれを保持すると思います。私はちょうど私が自分のやり方でそれを解析し、自分の方法でアクセスしている限り、条約があるかどうかは問題ではないと確信していました。 +1と選択された回答 – jkeys

0

アプリケーションの.iniファイルの形式を決定します。私は通常、XMLを使って作業します。なぜなら、あなたはスコープで情報を編成することができ、XMLツリーからの情報の格納と取り出しを扱うためのライブラリが既にたくさんあるからです。

編集:C++のために - http://xerces.apache.org/xerces-c/

0

あなたが頻繁にファイルから値を引っ張っすることになるだろう、とあなたが更新する必要がある場合は特に(持続)している場合、これらの値は、データベースは素晴らしい選択肢です。また、データセットが大きくなるにつれてパフォーマンスが向上します。

関連する問題