【发布时间】:2019-02-08 21:03:08
【问题描述】:
如何按原样(或 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 下,控制台窗口正在闪烁。我怎么可能压制这个?
我将数据读入数据集的想法如下:
- 如果您在非常(!)慢速服务器路径上有数据
- 如果您有相对较大的数据文件
- 如果您从多个文件中拟合并绘制多条曲线
例如:
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...>
我的问题:
- 每次绘制或拟合
FILE和''时,FILE的内容会一次又一次地加载还是会一直保存在内存中? - 如果放大,例如在交互式 wxt 终端中,在我看来好像需要再次加载文件。这是真的吗?
- 如果文件一次又一次地加载,最好在开始时将文件一次加载到数据块中,然后使用这些数据块?
感谢任何解释、限制、利弊和 cmet。
加法:
(部分答案,但有新问题): 对于 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" 调用此构造,它会在 Win7/64 下重现地使 gnuplot 崩溃(没有机会测试 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
这有什么问题?谁能解释一下为什么以及如何解决这个问题?
【问题讨论】:
-
如果您在慢速连接的另一端有多个大数据文件,那么在同一端运行 gnuplot 并仅将输出发送回本地会话可能更有意义。
-
原则上是的,但是,使用相同的设置,我也在绘制本地数据。然后我需要管理不同位置的两个 gnuplot 安装。除此之外,我想,低传输率是一回事,但响应时间长是另一回事。即使文件很小,缓慢的响应时间也会使从服务器绘制数据变得痛苦。因此,我的问题是,当您的代码中有
FILE或''时,是否会再次访问和加载文件。他们是吗?因此,我打算通过在开始时仅将文件一次加载到数据块中来缩短此时间。
标签: gnuplot data-files