Как создать пробел в операторе печати? - PullRequest
0 голосов
/ 03 октября 2018

У меня есть код, который ранее работал, когда я запускал IDL на моем Linux-компьютере.Я не уверен, почему формат изменился, когда я запускаю IDL на моем компьютере с Windows.

В частности, похоже, что проблема в том, что оператор print не создает пробел между значениями.

OPENW, prof2d, outfilename+'.prf', /GET_LUN
printf, prof2d, numalts, altstart, delalt, numlats, latstart,dellat 
printf, prof2d, format='(1(f3.1),500(i))', 0.0, findgen(num)+1.0
for i=0, numlats-1 do begin
printf, prof2d, FORMAT='(1(i),500(e15.8))',i+1, p2d(i,*)
endfor   
CLOSE, prof2d & FREE_LUN, prof2d
popd

Кажется, это строка, в которой есть проблема: printf, prof2d, FORMAT = '(1 (i), 500 (e15.8))', i + 1, p2d (i,*)

Окно Linux выдает:

  1 0.00000000e+00 0.00000000e+00 0.00000000e+00....9.17620019e+09

, в то время как окно Windows выдает:

1 0,00000000e + 000,00000000e + 000,00000000e + 00 .... 9.17620019e + 09

Любая помощь будет принята с благодарностью.

С уважением,

Alex

1 Ответ

0 голосов
/ 04 октября 2018

В вашем примере:

printf, prof2d, FORMAT='(1(i),500(e15.8))',i+1, p2d(i,*)

«e15.8» означает экспоненциальную запись («e») с 15 пробелами для числа и 8 цифрами после десятичного знака.Именно это, похоже, и делает Linux-бокс, поскольку «0.00000000e + 00» имеет длину всего 14 символов, давая один пробел между значениями.Я не знаю, почему Windows-бокс делает что-то другое.Но чтобы увеличить расстояние между значениями, увеличьте 15 до 16 или более, например:

printf, prof2d, FORMAT='(1(i),500(e16.8))',i+1, p2d(i,*)

Это даст два пробела между значениями в Linux, но должно помочь вам в Windows.

...