No.5ベストアンサー
- 回答日時:
★キーの『値』だけを取得して配列に取得したいのですね。
・szBuff バッファ領域の文字列から=文字を検索して配列に格納すればよい。
ちなみに配列には文字列でセットしますか?
それとも整数値に変換した値をセットしますか?
どっち。
・とりあえず、下にサンプルを載せておくので使い分けて下さい。
サンプル:
TCHAR szBuff[ 32768 ];
LPTSTR lpSeek;
LPTSTR lpFind;
LPTSTR *s[ 100 ]; ←文字列として格納
INT n[ 100 ]; ←整数として格納
INT i = 0; ←カウンタ
GetPrivateProfileSection( TEXT("セクション名"), szBuff, sizeof(szBuff), TEXT("INIファイル名") );
for ( lpSeek = szBuff ; *lpSeek != '\0' ; lpSeek++ ){
if ( (lpFind = strchr(lpSeek,'=')) != NULL ){ ←=文字を検索
s[ i ] = lpFind + 1;
n[ i ] = atol( lpFind + 1 );
i++;
}
while ( *lpSeek != '\0' ){ ←次のキーデータに移動するための処理
lpSeek++;
}
}
printf( "max=%d\n", i ); ←i カウンタがそのままキーデータの個数になる。
解説:
・前回のサンプルに文字列や整数値を配列にセットする部分を追加しただけ。
lpSeek に1つ1つのキーデータの文字列になるので、=文字を strchr 関数で
検索して=文字の次の1文字目がデータ(値)になります。
・あとは文字列の配列(s)や、整数の配列(n)にセットしているだけです。
配列の要素数は 100 個にしています。セクション内にいくつのキーデータがあるか
不明ですので多めに宣言しておくか、最初に個数をカウントしてから malloc 関数で
確保してからセットして下さい。
最後に:
・ここは 2チャンネルのような掲示板ではありませんよ。
質問、補足、お礼などの文章をもう少し『品』がある文章にすると読みやすくなります。
ここの辺も気をつけて下さい。
・以上。今後の参考に!
回答ありがとうございます。
書き方注意させてしまってすいません。
なんだか少しでも楽しくと考えて今回はOKWaveに挑んでみました。
いるでしょ?回答がすっごく嫌味を含んでる人とか。
「こんなこともわからないんですか?」とか
「意味ないこと書かないでください」なんてこと。
ああいうの見てると、胸がムカムカしてきて
どこに怒ればいいのか矛先を見失い、
イカレ踊り狂うことになっちゃうんですよ。
そんなの嫌だから、楽しくやろう!って決めたんです。
いろんな人たちが集まる場だから礼儀を守ってって
よく分かるんですけど、それ無視してる奴は
ほっとけばいいじゃんって暗黙のルールみたいに
今の現状ではそうなっちゃってる。
そっちの方が絶対おかしい!って憤慨ですよ。まったく。
レフリー制度だけじゃ甘いですよ。
ってここで怒ってもしょうがないですから、
それ専用の掲示板作ってください。
俺みたいな無能には100年かかっても無理ですから。
人助けを心からしてくださる人たちにはとても感謝してます。
今回の質問は一度打ち切ろうとおもいます。
分からないことまだあるけど、長くなると迷惑ですからね。
それじゃまた。
すぐ会うことになると思いますけど(笑)その日まで。
No.6
- 回答日時:
★お礼への補足
>今回の質問は一度打ち切ろうとおもいます。
>分からないことまだあるけど、長くなると迷惑ですからね。
打ち切る必要はないですよ。
長くなっても一通りの解決するまではアドバイスなどを、できるかぎりしますが…。
・ただ、質問文の
>分かっちゃった!って人、おもいっきり教えてください。
>もんどりもっさりに教えてください。
↑の2行が気になったのです。
・確かにいろいろな人がいますがね。
本題:
・さてと本題のキーから値の取得方法は分かりましたか。重要なのはここですね。
サンプルをそのまま使っても、こそこそ使えますがエラーチェックや、データ数が
100 以上の場合は想定していませんので、適当に改良を付け加えて下さい。
・分からないことがあれば、またどうぞ。
・以上。
No.4
- 回答日時:
★アドバイス
・matsuhira さんは MSDN マニュアルを先に見てから質問をしてみたらどうですか。
前回の質問で GetPrivateProfileSectionNames() 関数を紹介したとき、MSDN のサイト
ですので、そこの検索システムを使えば見つかりますよ。
下の『参考URL』に MSDN のレジストリ関連を貼っておきます。ここを探せば INI ファイルの
キーと値を取得する API 関数が見つかります。そして、1度でよいので読んで下さい。
その上で使い方が分からない場合に質問を。
●本題
・キーと値を配列に格納したいようですが、どんな形式で格納したいのですか?
LPTSTR lpKeyData[ 10 ]; ←文字列ポインタへの配列(10個)
lpKeyData[ 0 ] ⇒ keyname1=string1
lpKeyData[ 1 ] ⇒ keyname2=string2
lpKeyData[ 2 ] ⇒ keyname3=string3
:
lpKeyData[ 9 ] ⇒ keyname9=string9
という形式ですか。
この場合は回答者 No.1、No.2 さんの方法で取得できます。
・あとすべてのキーと値を一度に取得する方法は回答者 No.3 さんが既に紹介されている方法で
取得できます。取得したバッファ領域の形式は、前回紹介した GetPrivateProfileSectionNames()
関数と同じです。つまり、複数の文字列を NULL 文字で区切り、最後に全体の最後を表す NULL
文字が1つ付けられます。
サンプル:
TCHAR szBuff[ 32768 ]; ←適当にサイズを決めておく
LPTSTR lpSeek;
GetPrivateProfileSection( TEXT("セクション名"), szBuff, sizeof(szBuff), TEXT("INIファイル名") );
for ( lpSeek = szBuff ; *lpSeek != '\0' ; lpSeek++ ){
printf( "%s\n", *lpSeek ); ←lpSeek が『キー』と『値』の文字列です。
while ( *lpSeek != '\0' ){ ←次のキーデータに移動するための処理
lpSeek++;
}
}
その他:
・上記のサンプルをコンソール・アプリケーションで作成すると、指定のセクション名のキーと値を
画面に出力します。それも順番に出力していきます。
サンプルのように GetPrivateProfileSection() API を利用すると1つずつを配列にセットしなくても
よくなります。一度に取得して lpSeek などで位置を移動すれば、すべてのキーを列挙できます。
・1つ1つの操作を行いたい場合は、GetPrivateProfileInt()、GetPrivateProfileString() の関数で
行う方が簡単です。特に整数値として値を取得したい場合は GetPrivateProfileInt() API 関数に
任せた方が楽です。それからエラーチェックはご自分でつけて下さい。
・以上。参考に。
参考URL:http://msdn.microsoft.com/library/ja/default.asp …
この回答への補足
回答ありがとうございます。
前回もお世話になってすいません。
MSDN見ました。理解できる部分10%ぐらいです。(はぁ~)
使い方はわかりましたけど、どうプログラムに生かすか・・・
そこですねぇ~。
サンプル見た感じですと、セクション内にあるキーと値をszBuffに
格納するということですね。
私のやりたいことは、ずばりその先にある!!!
取ってきたキーと値をは=でつながれているはずですから、
それをとっぱらってキーと値をそれぞれの配列に格納したいんですよ。
これが実際にやりたいことなんです!!!
伝わりますか?説明苦手でどうも・・・こう・・・。
何か分からないことあったらどんどん質問お願いします。
もっさりお願いします。。。
No.3
- 回答日時:
GetPrivateProfileSection を使えば
.ini ファイル(初期化ファイル)の、指定されたセクション内のすべてのキーと値を取得できます。
MSDNによると
関数から制御が返ると、このバッファに、指定したセクション内に存在するすべてのキー名と値のペアが格納されます。
キー名と値の間に等号(=)が挿入されます。各ペアの後に NULL が追加されます。
その結果、このバッファには、NULL で終わる文字列が 1 つまたは複数格納されます。
バッファの最後には、もう 1 つの NULL が追加されます。
なので、等号(=)とNULLによってバッファ内の文字列を分離しながら配列に入れていけば良さそうです。
No.2
- 回答日時:
>あの・・・配列に格納するやり方は知らないかなぁ?
数値なら
int hairetu[10];
hairetu[0] = GetPrivateProfileString(...);//キーワード1の分
hairetu[1] = GetPrivateProfileString(...);//キーワード2の分
hairetu[2] = GetPrivateProfileString(...);//キーワード3の分
では、ダメですか?
No.1
- 回答日時:
文字でとるなら、GetPrivateProfileString
数値でとるなら、GetPrivateProfileIntを
使用して下さい。
参考URL:http://msdn.microsoft.com/library/ja/default.asp …
この回答への補足
さっそくの回答、ありがとう!
そうだ!そうだ!って思い出したんだ、さっき。
あの・・・配列に格納するやり方は知らないかなぁ?
もし知ってたらお願いできないかぁ?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- C言語・C++・C# このプログラミング誰か教えてくれませんか 3 2022/05/13 17:27
- C言語・C++・C# このプログラミング誰か教えてくれませんか 2 2022/05/14 09:45
- Visual Basic(VBA) VBAコードを張り付け後のエクセルの進め方 2 2023/02/07 18:24
- Visual Basic(VBA) VBA GetAttrについて教えてください 2 2022/12/22 15:25
- Excel(エクセル) エクセルのマクロ作成について教えてください 5 2023/02/20 00:39
- Excel(エクセル) Excel同士のデータの突合 3 2023/08/07 16:34
- Ruby 初心者プログラミング 3 2022/10/12 11:31
- Visual Basic(VBA) 別のファイルへ条件を指定してセルの値を転記したい 4 2022/04/04 15:38
- ふるさと納税 株式投資の配当金を ふるさと納税計限度額計算へ算入 税抜きか否か 1 2022/11/13 10:03
このQ&Aを見た人はこんなQ&Aも見ています
-
性格の違いは生まれた順番で決まる?長男長女・中間子・末っ子・一人っ子の性格の傾向
同じ環境で生まれ育っても、生まれ順で性格は違うものなのだろうか。家庭教育研究家の田宮由美さんに教えてもらった。
-
GetPrivateProfileStringでiniファイル読込む処理を詳しく知りたいのですが・・・
C言語・C++・C#
-
INIファイルからのデータ読込みについて
C言語・C++・C#
-
DWORDの実際の型は何でしょうか
C言語・C++・C#
-
-
4
iniファイル
その他(プログラミング・Web制作)
-
5
System.IO.Directory.GetFilesの順番
Visual Basic(VBA)
-
6
std::stringからLPCWSTR型への変換
C言語・C++・C#
-
7
CStringからchar*への型変換について教えてください。
C言語・C++・C#
-
8
C言語のコンパイルエラーなんですが、どこが悪いのかがわからない。
C言語・C++・C#
-
9
iniファイルに追記がしたいです。
Visual Basic(VBA)
-
10
charからLPTSTRへの変換方法
C言語・C++・C#
-
11
UpdateData( FALSE); による文字列データの表示更新(VC++6.0)
C言語・C++・C#
-
12
CSVファイルの中で、「 , 」カンマを使いたい
その他(コンピューター・テクノロジー)
-
13
フルパスから最後のディレクトリ名を取得したい。
Visual Basic(VBA)
-
14
コンボボックスでデフォルト値の設定
C言語・C++・C#
-
15
iniファイルのセクションについて
C言語・C++・C#
-
16
VB2008 iniファイルの全セクション取得方法
Visual Basic(VBA)
-
17
VB2008 iniファイルの指定セクション内の値のみを取得
Visual Basic(VBA)
-
18
c++,ある関数のクラスから別のクラスの関数を呼ぶ
C言語・C++・C#
-
19
C# ReadOnlyのTextBoxで
C言語・C++・C#
-
20
CString から LPCTSTRの型に変換
C言語・C++・C#
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
[エクセル]連続する指定範囲か...
-
Excelのセルの色指定をVBAから...
-
ExcelのINDEXとMATCH関数でスピ...
-
Excelのオートフィルタで抽出し...
-
[VBA]改行入りのセルの値を配列...
-
DataSetから、DataTableを取得...
-
array関数で格納した配列の型を...
-
Excel オートフィルタのリスト...
-
VBA listBoxについて
-
表にフィルターをかけ、絞った...
-
Excel VBA 配列の分割について
-
エクセルで、絶対値の平均を算...
-
VB6・Split関数・連続した空白...
-
csv形式のファイルを配列に...
-
【C#】二次元配列へのcsvファイ...
-
EXCEL VBA 2次元配列に格納さ...
-
.NET - 配列変数を省略可能の引...
-
配列のSession格納、及び取得方...
-
[マクロ]配列を区切り文字で変...
-
エクセルVBAで変数をセルに一行...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ExcelのINDEXとMATCH関数でスピ...
-
array関数で格納した配列の型を...
-
Excelのセルの色指定をVBAから...
-
[エクセル]連続する指定範囲か...
-
エクセルで、絶対値の平均を算...
-
VBA listBoxについて
-
表にフィルターをかけ、絞った...
-
VBA 配列に格納した値の平均の...
-
iniファイルのキーと値を取得す...
-
[VBA]改行入りのセルの値を配列...
-
配列がとびとびである場合の書き方
-
エクセルでエラーを無視して一...
-
DataSetから、DataTableを取得...
-
Excel オートフィルタのリスト...
-
Split関数でLong配列に格納する...
-
読み込みで一行おきに配列に格納
-
VB6.0 ファイルの一括読込み
-
SUMPRODUCT関数を用いた最小値
-
INDEX(D:D,L3)の意味は?
-
Dictionaryを使い4つの条件の一...
おすすめ情報