Скрипты Gnuplot: использовать путь относительно файла, а не каталога выполнения? - PullRequest
0 голосов
/ 31 октября 2018

Я создаю сценарий Gnuplot в той же папке, что и файл .dat, который мне нужно построить, и я бы хотел, чтобы он работал, даже если он вызывается из другого каталога. К сожалению, кажется, что относительные пути работают из каталога, в котором вызывается Gnuplot, , а не , в котором находится файл сценария. Так, например:

gnuplot folder/script.gp

потерпит неудачу, если файл folder/data.dat и скрипт скажет plot "data.dat". Есть ли способ обойти это? Как переменная в Gnuplot, содержащая местоположение исполняемого в данный момент скрипта?

Ответы [ 2 ]

0 голосов
/ 15 ноября 2018

Ваш разделитель между каталогом и именем файла /, поэтому я предполагаю, что вы работаете в Linux. Вот следующие работы:

  • Если gnuplot запускается со сценарием для выполнения, то существует переменная ARG0, которая содержит полное имя сценария, указанное в командной строке.
  • С помощью вызова system мы можем отправить это имя сценария обратно в оболочку, которая имеет команду dirname для извлечения части каталога имени сценария.
  • Теперь мы можем использовать внутренние строковые функции gnuplot для построения путей к файлам, особенно ., который объединяет две строки.

Вы сказали, что у вас есть скрипт gnuplot folder/script.gp и файл данных folder/data.txt, тогда скрипт должен содержать что-то вроде этого:

print ARG0       # just for debugging
working_directory = system("dirname ".ARG0)."/"
datafile = working_directory."data.dat"
outputfile = working_directory."graph.png"

print datafile   # just for debugging
print outputfile # just for debugging

set terminal pngcairo
set output outputfile
plot datafile w l

Это также работает, если вы находитесь в «папке», тогда dirname возвращает ., и результирующий файл данных будет ./data.dat. Я не проверял «специальные» имена каталогов, содержащие пробелы, ... я не ожидал, что это сработает.

Протестировано с gnuplot 5.0.5 на Debian 9.6, gnuplot использует оболочку sh для system. Я не искал решение для Windows.

0 голосов
/ 31 октября 2018
set loadpath "wherever/my/stuff/is/"

Это может быть либо абсолютное дерево каталогов, либо относительно текущего каталога.

В качестве альтернативы, как вы могли бы в командной строке оболочки вы могли бы сказать gnuplot

cd "/new/current/directory"

, после чего это будет первое место, где он ищет файлы.

...