PB "writepref to readpref"-Konverter

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
DW

PB "writepref to readpref"-Konverter

Beitrag von DW »

Hallo, ich habe mal einen kleinen parser geschrieben, derwritepreferencebefehlen zu readpreferencebefehle konvertiert.
Das ist nützlich, wenn ihr beispielsweise in eurem Programm eine Projekt-Speicherfunktion einbaut und einen ellenlangen Code wie diesen habt:
WritePreferenceString("Key",GetGadgetText(#String_3))
WritePreferenceLong("Key1",GetGadgetState(#CheckBox_3))
..
..
..
usw.

und keine Lust habt, das ganze fürs Öffnen der Projektdateien umzuschreiben.

So kann Beispielsweise aus folgendem code:

Code: Alles auswählen

    WritePreferenceString("Program name",GetGadgetText(#String_3))
    WritePreferenceString("Program version",GetGadgetText(#String_4))
    WritePreferenceLong("Win95",GetGadgetState(#CheckBox_3))
    WritePreferenceLong("WinNT4",GetGadgetState(#CheckBox_4))
    WritePreferenceLong("Win98",GetGadgetState(#CheckBox_5))
    WritePreferenceLong("WinME",GetGadgetState(#CheckBox_6))
    WritePreferenceLong("Win2000",GetGadgetState(#CheckBox_7))
    WritePreferenceLong("WinXP",GetGadgetState(#CheckBox_9))
    WritePreferenceString("Company name",GetGadgetText(#String_10))
    WritePreferenceString("Website",GetGadgetText(#String_11))
    PreferenceGroup("Graphics")
    WritePreferenceString("Wizard image",GetGadgetText(#String_7))
    WritePreferenceString("Header image",GetGadgetText(#String_8))
    WritePreferenceString("Install-icon image",GetGadgetText(#String_9))
    WritePreferenceLong("Show Label",GetGadgetState(#CheckBox_1))
    WritePreferenceLong("Windows style",GetGadgetState(#Radio_2))
    PreferenceGroup("Files")
    WritePreferenceLong("Include Zipfile",GetGadgetState(#CheckBox_16))
    WritePreferenceString("Zipfile",GetGadgetText(#String_14))
    WritePreferenceString("Installation path",GetGadgetText(#String_17))
    WritePreferenceLong("Autcip",GetGadgetState(#CheckBox_20))
    PreferenceGroup("Uninstall")
    WritePreferenceLong("Vwau",GetGadgetState(#CheckBox_17))
    WritePreferenceString("Website",GetGadgetText(#String_15))
    WritePreferenceLong("Include uninstaller",GetGadgetState(#CheckBox_18))
    PreferenceGroup("Licence")
    WritePreferenceLong("Licence dialog",GetGadgetState(#CheckBox_12))
    PreferenceGroup("Finish")
    WritePreferenceLong("Sart program",GetGadgetState(#CheckBox_13))
    WritePreferenceLong("Reboot computer",GetGadgetState(#CheckBox_14))
    WritePreferenceLong("Execute DLL:",GetGadgetState(#CheckBox_15))
    WritePreferenceString("Program",GetGadgetText(#String_12))
    WritePreferenceString("Dll",GetGadgetText(#String_13))
    PreferenceGroup("Shortcuts")
    WritePreferenceLong("Allowtc",GetGadgetState(#CheckBox_19))
    WritePreferenceString("Shortcut path",GetGadgetText(#String_16))
der hier gemacht werden:

Code: Alles auswählen

  setgadgettext(#String_3,ReadPreferenceString('Program name',''))
setgadgettext(#String_4,ReadPreferenceString('Program version',''))
setgadgetstate(#CheckBox_3,ReadPreferencelong('Win95',0))
setgadgetstate(#CheckBox_4,ReadPreferencelong('WinNT4',0))
setgadgetstate(#CheckBox_5,ReadPreferencelong('Win98',0))
setgadgetstate(#CheckBox_6,ReadPreferencelong('WinME',0))
setgadgetstate(#CheckBox_7,ReadPreferencelong('Win2000',0))
setgadgetstate(#CheckBox_9,ReadPreferencelong('WinXP',0))
setgadgettext(#String_10,ReadPreferenceString('Company name',''))
setgadgettext(#String_11,ReadPreferenceString('Website',''))
    PreferenceGroup("Graphics")
setgadgettext(#String_7,ReadPreferenceString('Wizard image',''))
setgadgettext(#String_8,ReadPreferenceString('Header image',''))
setgadgettext(#String_9,ReadPreferenceString('Install-icon image',''))
setgadgetstate(#CheckBox_1,ReadPreferencelong('Show Label',0))
setgadgetstate(#Radio_2,ReadPreferencelong('Windows style',0))
    PreferenceGroup("Files")
setgadgetstate(#CheckBox_16,ReadPreferencelong('Include Zipfile',0))
setgadgettext(#String_14,ReadPreferenceString('Zipfile',''))
setgadgettext(#String_17,ReadPreferenceString('Installation path',''))
setgadgetstate(#CheckBox_20,ReadPreferencelong('Autcip',0))
    PreferenceGroup("Uninstall")
setgadgetstate(#CheckBox_17,ReadPreferencelong('Vwau',0))
setgadgettext(#String_15,ReadPreferenceString('Website',''))
setgadgetstate(#CheckBox_18,ReadPreferencelong('Include uninstaller',0))
    PreferenceGroup("Licence")
setgadgetstate(#CheckBox_12,ReadPreferencelong('Licence dialog',0))
    PreferenceGroup("Finish")
setgadgetstate(#CheckBox_13,ReadPreferencelong('Sart program',0))
setgadgetstate(#CheckBox_14,ReadPreferencelong('Reboot computer',0))
setgadgetstate(#CheckBox_15,ReadPreferencelong('Execute DLL:',0))
setgadgettext(#String_12,ReadPreferenceString('Program',''))
setgadgettext(#String_13,ReadPreferenceString('Dll',''))
    PreferenceGroup("Shortcuts")
setgadgetstate(#CheckBox_19,ReadPreferencelong('Allowtc',0))
setgadgettext(#String_16,ReadPreferenceString('Shortcut path',''))
Die " ' " -Zeichen müsst ihr manuel durch " " "-Zeichen ersetzen.

Nun der Code:

Code: Alles auswählen

;PB Preference "pref_write" to "pref_read" converter 
;By DW/Forgesoft 

file.s="file.ini" 
outputfile.s="file_out.ini" 

;----------------------------------------------------------------------------------------- 
If ReadFile(0,file) 
If CreateFile(1,outputfile) 


While Not Eof(0) 
  line.s=ReadString(0) 
  For a=0 To Len(line) 
    If Mid(line,a,1)="[" 
      WriteStringN(0,line) 
    EndIf 
    If Mid(line,a,22)="WritePreferenceString(" 
      pos=FindString(line,",",a+24) 
      keyword.s=Mid(line,a+23,Len(line)-a-22-(Len(line)-pos)-2) 

      pos=FindString(line,"GetGadgetText(",0) 
      pos1=FindString(line,")",pos+14) 
      var.s=Mid(line,pos+14,Len(line)-pos-15) 
      WriteStringN(1,"setgadgettext("+var+",ReadPreferenceString("+Chr(34)+""+keyword+""+Chr(34)+","+Chr(34)+Chr(34)+"))") 
    EndIf 
    If Mid(line,a,20)="WritePreferenceLong(" 
      pos=FindString(line,",",a+22) 
      keyword.s=Mid(line,a+21,Len(line)-a-20-(Len(line)-pos)-2) 
      pos=FindString(line,"GetGadgetState(",0) 
      pos1=FindString(line,")",pos+15) 
      var.s=Mid(line,pos+15,Len(line)-pos-16) 
      WriteStringN(1,"setgadgetstate("+var+",ReadPreferencelong("+Chr(34)+""+keyword+""+Chr(34)+",0))") 
    EndIf 

    If Mid(line,a,15)="PreferenceGroup" 
      WriteStringN(1,line) 
    EndIf 
  Next 
Wend 
CloseFile(1) 
CloseFile(0)
EndIf
EndIf
Parst nur writepreferencestring und writepreferencelong. Könnt ihr ja erweitern.
Das ganze bezieht sich nur auf string- und comboboxgadgets.

Hoffe, ihr könnts mal gebrauchen.
Zuletzt geändert von DW am 08.02.2007 21:37, insgesamt 1-mal geändert.
Benutzeravatar
Macros
Beiträge: 1365
Registriert: 23.12.2005 15:00
Wohnort: Olching(bei FFB)
Kontaktdaten:

Beitrag von Macros »

Tipp: die Aunführungszeichen kannst du mit chr(34) machen.
also
"test"+chr(34)+"bla"
=
test"bla
DW

Beitrag von DW »

Ah, Danke! Habe ich in der ASCII Tabelle der PB Hilfe übersehen.
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag von AND51 »

Warum nicht
BildMacros
für soetwas benutzen? :mrgreen:
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
DW

Beitrag von DW »

Wieso? ASCII ist doch völlig okay.
Benutzeravatar
Macros
Beiträge: 1365
Registriert: 23.12.2005 15:00
Wohnort: Olching(bei FFB)
Kontaktdaten:

Beitrag von Macros »

AND51 hat geschrieben:Warum nicht
BildMacros
für soetwas benutzen? :mrgreen:
He, ich hab keine Lust schon wieder Codes nach irgendwelchen Abkürzungen zu durchwühlen ;-)

Lies die Midkemia Saga, dann weist du woher mein Nick wirklich stammt ^^
Woher sollte ich wissen, das ein PB Befehl mit gleichem Namen kommt...
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

Bild
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

DW hat geschrieben:Wieso? ASCII ist doch völlig okay.
häh :freak:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag von AND51 »

Kaeru Gaman hat geschrieben:Bild
häh :freak:

@ Macros: Türlich kannst du das nicht wissen, aber ich konnt mir das Wortspiel nicht verkneifen; habe die Idee mit dem Macros aber ernst gemeint...
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Antworten