gnuplot: загрузить файл данных 1: 1 в блок данных - PullRequest
0 голосов
/ 09 февраля 2019

Как я могу прочитать файл данных как есть (или 1: 1) в блок данных?И как я мог сделать эту платформу самостоятельно?Моя попытка до сих пор:

### load datafile "as is" into datablock for different platforms

FILE = 'Test.dat'

if (GPVAL_SYSNAME[:7] eq "Windows") {          # "Windows_NT-6.1" is shown on a Win7 system
    load "< echo $Data ^<^<EOD & type ".FILE
}
if (GPVAL_SYSNAME eq "Linux") {                # that's shown on a Raspberry
    load '< echo "\$Data << EOD" & cat '.FILE
}
if (GPVAL_SYSNAME eq "Darwin") {               # this was shown on a MacOS Sierra 10.12.6
    # how to load a datafile into datablock under MacOS?
}

print $Data
### end of code

Какое значение GPVAL_SYSNAME на Win10, других Linux и других системах MacOS?Сколько if утверждений мне нужно, чтобы охватить все распространенные системы?По крайней мере, под Windows окно консоли мигает.Как я мог бы переоценить это?

Мои мысли о чтении данных в наборе данных следующие:

  1. если у вас есть данные на очень (!) Медленном пути к серверу
  2. если у вас относительно большие файлы данных
  3. если вы умещаете и строите несколько кривых из нескольких файлов

Например, что-то вроде:

FILE1 = '\\SlowServer\blah\BigDataFile.dat'
FILE2 = '\\SlowerServer\blah\BiggerDataFile.dat'
FILE3 = '\\SlowestServer\blah\BiggestDataFile.dat'
fit f(x) FILE1 u 1:2 via a,c,d,e
fit g(x) FILE2 u 2:3 via f,g,h,i
fit h(x) FILE3 u 2:3 via j,k,l,m
plot FILE1 u 1:2:3 w l, \
     '' u (function($1)):(function($2)):3 with <whatever>, \
     FILE2 u 4:5:6 w l, \
     '' u 1:2:3 w l, \
     FILE3 u 7:8:9 w l, \
     '' u 1:2:3 w l , \
     <and more...>

Мои вопросы:

  1. Каждый раз, когда вы строите или подгоняете FILE и '', будет ли загружаться содержимое FILE снова и снова или оно будет сохраняться в памяти?
  2. ЕслиВы увеличиваете масштаб, например, в интерактивном терминале wxt, мне кажется, что файлы должны быть загружены снова.Это правда?
  3. Если файлы загружаются снова и снова, не лучше ли загружать файлы один раз в блоки данных один раз в начале, а затем работать с этими блоками данных?

Любые объяснения, ограничения, плюсы и минусы и комментарии приветствуются.

Дополнение:

(частичный ответ, но с новым вопросом): Для систем Windows,Linux и MacOS следующее, кажется, работает нормально.Linux и MacOS, по-видимому, идентичны.

if (GPVAL_SYSNAME[:7] eq "Windows") { load '< echo $Data ^<^<EOD & type "Test.dat"' }
if (GPVAL_SYSNAME eq "Linux" )      { load '< echo "\$Data << EOD" & cat "Test.dat"' }
if (GPVAL_SYSNAME eq "Darwin")      { load '< echo "\$Data << EOD" & cat "Test.dat"' }

Однако, если я хочу вызвать эту конструкцию из внешней процедуры gnuplot "FileToDatablock.gpp", она воспроизводимо завершает работу gnuplot под Win7 / 64 (не было возможности протестироватьLinux или MacOS).

"FileToDatablock.gpp"

### Load datafile "as is" 1:1 into datablock for different platforms
# ARG1 = input filename
# ARG2 = output datablock
# usage example: call "FileToDatablock.gpp" "Test.dat" "$Data"

if (ARGC<1) { ARG1 = "Test.dat" }
if (ARGC<2) { ARG2 = "$Data" }
if (GPVAL_SYSNAME[:7] eq "Windows") { load '< echo '.ARG2.' ^<^<EOD & type "'.ARG1.'"' }
if (GPVAL_SYSNAME eq "Linux" ) { load '< echo "\'.ARG2.' << EOD" & cat "'.ARG1.'"' }
if (GPVAL_SYSNAME eq "Darwin") { load '< echo "\'.ARG2.' << EOD" & cat "'.ARG1.'"' }
### end of code

И файл, который вызывает эту процедуру:

### load datafile 1:1 into datablock
reset session

# this works fine under Win7/64
FILE = "Test.dat"
DATA = "$Data"
load '< echo '.DATA.' ^<^<EOD & type "'.FILE.'"'
print $Data

# this crashes gnuplot under Win7/64
call "tbFileToDatablock.gpp" "Test.dat" "$Data"
print $Data
### end of code

Что с этим не так?Кто-нибудь может объяснить, почему и как решить эту проблему?

1 Ответ

0 голосов
/ 10 февраля 2019

Возможно прочитать файл в блок данных, если вы знаете формат входных данных.Например, у вас есть файл MyFile1 с номерами в 3 столбцах, которые вы хотите прочитать в блоке данных MyBlock1, а затем построить его 3-мя способами:

set table $MyBlock1
   plot "MyFile1" using 1:2:3 with table
unset table
plot $MyBlock1 using 1:2 with points
plot $MyBlock1 using 2:3 with points
plot $MyBlock1 using 1:3 with lines

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

...