我正在尝试在群集上运行模型,但IDL在使用openw时会抛出错误,因为文件位置名称中有[](这是我在一些测试后的结论)。我想做的是 将IDL添加到包含转义字符的略有不同的字符串。我相信一种方法是使用正则表达式,但我可以使用一些帮助,特别是不太了解IDL。
temp_dir='/local/scratch/1940320[2000].cluster.name/temp/area'
openw,12,temp_dir+'file.dat'
我将如何发送:
temp_dir2='/local/scratch/1940320\[2000\].cluster.name/temp/area'
openw,12,temp_dir2+'file.dat'
该数字代表集群上的jobid,在运行之前我不知道这一点。 /local/scratch/$PBS_JOBID.cluster.name保存在$ TMPDIR中,我正在使用getenv('TMPDIR')
谢谢!
答案 0 :(得分:0)
嗯,这有点尴尬,但这应该有效:
IDL> temp_dir = '/local/scratch/1940320[2000].cluster.name/temp/area'
IDL> temp_dir = mg_streplace(temp_dir, '(\[|\])', '\\$1', /global)
IDL> print, temp_dir
/local/scratch/1940320\\[2000\\].cluster.name/temp/area
IDL> temp_dir = mg_streplace(temp_dir, '\\\\', '\', /global)
IDL> print, temp_dir
/local/scratch/1940320\[2000\].cluster.name/temp/area
GitHub上提供了 MG_STREPLACE
。
答案 1 :(得分:0)
一位同事为我写了这封信:
IDL> spawn,'printenv TMPDIR | sed "s/\[/\\\[/" | sed "s/\]/\\\]/"',mytemp