いつもお世話になっています。
iniファイルの中のあるデータをGetPrivateProfileStringで調べて、その中になければデータを
追記したいです。
WritePrivateProfileStringの場合、iniファイルにあるデータが追記したい内容がないだけで、他のデータが 入っていても、上書きされてしまうんですよね?
もしその中に他のデータが入っていた場合は、追記をしたいのですが、それができるAPI関数って
何かありますか?
iniファイルに関して、ネットで調べていると、WritePrivateProfileStringなどしか出てこなくて・・・。
もしできないようでしたら、追記できるような何かいいアイディアがあれば・・・と思っています。
すみませんが、よろしくお願いします。
わかりづらい文章で申し訳ありません。
No.6ベストアンサー
- 回答日時:
> 形は、普通のiniファイルの
>"WriteData=OldData"
>"WriteData=NewData"にしたいので・・・。
ということであれば、それはWritePrivateProfileStringでは出来ません。(INIファイルの規格外の使い方だから)
また、GetPrivateProfileStringでは最初のOldDataしか取得できません。(試してないので推測です)
そこで
・設定ファイル(INI)にキーと値をまとめて書き込む(WritePrivateProfileSection)
・設定ファイル(INI)からキーと値をまとめて読み込む(GetPrivateProfileSection)
を使えば出来ると思います。
つまり、
strPair = _
"OtherKey=" & strOtherData & vbNullChar & _
"WriteData=" & strOldData & vbNullChar & _
"WriteData=" & strNewData & vbNullChar & vbNullChar
として書きこむ文字列を作成し(#5の方の配列による方法が使えます)
lngRet = WritePrivateProfileSection( SectionName, strPair, InifaileName )
で書きこみます。
ただし、書きこんだ"WriteData"の値をすべて読み出す場合は
GetPrivateProfileSectionを使ってセクション内の文字列を読み出してから
自力でキーと値に分離する必要があります。(Split命令が有るのでそんなに大変じゃないけど)
WritePrivateProfileSectionやGetPrivateProfileSectionの使い方についてはMSDNやインターネットで調べてください。
No.7
- 回答日時:
BlueRayです。
>セクション(?)/エントリ(?)内のキーはユニーク
前回、上記のように書き込み詳しく書いてなかったのですが
No.5,6さんの言う通りのことが言いたかったのです。
言い訳になりますが、時間が無かったので簡単に書いてしまいました。
[Section]
Key = Value
となってる場合に、Key名はユニークと言うことです。
[TEST]
TEST1 = 1 ○
TEST1 = 2 ×
TEST1 = 3 ×
GetPrivate~/WritePrivate~は、上記のように同一名称は
無視されるので、記述はしていても有効にはなりません。
>2番目の引数lpKeyNameが同じでも3番目の引数のlpStringが違えば記述されていますが・・・。
> (元からあるiniファイルの話で、プログラム上でいじくっているわけではありませんが・・・。
これは、Open/Closeを使用して直接読み書きしていると思われます。
一応、こちらからの補足をさせていただきました。
方法は、No.5,6さんの案を適用すれば出来るはずです。
では。
No.5
- 回答日時:
TEST.iniファイルにブロックとセクションを追加する場合は以下のとおりでOKなはずです。
Open "TEST.ini" For Append As #1
Print #1, "[BlockName]"
Print #1, "SectionName = Section"
Close #1
ただし、
[BLOCK1]
SectionName = A
SectionName = B
と設定しても、最初の行しか有効になりません。ですから設定されるのであれば、別ブロックで設定しないと「A」が「B」に書き換えられてしまうわけです。
この場合は
[BLOCK1]
SectionName = A
[BLOCK2]
SectionName = B
としなければ、両方設定することは出来ません。
また、iniファイル全体を編集したいのであれば
Dim strLine(100) as string
Dim i as Long
dim j as Long
Open "ETST.ini" For Input As #1
i=0
do untile eof
i = i + 1
input #1,strLine(i)
loop
Close #1
で配列等に保存し、プログラムで文字列を編集してから
Open "TEST.ini" For Output As #1
For j= 1 to i
Print #1,strLine(j)
Next
Close #1
で書き出せば出来るはずです。
この回答への補足
わざわざ細かい説明ありがとうございました!!
どうしても同じキー名のところに設定したいので、2番目の配列を利用するやり方を
考えてみようと思います。
私が実際思いついたやりかたといえば、キー名を指定しないで、値にキー名+値を
追記しするか、拡張子をテキストに変えて文字列操作するとかくらいしか
思いつきませんでした。
ちなみにキー名を指定しないで追記すると、値の前にどうしても"="が入ってしまうので、
どうしようか途方にくれてました。
あと、ふたつめの拡張子を変えるっていうのはアイディアだけで、
実際にそのやり方はわかりません。
No.4
- 回答日時:
追記して、どのようにしたいのかが不明なのですが
登録されている値をOldData、
追記したい値をNewData、
実際に書きこまれる値をWriteDataとすると
WriteData = OldData & Newdata
というのではダメですか?
この回答への補足
”キー名=値+値”にするってことですか?
それはちょっと考えていないので・・・すみません。
形は、普通のiniファイルの
"WriteData=OldData"
"WriteData=NewData"にしたいので・・・。
No.2
- 回答日時:
INIファイルの記述は、セクション(?)/エントリ(?)内のキーはユニークで
なくてはならないので、重複したキー名称を指定することは出来ません。
参考資料が見つけられなかったのですが、以上のようになっています。
この回答への補足
え?そうなんですか?
2番目の引数lpKeyNameが同じでも3番目の引数のlpStringが違えば記述されていますが・・・。
(元からあるiniファイルの話で、プログラム上でいじくっているわけではありませんが・・・。
”重複したキー名称を指定することはできない”とは、プログラム上での話ですか?)。
さきほど、補足で書いたのが2番目の引数が“セクション名”と書きましたが、2番目はキー名の間違えでした。
No.1
- 回答日時:
この回答への補足
takntさんから追記されるとのご指摘がありまして、早速試しましたが、やはり上書きされました。
私がやりたいことは、WritePrivateProfileStringの2番目の引数のセクションが追記したいものと
元からあるものが同じときに、上書きせずに追記したい・・・という話なんです。
WritePrivateProfileStringの場合、2番目の引数のセクションが同じ場合、3番目の引数の値が上書きされてしまいますよね?
説明不足で申し訳ありません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 複数ファイルのデータの統合について 12 2022/05/14 12:03
- Excel(エクセル) Excelマクロ 差分抽出の方法が知りたいです。 2 2023/03/07 13:25
- その他(データベース) Excel VBA 転記について 1 2022/04/20 16:55
- Excel(エクセル) Excelの関数でこんな処理ができますか 1 2023/02/08 13:46
- UNIX・Linux サーバー間のデータコピー(データ形式とデーターフォーマットの変換あり。一定間隔で処理) 2 2023/08/22 22:15
- Visual Basic(VBA) 複数ブックの統合について Excel VBA 1 2022/05/13 09:48
- Excel(エクセル) Excel同士のデータの突合 3 2023/08/07 16:34
- Excel(エクセル) 【困っています】VBA 追加処理の記述を教えてください。 1 2022/08/25 22:54
- Excel(エクセル) Excelで、別シートの表のステータスに伴った動的な自動転記をしたいです。 2 2023/06/14 15:56
- Access(アクセス) スキルシートのエクセルの項目に 2 2023/04/04 22:41
このQ&Aを見た人はこんなQ&Aも見ています
-
10代と話して驚いたこと
先日10代の知り合いと話した際、フロッピーディスクの実物を見たことがない、と言われて驚きました。今後もこういうことが増えてくるのかと思うと不思議な気持ちです。
-
秘密基地、どこに作った?
小さい頃、1度は誰もが作ったであろう秘密基地。 大人の今だからこそ言える、あなたの秘密基地の場所を教えてください!
-
忘れられない激○○料理
これまでに食べたもののなかで、もっとも「激○○」だった料理を教えて下さい。 激辛、でも激甘でも。 激ウマ、でも激マズでも。
-
許せない心理テスト
私は「あなたの目の前にケーキがあります。ろうそくは何本刺さっていますか」と言われ「12本」と答えたら「ろうそくの数はあなたが好きな人の数です」と言われ浮気者扱いされたことをいまだに根に持っています。
-
タイムマシーンがあったら、過去と未来どちらに行く?
20XX年、ついにタイムマシーンが開発されました。 あなたは過去に行く? それとも未来? タイムマシーンにのって、どこに行って、何をしたいか教えてください!
-
バッチファイルで、iniファイルの内容を一部書き換える方法を教えてください。
その他(プログラミング・Web制作)
-
GetPrivateProfileStringでiniファイル読込む処理を詳しく知りたいのですが・・・
C言語・C++・C#
-
iniファイルのキーと値を取得するにはどうすれば?
C言語・C++・C#
-
-
4
iniファイル内の行を削除する方法
Visual Basic(VBA)
-
5
フルパスから最後のディレクトリ名を取得したい。
Visual Basic(VBA)
-
6
CloseとDisposeの違い
Visual Basic(VBA)
-
7
INIファイルに一括書き込みを行う方法を教えて下さい。
Visual Basic(VBA)
-
8
【VBS】 iniファイルの特定部分のみ変更
Visual Basic(VBA)
-
9
画面を強制的に再描画させる方法
C言語・C++・C#
-
10
バッチでiniファイルの編集
その他(プログラミング・Web制作)
-
11
ラジオボタンのグループ化
C言語・C++・C#
-
12
iniファイルへの追記について
Visual Basic(VBA)
-
13
コンボボックスでデフォルト値の設定
C言語・C++・C#
-
14
Accessでテーブル名やクエリ名一覧の抜き出し
Access(アクセス)
-
15
OpenFileDialogを使った後にもう一度開くと以前のファイルを表示させたい。
Visual Basic(VBA)
-
16
処理負荷特定で考えられる要因について
C言語・C++・C#
-
17
VB2008 iniファイルの指定セクション内の値のみを取得
Visual Basic(VBA)
-
18
HTMLからフォルダを開きたい
HTML・CSS
-
19
適切な変換関数が存在しない???
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/22】このサンタクロースは偽物だと気付いた理由とは?
- ・お風呂の温度、何℃にしてますか?
- ・とっておきの「まかない飯」を教えて下さい!
- ・2024年のうちにやっておきたいこと、ここで宣言しませんか?
- ・いけず言葉しりとり
- ・土曜の昼、学校帰りの昼メシの思い出
- ・忘れられない激○○料理
- ・あなたにとってのゴールデンタイムはいつですか?
- ・とっておきの「夜食」教えて下さい
- ・これまでで一番「情けなかったとき」はいつですか?
- ・プリン+醤油=ウニみたいな組み合わせメニューを教えて!
- ・タイムマシーンがあったら、過去と未来どちらに行く?
- ・遅刻の「言い訳」選手権
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語初心者の質問失礼します。
-
csvファイルを開かずに文字を検...
-
ファイル名の先頭にアンダース...
-
UTL_FILEにて既存のExcelに追加...
-
ファイルの結合
-
C言語のfopenについて教えてく...
-
Excelマクロでの再読込み方法
-
VBに、Cのincludeのようなもの...
-
FileOpen 関数で既にファイル...
-
[VBScript]ファイルの入出力を...
-
テキストファイルの最終行を削...
-
CSVファイルへの保存の際、デー...
-
mp3のID3タグをVBで編集する方法
-
2つのファイルを比較するC言語...
-
大きいサイズのテキストファイ...
-
std::ifstreamについて
-
ファイルを開かずにカスタムド...
-
COM相互運用機能のON,OFFによる...
-
バッチで118項目のCSVを処理し...
-
外部ファイルを読み込みたいの...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語初心者の質問失礼します。
-
ファイル名の先頭にアンダース...
-
csvファイルを開かずに文字を検...
-
テキストファイルの最終行を削...
-
VBに、Cのincludeのようなもの...
-
SGファイルって何ですか?
-
C言語のfopenについて教えてく...
-
分割コンパイルの#defineについて
-
アプリケーション終了時例外エ...
-
ドラッグアンドドロップでファ...
-
CSVファイルへの保存の際、デー...
-
ASP .NETでファイル選択ダイア...
-
大きいサイズのテキストファイ...
-
Javascript で INI の読み書き
-
グローバル変数のよくない使い...
-
fopenできる上限の変更
-
ハッシュの計算時間について
-
Excelマクロでの再読込み方法
-
UTL_FILEにて既存のExcelに追加...
-
ファイルの結合
おすすめ情報