Scripting Resources for DigitalMicrograph™ |
Example: Reading Data from a Text File and Creating a Settings File |
|
Function |
Reads data in from a text file and converts it into a settings file (.gtg) which can be used to store large suites of data which can be installed or accessed by a script. This avoids the code bloat associated with hard coding the data directly into the script. |
Version |
version:20100613, v1.0 |
Author |
D. R. G. Mitchell |
Acknowledgements |
|
Comments |
The data text file should contain one number per line, delimited by carriage returns. It can be created with NotePad or similar and should be a .txt file. The script adds the data directly to the Global Info as 'Temporary Tag:Data Point 1:XXX' etc, where XXX is the first value in the text file. Once complete, the tag group (Temporary Tag) is saved as a settings file (.gtg) and is deleted from the Global Info. To show the contents of the settings file a taggroupbrowser opens it for inspection. Commands for adding this data back to the Global Info are included - but are not active. |
System Requirements |
Should be compatible with all recent versions of DigitalMicrograph. |
Known Issues |
|
Supported |
Yes |
Included Files |
Main script file. |
Source Code |
// Example script to read data from a text file and write them to // persistent tags as Temp Tags:Data Point 1, X.XXXX etc // The text file is simply a file created in a simple text editor or a script window, // where each line is delimited by a carriage return. Create a simple text file with // several lines of numbers.Save the text file to the hard disk then open it with this script.
// version:20100613, v1.0 // D. R. G. Mitchell, v1.0, June 2010 // adminnospam@dmscripting.com (remove the nospam to make this work)
// It is necessary to open a file for reading (openfileforreading()) to read from it. // It must also be closed at the conclusion of reading, otherwise // it will not be released to other attempts to do anything with it. // The Try/Catch routine should ensure that it is closed after any // error. The readfileline() function will read the file line by line and return // 1 for every line it reads successfully. It will return 0 at the // end of the file and this is used to detect the end of file. For more information // search for 'File Input and Output' in DMs online help.
// This technique is useful to create a settings file which // can contain large amounts of data, especially where it already exists in electronic form.
// The script reads the data one line at a time and creates tags in the Global Info. // These tags are then saved as a standalone settings file, which can be // loaded back into DM quite easily. This is useful for saving/backing up suites of user data and // for transferring such data between PCs.
// variables
string path number filereference string thisline number counter=1 number spacing result("\n\n\n")
// Select the file
showalert("Open a text file containing numerical data (carriage return delimited).",2) if(!opendialog(path)) exit(0)
string directory=pathextractdirectory(path, 0) string extension=pathextractextension(path,0)
// Ensure the selected file is a text file with an extension txt
if(extension!="txt") { showalert("The selected file is not a text file (.txt).",2) exit(0) }
// Try/Catch to open the file for reading but close it in case of error.
try { filereference=openfileforreading(path) number readok=1
// While ever the end of file has not been reached (readok=0) read the next line // and output it to the results
while(readok==1) { readok=readfileline(filereference, thisline) if(val(thisline)!=0) // ie a numerical string was encountered { // create the persistent tag
setpersistentnumbernote("Temp Tags:Data "+counter, val(thisline)) result("\nPersistent Tag 'Temp Tags:Data "+counter+":"+val(thisline)+"' added") counter=counter+1 }
} } catch // there was an error - close the file { closefile(filereference) showalert("Sorry there was an error",2) exit(0) }
// The file read has concluded, close the file for reading.
closefile(filereference)
// Source the taggroup containing the data from the persistent tags
taggroup ptags=getpersistenttaggroup() taggroup temptags ptags.taggroupgettagastaggroup("Temp Tags", temptags)
// Save it to a file
showalert("Saving the data as a settings file.",2) directory=pathextractdirectory(path, 0) string filename=pathextractbasename(path,0) filename=filename+" settings.gtg" string targetpath=pathconcatenate(directory, filename)
if(!saveasdialog("Save data as settings file",targetpath,path)) { deletepersistentnote("Temp Tags") exit(0) }
string label="Label to identify the data" TagGroupSaveToFileWithLabel( temptags, targetpath, label )
// As this is an example, we'll delete the data we added to the persistenttags.
deletepersistentnote("Temp Tags")
// For demonstation purposes, the saved file can be opened and the contents displayed
showalert("Let's open the file you just saved.",2) taggroup loadedtags=newtaggroup()
// Put up a dialog to locate the file
if(!opendialog(path)) exit(0)
// First test to make sure the file is of type gtg. Ignore other file types
extension=pathextractextension(path,0)
if(extension!="gtg") { showalert("The selected file must be of type .gtg.",2) exit(0) }
// Get the taggroup from the file.
TagGroupLoadFromFileWithLabel( loadedtags, path, label )
// When the data were saved a label was appended to them. This is label can be used to // identify a settings file as belonging to a particular script.
if(label!="Label to identify the data") { showalert("That is not a settings file created with this script.",2) exit(0) }
// Display the contents of the saved file
showalert("The saved file contents are . . .",2) loadedtags.taggroupopenbrowserwindow(0)
// To load this data into the Global Info, the following would be carried out
// ptags is the persistent taggroup (Global Info). This was accessed earlier in the script. // The loaded taggroup (loadedtags) is added to the persistent taggroup (ptags) with the label // 'Temp Tags'. The data in the data group will then appear under the label Temp Tags.
// This code is commented out - if you do uncomment it - remember to delete the tags which get // added by opening the Global Info (File/Global Info..., click on General/Tags then scroll down // find the Temp Tags taggroup - right click on it and select delete.
/*
ptags.taggroupaddlabeledtaggroup("Temp Tags", loadedtags)
*/
|