2

I would like to manipulate the file system from some GAMS code. I am coming to this project mid-stream, and as a GAMS newbie, but am used to writing cross-platform file manipulations in other languages. It would be good for this code to be cross-platform Linux and Windows. Right now there is a commented-out line

*$call 'mkdir "%runfolder%"'

that I would like to un-comment (enable), however, I am having a hard time finding documentation on whether this would work cross-platform (I suspect not), and if not, how I could do this in a cross-platform way.

How can I manipulate the file system in a way that is guaranteed to work cross-platform?

Serj-Tm
  • 16,581
  • 4
  • 54
  • 61
Elaine Hale
  • 1,408
  • 1
  • 10
  • 10

1 Answers1

3

Try using a global variable that defines the file separator. You can do this by querying the system.filesys system variable and setting the value accordingly. Such as:

* ----- Platform Specific Adjustments
* Setup the file separator to use for relative pathnames 
$iftheni %system.filesys% == DOS $setglobal filesep "\"
$elseifi %system.filesys% == MS95 $setglobal filesep "\"
$elseifi %system.filesys% == MSNT $setglobal filesep "\"
$else $setglobal filesep "/"
$endif

Then you can use this when you need to specify paths, as in:

* ----- Set data and output directories
* By default look for data in the sibling directory "data"
$if NOT set data_dir    $setglobal data_dir ..%filesep%data%filesep%   

Note that GAMS doesn't let you indent $if and related directives.

Bryan P
  • 5,900
  • 5
  • 34
  • 49
  • Bryan P, I did not specifically ask about the file separator, but the technique certainly gets at the right idea. (Thank you!) For archival purposes, maybe the answer should be rewritten either to answer my particular question or to explain the technique in general? – Elaine Hale Mar 26 '14 at 22:11
  • I see now that mkdir should work on Windows, so maybe your answer is more right than my question ... I'll try to clean all this up later. Maybe in the meantime someone will make a gams tag for me :) – Elaine Hale Mar 26 '14 at 22:34