【问题标题】:How to read a list of data-files in order to use variables in GNUplot?如何读取数据文件列表以在 GNUplot 中使用变量?
【发布时间】:2019-10-03 23:19:01
【问题描述】:

我在一台 Linux 电脑上工作。我需要将文件列表(几百个)中的每个数据文件放入 Gnuplot 的列表文件(txt)中。

当我对列表文件中的多个文件使用“gnu-fitting 脚本”时,如何读取列表文件(txt)中的每个文件名并将每个数据文件(txt)中的变量提取到我的 gnu 适配脚本?

我更喜欢在我的 gnu 脚本中使用它!但如果可能的话,请让我知道任何可能的 shell 脚本。

所以,我需要知道如何制作...“循环过程”来读取列表文件中的文件名,以便对列表中的许多数据文件执行相同的拟合过程 轻松~!

例如)像 [do ... while] 这样 Gnuplot 可以从列表文件中连续读取许多数据文件名。

在 Gnuplot 中可以吗??

谢谢。

===

@我现在有一个适用于单个数据文件的 gnu 拟合脚本(假设是一个简单的数值函数)。

但是,在脚本中,我每次都必须在当前脚本中指定“数据文件的名称”。

但是,我想知道如何将此脚本与自动在列表文件中指定的许多数据文件的循环过程一起应用。

所以我想知道如何在 gnu-script 中实现这个循环过程。 我需要在我的 gnu-scipt 中用 C 语言做类似...的事情;

@ 做,[读取列表文件中的数据文件],[运行 gnu-ftting] while (eof)。

@A:一个简单的 Gnu 拟合脚本。 @B:每行包含许多数据文件名的列表文件。

通过运行“A”,我必须连续处理“B”中的所有数据文件......!!

这就是我的观点。

理解有用吗?? 谢谢。

例如,

"fit f(x) "Test001.dat" u 1:2 via a,b,c"

通常情况下,我必须像这样指定数据文件的“名称”~!!

但是,我需要应用从“Test0001.dat”到Test1000.dat的相同拟合过程~!! (连续1000个文件~!)

所以,两个主要问题~!!

@如何在 Gnuplot 中循环读取文件名? @如何将数据文件的名称作为脚本中的变量??

谢谢。

【问题讨论】:

  • 不清楚问题是什么或您在问什么。请显示相关代码并说明您遇到的确切问题或错误。另请参阅How to create a Minimal, Complete, and Verifiable example
  • 好的。对不起我的英语简短......我想使用我的“gnu-script”为列表文件中的许多数据文件制作一个自动拟合结果,它具有相同的格式。问题是我不知道如何读取和导入列表文件中列出的众多文件中的数据。所以,我想自动读取列表文件每一行中的文件名,并尝试将每个文件中的数据用于我的拟合脚本。
  • 我的 gnu-script 非常适合单个数据文件~!!但是,我想让它成为列表文件中众多文件的自动处理。在这种情况下,如何读取列表文件中的文件名并将数据作为变量导入我的 gnu-script?这就是我的观点~!!
  • 所以,我需要实现“循环过程”以从列表文件(txt)中读取文件名并将这些数据提取到我的 gnuplot-fitting-script 中,该脚本目前仅工作对于已经写在我的脚本中的“单个文件名”。
  • 您应该进行基础研究并做出努力。请显示相关代码并说明您遇到问题的地方。另见Why is the “how to move the turtle in logo” question closed?How to create a Minimal, Complete, and Verifiable example

标签: linux file gnuplot


【解决方案1】:

根据您想要做什么,以下可能是一个起点...

### loop in gnuplot with generating filename
reset session

myFile(n) = sprintf("Test%04d.dat", n)
f(x) = a*x**2 + b*x + c

do for [i=1:1000] {
    fit f(x) myFile(i) u 1:2 via a,b,c
    print a, b, c
    # or do something else...
}
### end of code

加法:

### loop certain files in a directory
reset session

myFileList = system('ls Test*.dat')      # Linux
myFileList = system('dir /b Test*.dat')  # Windows

f(x) = a*x**2 + b*x + c

do for [myFile in myFileList] {
    fit f(x) myFile u 1:2 via a,b,c
    print a, b, c
    # or do something else...
}
### end of code

【讨论】:

  • 好的。谢谢。明白了~!!
  • 还有一点~?我可以使用列表文件而不是使用“sprintf”吗? (例如List = system(“./ls Test-*.dat”)......那么如何在循环中将每一行提取为变量(文件名)??似乎“word(List,i)”不是工作......在我的情况下。
猜你喜欢
  • 2023-03-08
  • 1970-01-01
  • 2013-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-14
相关资源
最近更新 更多