加载纯文本输出而不写入文件

加载纯文本输出而不写入文件

我有一个程序(从终端运行)可以生成 4 个纯文本文件。

例如

./myprog

生成file1.dat, file2.dat, file3.dat, file4.dat

我想创建一个脚本,允许我运行myprog和加载(读取)这四个“文件输出”,但不写入物理文件(可能只在内存中加载该文件)。这可能吗?

原因是我需要大约 70000 个这样的文件,所以我不想浪费时间保存额外的文件,我只需要使用这些信息。

===============================================

评论中问我的具体例子

  1. 三角软件(用于生成数值微积分网格的免费软件,用 C 编写)读取文件mesh.poly

:

4 2 0 1
1   0     0     20
2   1     0     20
3   1     1     10
4   0     1     10

4 1
1 1 2   20 # bottom side
2 2 3   20 # right side
3 3 4   10 # top side
4 4 1   20 # left side

0

1
1 0.5 0.5 1 0.0005
  1. 该命令triangle mesh.poly生成以下文件:

mesh.node:

4  2  0  1
   1    0  0    20
   2    1  0    20
   3    1  1    10
   4    0  1    10

mesh.ele

2  3  0
   1       4     1     2
   2       2     3     4

和其他两个文件,总共:四个输出文件。

  1. 生成此文件后,我需要使用我在 Fortran 上编写的其他程序中的信息,这些程序需要*.node*.ele信息。我正在考虑编写一个.sh文件来自动执行此操作,但我可以使用 python 或任何允许我运行可执行程序的语言。

加载(读取)mesh.nodemesh.ele很容易。但我需要生成数千个物理文件作为triangle我的 Fortran 代码的输出和输入。是因为,我正在寻找一种“编写虚拟文件”的方法认为这样会更高效、更干净。

我的问题是我有大约 70000 个mesh.poly生成 70000x4 输出(和很少)的文件。

答案1

你可以使用aa内存支持的文件系统 (tmpfs), 或者FIFO(命名管道)

也许您的发行版已经tmpfs在某处设置了支持的安装点。您可以将其用于所有临时文件。 (例如/tmp/在某些系统和配置上)

在我的系统上,默认情况下,我在 /run/user/1000 下获得了足够大的 tmpfs,这对于您指定的 <300MiB 来说就很好了。

如果您是机器上的root用户,您可以在某处安装一个新机器并使用它。

如果失败:作为普通用户,您可以设置 4 个命名管道并将mkfifo它们用作“临时存储区域”。

然后,您的算法可以采用以下伪代码行。

make_4_fifos_with_mkfifo
foreach polyfile in directory do
  rename_fifos_to_use_given_prefix $polyfile
  run triangle $polyfile
  run fortranCMD polyfile.node $polyfile.ele ...
done

上面的代码可以用系统上现有的许多脚本语言来实现。选择您觉得舒服的任何一个。

答案2

很简单,你可以用perl或tcl编写脚本。下面是 tcl 的例子。

set fp [open "somefile" r]
set file_data [read $fp]
close $fp

set data [split $file_data "\n"]
foreach line $data {
     # do some line processing here
}

在此示例中,somefile 是文件名,内容被复制到变量 file_data 中。

了解更多信息http://wiki.tcl.tk/367

相关内容