3

TiniFileはinfファイルを読んでいました。しかし、一部のセクションでは、IDは同じであり、 TiniFile読み取ることができません。

例えば ​​:

このセクション:

[AMD.Mfg]
%AMD.DeviceDesc0% = AMDSMBus, PCI\VEN_1002&DEV_4353
%AMD.DeviceDesc0% = AMDSMBus, PCI\VEN_1002&DEV_4363
%AMD.DeviceDesc0% = AMDSMBus, PCI\VEN_1002&DEV_4372
%AMD.DeviceDesc0% = AMDSMBus, PCI\VEN_1002&DEV_4385
%AMD.DeviceDesc0% = AMDSMBus, PCI\VEN_1022&DEV_780B

私のコード:

    var
      inf : TiniFile;
      list : TStringList;
    begin
      //Create
      inf := TIniFile.Create(infPath);
      list := TStringList.Create;  
      inf.ReadSectionValues('AMD.Mfg', list);
      Memo1.Lines.AddStrings(list2);
    end;

これを表示します:

%AMD.DeviceDesc0%=AMDSMBus, PCI\VEN_1002&DEV_4353
%AMD.DeviceDesc0%=AMDSMBus, PCI\VEN_1002&DEV_4353
%AMD.DeviceDesc0%=AMDSMBus, PCI\VEN_1002&DEV_4353
%AMD.DeviceDesc0%=AMDSMBus, PCI\VEN_1002&DEV_4353
%AMD.DeviceDesc0%=AMDSMBus, PCI\VEN_1002&DEV_4353

同じIDがこれを引き起こしていると思うので、私の質問は、IDが同じであるときにそれをどのように読むかです。

4

2 に答える 2

8

TIniFileは、INIファイルの読み取り/書き込みを行うWindows API呼び出しのラッパーであるため、特にGetPrivateProfileStringの場合、WindowsAPIでサポートされるものが制限されます。

AFAIKファイル形式の正式な定義はありません。また、ご存知のように、関数は常に最初のオカレンスを返すため、重複キーはMicrosoftの実装ではサポートされていません。

ReadSectionValuesの実装をよく見ると、最初にセクションキーを読み取り、次にループ内のキー値を取得することがわかります。これは、前述のGetPrivateProfileString関数を使用する方法であり、すべてのユーザーに対して同じ値を取得しているためです。呼び出し。

私のアドバイスは、TIniFileを使用してINIファイルではないファイルを読み取るのをやめることです

于 2013-01-11T08:46:35.613 に答える
5

あなたは「読む」とはどういう意味か非常に曖昧です。実際には、Delphiが持っているさまざまな手段でそのファイルを読み取ることができます。個人的に私はそれを使用してそれを読みますTStringList.LoadFromFile

問題は、それを読んだ後、あなたはどうしますか...

あなたはそれをするためにあなたのチャンスを試すこともTMemIniFileできます。しかし、私は個人的にINI関連の方法を避けました。これらのファイルは基本的なINIの前提から大きく逸脱しており、INI関連のライブラリは、アップグレード時に実装を変更して、それを使用するプログラムを台無しにする可能性があるためです。

于 2013-01-11T09:08:01.867 に答える