有沒有辦法將一個TIniFile實例的條目合併到另一個實例?如何合併來自兩個TINIfile實例的條目?
1
A
回答
2
這裏是可以一起合併兩個INI文件到一個新的輸出INI文件的程序:
procedure MergeIniFiles(const FromFilename, ToFilename, OutputFilename: String;
const Overwrite: Boolean);
var
IniFrom, IniTo, IniOut: TIniFile;
Sec: TStringList;
Val: TStringList;
X, Y: Integer;
S, N, V: String;
begin
IniFrom:= TIniFile.Create(FromFilename);
IniTo:= TIniFile.Create(ToFilename);
IniOut:= TIniFile.Create(OutputFilename);
Sec:= TStringList.Create;
Val:= TStringList.Create;
try
IniFrom.ReadSections(Sec);
for X := 0 to Sec.Count-1 do begin
S:= Sec[X];
IniFrom.ReadSection(S, Val);
for Y := 0 to Val.Count-1 do begin
N:= Val[Y];
V:= IniFrom.ReadString(S, N, '');
IniOut.WriteString(S, N, V);
end;
end;
IniTo.ReadSections(Sec);
for X := 0 to Sec.Count-1 do begin
S:= Sec[X];
IniTo.ReadSection(S, Val);
for Y := 0 to Val.Count-1 do begin
N:= Val[Y];
V:= IniTo.ReadString(S, N, '');
if Overwrite then begin
IniOut.WriteString(S, N, V);
end else begin
if not IniOut.ValueExists(S, N) then
IniOut.WriteString(S, N, V);
end;
end;
end;
finally
Val.Free;
Sec.Free;
IniOut.Free;
IniTo.Free;
IniFrom.Free;
end;
end;
+0
感謝您的實施,我將不得不改變以使用TINIFile參數。 – Vassilis
+0
@VassilisGr事實上,我只是在猜測意圖是什麼。您需要決定如何適應現有的價值。 –
4
0
我想達到什麼是在我的安裝程序的ini文件,這將與物品放在一起進行'Program Files'中的主要可執行文件。這個ini將包含應用程序的許多屬性的默認值。因此,用戶的實際ini文件(例如在主文件夾中)將從那裏讀取「工廠」默認值。這種方法類似於OSX的NSUserDefaults
。我認爲有些情況下這是有用的,而不是僅使用inifile.readString()
中的默認值。謝謝大家的回答,我只是爲此目的發佈最後的功能......
procedure inifileLoadDefaults(const defaults: TFileName; destination:TIniFile);
var inif: TIniFile;
begin
inif := TIniFile.Create(defaults);
try
inifileLoadDefaults(inif, destination);
finally
inif.Free;
end;
end;
procedure inifileLoadDefaults(const defaults: TIniFile; destination:TIniFile);
var secs, secsVal: TStrings;
i, k: Integer;
begin
secs := TStringList.Create;
secsVal := TStringList.Create;
try
defaults.ReadSections(secs);
for i:=0 to secs.Count -1 do begin
defaults.ReadSection(secs[i], secsVal);
for k:=0 to secsVal.Count -1 do
if not(destination.ValueExists(secs[i], secsVal[k])) then
destination.WriteString(secs[i], secsVal[k], defaults.ReadString(secs[i], secsVal[k], ''));
end;
finally
secsVal.Free;
secs.Free;
end;
end;
相關問題
- 1. 如何合併兩個RenderTargetBitmap實例?
- 2. Excel組合框不合並來自兩列的條目,但將它們列爲兩個單獨的條目
- 3. 如何合併兩個DataTable的條件
- 4. Hazelcast:合併兩個hazelcast實例
- 5. 可以合併兩個GraphQLSchema實例嗎?
- 6. Dashcode - 如何合併來自一個數據源的兩個值
- 7. Swift:如何組合兩個Dictionary實例?
- 8. 合併兩個crontab項合併爲一個條目
- 9. 如何合併ActiveRecord中的兩個字典條目?
- 10. 如何涉及來自不同類的兩個實例,python 2
- 11. MySQL兩個錶轉儲,兩個實例之間的合併
- 12. ,如何合併2個Collections.Map實例?
- 13. 如何合併來自兩個DateTime列(SQL Server)的數據?
- 14. 如何連接/合併來自Quandl的兩個數據幀?
- 15. 如何合併來自兩個XML文件的元素?
- 16. 如何合併兩個Delphi項目?
- 17. 合併具有不同屬性集合的兩個weka實例
- 18. 合併來自兩條評論插件的評論
- 19. 鏈接來自兩列的條目
- 20. 將掃描儀類的兩個實例合併爲一個
- 21. 如何在兩種情況下合併來自兩個表的數據?
- 22. 如何組合/合併來自兩個SQL查詢結果的列?
- 23. 合併來自兩個不同數據庫的兩張子表
- 24. 如何合併Groovy中的POJO實例?
- 25. MongoDB的合併結果來自兩個集合
- 26. 合併兩個laravel項目
- 27. 是合併兩個目錄
- 28. 合併兩個VB.Net項目
- 29. 合併兩個android項目
- 30. 合併兩個SVN目錄
不是直接,沒有。您必須從一個'TIniFile'中讀取值,並根據需要將它們寫入另一個'TIniFile'。如果您遇到問題,請顯示您的實際代碼。 –