как вспомнить целое число в строке в gnuplot

#gnuplot

#gnuplot

Вопрос:

Я просто пытаюсь вспомнить целое число в строке, как показано ниже;

 x=1
y=4
$Data <<EOD
12 x
22 y
EOD
print $Data
  

Прямо сейчас, когда я вывожу приведенные выше строки, он будет печатать

 12 x
22 y
  

Тем не менее, мне интересно увидеть результат при печати $Data, например;

 12 1
22 4
  

Я использовал знак $ за целыми числами x и y, но это не сработало, и то же самое верно с использованием кавычек.
Есть ли способ обойти это?

Ответ №1:

Не зная вашей общей цели, трудно сказать, каков наилучший ответ. Если вы не будете изменять значения x и y между использованием $Data, то одним из решений является расширение x и y при записи $Data, а не при его чтении:

 set print $Data
print sprintf("%d 12", x)
print sprintf("%d 22", y)
unset print

plot $Data using 1:2 with linespoints
  

Если вам действительно нужно извлечь строку «foo» из каждой строки $Data и получить текущее значение переменной с этим именем:

 $Data << EOD
    x 12
    y 22
EOD

x = 3; y = 5
do for [ i=1: |$Data| ] {
    print value(word($Data[i],1)), " ", word($Data[i],2)
}
    3 12
    5 22
  

Обратите внимание, что вы должны добавить явный пробел в середине print инструкции.

Чтобы сделать это внутри команды plot:

Редактировать: По-видимому, программа запутывается, если имя переменной, считываемое в, является конкретно «x», потому что это также имя зависимой переменной по умолчанию вдоль горизонтальной оси. Вы можете устранить эту двусмысленность, временно переименовав имя зависимой переменной по умолчанию (программа называет это «фиктивным» именем).

 set dummy not_really_x
plot $Data using (value(strcol(1))) : (column(2)) with linespoints
  

введите описание изображения здесь

Комментарии:

1. Большое вам спасибо за помощь и сокращенные коды. Цель состоит в том, чтобы получить текущие значения и сохранить их в $Data, чтобы я мог использовать их для построения некоторых данных.

2. Тогда, похоже, первого примера, приведенного в ответе, будет достаточно. Я изменю его, чтобы показать команду plot.

3. Привет, Итан, я не знаю, когда я строю график с помощью этой команды, первое значение x всегда равно 0. Вместо этого отображается 0 12 на 3 12. Вы проверили вывод?

4. Если вы построите вторую отрезанную возможность, вы сможете увидеть, о чем я говорю!

5. Да, обработка блока данных как индексируемого массива строк была введена в версии 5.2