2

I want to use some printf to print to a file.

I can use

for{i in set1}  printf '%10.5f\n',var1[i] >> ('a' & 'very' & 'long' & 'string' & 123 & sprintf('%5d', foo));
for{i in set2}  printf '%10.5f\n',var2[i] >> ('a' & 'very' & 'long' & 'string' & 123 & sprintf('%5d', foo));
for{i in set3}  printf '%10.5f\n',var3[i] >> ('a' & 'very' & 'long' & 'string' & 123 & sprintf('%5d', foo));

But I don't want to repeat the file each time.

It seems option log_file should do the trick, but doesn't work for me: the file is created but empty, and the output is printed in the console.

4

2 回答 2

2

为避免重复文件名,请将其存储在参数中:

param out symbolic =
  'a' & 'very' & 'long' & 'string' & 123 & sprintf('%5d', foo);
for{i in set1} printf '%10.5f\n',var1[i] >> (out);
for{i in set2} printf '%10.5f\n',var2[i] >> (out);
for{i in set3} printf '%10.5f\n',var3[i] >> (out);

请注意,括号out很重要,因为它们允许传递表达式(在这种情况下为参数引用)而不是逐字文本作为文件名。

于 2013-12-15T15:46:58.013 回答
1

我发现我必须option log_file在打印后更改,因为似乎 AMPL 不会关闭文件,即使我使用close.

然后,以下工作:

print "Hello, ";              # Printed to the console
option log_file "test.txt";
print "World";                # Printed to the console and file
option log_file ""; 
close;
于 2013-12-14T22:31:02.183 回答