wie bereits mehrfach diskutiert lassen die Preference Befehle keine Änderungen an vorhandenen Preference Files zu. Als Lösung steht eine Lib zur Verfügung.
Da ich Libs ungerne einsetze und keinen Code für Windows und Linux fand, habe ich mir eben auf die Schnelle mit PB Boardmitteln zwei Proceduren gebastelt. Ich hoffe jemand findet Verwendung oder optimiert die Funktion noch etwas.
- - Lege eine neue Gruppe mit Key und Value an
- Ändere den Value eines Key
- Füge einen neuen Key einer bestehenden Gruppe hinzu
- Lösche einen Key (durch value="")
Code: Alles auswählen
;
; INI Manipulation
;
; [Replacement for Preference Commandset]
;
; Author: Dussel (http://www.absolut-marc.de)
;
Procedure.s lib_ini_change_entry(param_filename$,param_group$,param_key$,param_value$)
;
; Create new Group
; Add new Key
; Insert new Key
; Delete Key (just set param_value$ to "")
param_group$ = "["+param_group$+"]"
tmp_filename$ = param_filename$+".tmp"
tmp_fid_w = OpenFile(#pb_any,tmp_filename$)
tmp_fid_r = ReadFile(#pb_any,param_filename$)
If tmp_fid_r
While Eof(tmp_fid_r)=0
UseFile(tmp_fid_r)
tmp_zeile$ = ReadString()
If tmp_zeile$=param_group$
UseFile(tmp_fid_w)
WriteStringN(tmp_zeile$)
While tmp_flag_end=0
UseFile(tmp_fid_r)
tmp_zeile$ = ReadString()
tmp_pos = FindString(tmp_zeile$,"=",1)
If tmp_pos=0
UseFile(tmp_fid_w)
If tmp_flag_written=0 And Len(param_value$)>0
UseFile(tmp_fid_w)
WriteStringN(param_key$+"="+param_value$)
tmp_flag_written=1
EndIf
UseFile(tmp_fid_w)
WriteStringN(tmp_zeile$)
tmp_flag_end=1
Else
tmp_zeile2$=Mid(tmp_zeile$,1,tmp_pos-1)
If tmp_zeile2$ = param_key$
; Key found
If Len(param_value$)>0
UseFile(tmp_fid_w)
WriteStringN(param_key$+"="+param_value$)
tmp_flag_written=1
Else
tmp_flag_written=1
EndIf
Else
UseFile(tmp_fid_w)
WriteStringN(tmp_zeile$)
EndIf
EndIf
Wend
Else
UseFile(tmp_fid_w)
WriteStringN(tmp_zeile$)
EndIf
Wend
CloseFile(tmp_fid_r)
If tmp_flag_written=0 And Len(param_value$)>0
; Add Group with key and values
UseFile(tmp_fid_w)
WriteStringN(param_group$)
WriteStringN(param_key$+"="+param_value$)
EndIf
Else
If Len(param_value$)>0
; Add Group with key and values
UseFile(tmp_fid_w)
WriteStringN(param_group$)
WriteStringN(param_key$+"="+param_value$)
EndIf
EndIf
CloseFile(tmp_fid_w)
CopyFile(tmp_filename$, param_filename$)
DeleteFile(tmp_filename$)
EndProcedure
Procedure.s lib_ini_read_entry(param_filename$,param_group$,param_key$)
;
;
param_group$ = "["+param_group$+"]"
tmp_fid_r = ReadFile(#pb_any,param_filename$)
If tmp_fid_r
While Eof(tmp_fid_r)=0 And tmp_flag_end=0
tmp_zeile$ = ReadString()
If tmp_zeile$=param_group$
While tmp_flag_end=0
UseFile(tmp_fid_r)
tmp_zeile$ = ReadString()
tmp_pos = FindString(tmp_zeile$,"=",1)
If tmp_pos=0
; End of Group
tmp_flag_end=1
Else
tmp_zeile2$=Mid(tmp_zeile$,1,tmp_pos-1)
If tmp_zeile2$ = param_key$
; Key found
retval$=Mid(tmp_zeile$,Len(param_key$)+2,Len(tmp_zeile$)-Len(param_key$)-1)
EndIf
tmp_flag_end=1
EndIf
Wend
EndIf
Wend
CloseFile(tmp_fid_r)
EndIf
ProcedureReturn retval$
EndProcedure
param_filename$ = "./test.txt"
lib_ini_change_entry(param_filename$,"test","key1","1")
lib_ini_change_entry(param_filename$,"test","key1","")
lib_ini_change_entry(param_filename$,"test","key1","Wert1")
lib_ini_change_entry(param_filename$,"test","key2","Wert2")
lib_ini_change_entry(param_filename$,"test","key3","Wert3")
lib_ini_change_entry(param_filename$,"test3","key3","Wert in Test3")
lib_ini_change_entry(param_filename$,"test4","key3","")
lib_ini_change_entry(param_filename$,"test5","key1","Ergebnis Wert1")
lib_ini_change_entry(param_filename$,"test","key1","Wert1 in Key1")
Debug lib_ini_read_entry(param_filename$,"test5","key1")