%USER_STRING Get/set a user specific string % % Examples: % string = user_string(string_name) % saved = user_string(string_name, new_string) % % Function to get and set a string in a system or user specific file. This % enables, for example, system specific paths to binaries to be saved. % % IN: % string_name - String containing the name of the string required. The % string is extracted from a file called (string_name).txt, % stored in the same directory as user_string.m. % new_string - The new string to be saved under the name given by % string_name. % % OUT: % string - The currently saved string. Default: ''. % saved - Boolean indicating whether the save was succesful % Copyright (C) Oliver Woodford 2011-2013 % This method of saving paths avoids changing .m files which might be in a % version control system. Instead it saves the user dependent paths in % separate files with a .txt extension, which need not be checked in to % the version control system. Thank you to Jonas Dorn for suggesting this % approach. % 10/01/2013 - Access files in text, not binary mode, as latter can cause % errors. Thanks to Christian for pointing this out. function string = user_string(string_name, string) if ~ischar(string_name) error('string_name must be a string.'); end % Create the full filename string_name = fullfile(fileparts(mfilename('fullpath')), '.ignore', [string_name '.txt']); if nargin > 1 % Set string if ~ischar(string) error('new_string must be a string.'); end % Make sure the save directory exists dname = fileparts(string_name); if ~exist(dname, 'dir') % Create the directory try if ~mkdir(dname) string = false; return end catch string = false; return end % Make it hidden try fileattrib(dname, '+h'); catch end end % Write the file fid = fopen(string_name, 'wt'); if fid == -1 string = false; return end try fprintf(fid, '%s', string); catch fclose(fid); string = false; return end fclose(fid); string = true; else % Get string fid = fopen(string_name, 'rt'); if fid == -1 string = ''; return end string = fgetl(fid); fclose(fid); end return