// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! // ! This script is provided "as is" by Applied Maths. ! // ! You are free to use and modify this script for your own needs. ! // ! Redistribution or reproduction of the script is prohibited. ! // ! DISCLAIMER: ! // ! Improper use of scripts may corrupt your database. ! // ! Running this script is entirely at your own responsibility. ! // ! Applied Maths accepts no lialibility for any consequences ! // ! resulting from its use. ! // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! DIALOG dlg; integer ok,x,i,exportexperdefs,tl,expernr,delexisting,experportselectelanesonly,lanenr,savedlanenr,found,newxmlfile,xmlfilecount,lanefinished; string experlist,selexpers,exportdir,expername,st1,st2,st3,key,filename,lanelist; XMLNODE docnode,rootnode,node1,node2; for i=1 to DbGetExperCount do if (DbGetExperClass(i)="FPR") or (DbGetExperClass(i)="CHR") or (DbGetExperClass(i)="SEQ") then experlist=experlist+DbGetExperName(i)+" "; selexpers=experlist; DlgAddText(dlg,"This script will export the selected entries in XML format",15,12,300,15); DlgAddText(dlg,"Select the experiment data you want to export:",15,28,300,15); DlgAddList(dlg,experlist,selexpers,15,50,150,150,"MULTI"); exportexperdefs=1; DlgAddCheck(dlg,"Export experiment definitions",exportexperdefs,15,200,160,15); delexisting=1; DlgAddCheck(dlg,"Delete existing XML files",delexisting,15,220,160,15); experportselectelanesonly=1; DlgAddCheck(dlg,"Only export selected fingerprint lanes",experportselectelanesonly,15,240,200,15); ok=0; while not(ok) do { x=DlgShow(dlg,"Export data to XML",350,300); if x=0 then stop; ok=1; } if delexisting then { exportdir=DbGetPath+"\Export"; FileCreateDir(exportdir); FileGetList(exportdir+"\*.xml",st1); while st1<>"" do FileDelete(exportdir+"\"+splitstring(st1," ")); } //export experiment definitions if exportexperdefs then { setbusy("Exporting experiment definitions..."); XMLNodeCreateDoc("DatabaseLayout",docnode,rootnode); for i=1 to DbGetFieldCount do XMLNodeAddText(XMLNodeAddChild(rootnode,"Field"),DbGetFieldName(i)); st1=selexpers; while st1<>"" do { expername=splitstring(st1," "); node1=XMLNodeAddChild(rootnode,"Experiment"); XMLNodeAddText(XMLNodeAddChild(node1,"Name"),expername); XMLNodeAddText(XMLNodeAddChild(node1,"Type"),DbGetExperClass(DbGetExperNr(expername))); node2=XMLNodeAddChild(node1,"Settings"); DbGetExperSettings(DbGetExperNr(expername),node2); } XMLNodeToFile(docnode,exportdir+"\DatabaseLayout.xml"); XMLNodeCloseDocument(docnode); } //Export database entries tl=0;newxmlfile=1;xmlfilecount=0; for i=1 to DbGetEntryCount do if DbGetSel(DbGetEntryKey(i)) then { if newxmlfile then { XMLNodeCreateDoc("Entries",docnode,rootnode); newxmlfile=0;xmlfilecount=xmlfilecount+1; } tl=tl+1;key=DbGetEntryKey(i); setbusy("Exporting entry "+str(tl,0,0)+" "+key+" ..."); node1=XMLNodeAddChild(rootnode,"Entry"); XMLNodeAddText(XMLNodeAddChild(node1,"Key"),key); node2=XMLNodeAddChild(node1,"Fields"); XMLExpEntry(key,node2); st1=selexpers; while st1<>"" do { expername=splitstring(st1," ");expernr=DbGetExpernr(expername); if DbGetEntryLink(key,expername)<>"" then { if (expernr>0) and (DbGetExperClass(expernr)="CHR") then { node2=XMLNodeAddChild(node1,DbGetExperClass(expernr)); XMLExpCharSet(key,expername,node2); } if (expernr>0) and (DbGetExperClass(expernr)="SEQ") then { node2=XMLNodeAddChild(node1,DbGetExperClass(expernr)); XMLExpSequence(key,expername,node2); } } } if tl/50=floor(tl/50) then { setbusy("Saving entries..."); XMLNodeToFile(docnode,exportdir+"\DatabaseEntries_"+str(xmlfilecount,0,0)+".xml"); XMLNodeCloseDocument(docnode); newxmlfile=1; } } if not(newxmlfile) then { setbusy("Saving entries..."); XMLNodeToFile(docnode,exportdir+"\DatabaseEntries_"+str(xmlfilecount,0,0)+".xml"); XMLNodeCloseDocument(docnode); } //export fingerprint files tl=0; for i=1 to DbGetFileCount do { filename=DbGetFileName(i); expername=DbGetFileExper(i);expernr=DbGetExperNr(expername); found=0;st2=selexpers; while st2<>"" do if DbGetFileExper(i)=splitstring(st2," ") then found=1; if (expername<>"") and (found) and (expernr>0) then if (DbGetExperClass(expernr)="FPR") then { st1=FprGetKeyList(filename);ok=0; while st1<>"" do if DbGetSel(splitstring(st1," ")) then ok=1; if ok then { tl=tl+1; SetBusy("Creating fingerprint file "+filename+" ("+str(tl,0,0)+")"); XMLNodeCreateDoc("FprintFile",docnode,rootnode); XMLNodeAddText(XMLNodeAddChild(rootnode,"Name"),filename); node1=XMLNodeAddChild(rootnode,"Lanes"); lanelist=""; st1=FprGetKeyList(filename);lanenr=0;savedlanenr=0; lanefinished=0; while not(lanefinished) do { if find(st1," ",1)=0 then lanefinished=1; key=splitstring(st1," ");lanenr=lanenr+1; if DbGetSel(key) or not(experportselectelanesonly) then { savedlanenr=savedlanenr+1; lanelist=lanelist+str(lanenr,0,0)+" "; node2=XMLNodeAddChild(node1,"Lane"); XMLNodeAddAttrib(node2,"Index",str(savedlanenr,0,0)); if DbGetSel(key) then { if key<>"" then XMLNodeAddText(node2,key); else XMLNodeAddText(node2,"-"); } else XMLNodeAddText(node2,"-"); } } node1=XMLNodeAddChild(rootnode,"FprintData"); XMLExpFprintFile(filename,1,1,1,0,lanelist,node1); SetBusy("Saving fingerprint file "+filename+" ("+str(tl,0,0)+")"); XMLNodeToFile(docnode,exportdir+"\Fprint_"+filename+".xml"); XMLNodeCloseDocument(docnode); } } } setbusy("");