2013-12-14 3 views
2

printf을 사용하여 파일로 인쇄하고 싶습니다.AMPL로 파일을 인쇄하는 방법은 무엇입니까? `option log_file`이 작동하지 않습니다

나는

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)); 

을 사용할 수 있습니다하지만 파일마다 반복하고 싶지 않아요.

option log_file이 트릭을해야하지만 나에게 적합하지 않은 것 같습니다. 파일은 생성되었지만 비어 있으며 출력은 콘솔에 인쇄됩니다.

답변

1

인쇄 후 option log_file을 변경해야한다는 것을 발견했습니다. close을 사용해도 AMPL이 파일을 닫지 않는 것 같습니다. 그런 다음

, 다음 작품 :

print "Hello, ";    # Printed to the console 
option log_file "test.txt"; 
print "World";    # Printed to the console and file 
option log_file ""; 
close; 
+0

글쎄, 내 컴퓨터에서'close; '없이 잘 동작한다. – Ali

+0

@Ali 나는 Windows XP를 사용하고'option log_file "없이;"; close;'생성 된 파일은 비어 있으며, ampl.exe가 사용 중이기 때문에 파일의 이름을 변경하거나 삭제할 수 없습니다. 어떤 OS를 사용합니까? – Oriol

+0

아, 재미있다. 나는 리눅스에있다. 하지만 아마 OS가 아닙니다. 커맨드 라인에서'ampl.exe your_model.mod'를 실행할 수 있습니까? 이 방법으로 ampl.exe는 모델을 실행 한 후에 종료되며 더 이상 ampl.exe에서 로그 파일을 사용할 수 없습니다. – Ali

2

은 파일 이름을 반복하지 않도록 매개 변수에 저장하려면 : 그들은 통과 할 수 있기 때문에, out 주위에 괄호가 중요하다는 것을

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); 

주 파일 이름으로 축약 된 텍스트가 아닌 표현식 (이 경우 매개 변수 참조).

+0

고마워, 나는 그런 걸 시도했지만 AMPL은 문자열을 숫자로 변환하려고 시도하고 오류를 던졌다. – Oriol