ファイルに書き込まずにプレーンテキスト出力をロードする

ファイルに書き込まずにプレーンテキスト出力をロードする

4つのプレーンテキストファイルを生成するプログラム(ターミナルで実行)があります。

例えば

./myprog

生成するfile1.dat、、、、。file2.datfile3.datfile4.dat

myprogこの4つの「ファイル出力」を実行してロード(読み込み)できますが、実際のファイルに書き込むことはできない(おそらくファイルをメモリにロードすることもできる)スクリプトを作成したいと思います。可能ですか?

その理由は、このファイルが約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

そして、他の2つのファイルで合計4つの出力ファイルがあります。

  1. *.nodeこのファイルを作成したら、Fortranで作成した他のプログラムで必要な情報と情報を使用する必要があります*.ele。私は.shこれを自動化するためにファイルを書くつもりですが、Pythonや実行可能プログラムを実行できる任意の言語を使用できます。

読み込み(読み込み)mesh.nodemesh.ele簡単です。ただし、triangleFortranコードへの出力と入力で数千の物理ファイルを生成する必要があります。そのため、「ダミーファイルを書き込む」方法を探しています。これがより効率的で清潔になると思いました。

私の質問はい、70000x4の出力を生成する約70000個のファイルがありますmesh.poly(最小数)。

答え1

aaを使用できます。メモリベースのファイルシステム(tmpfs)またはFIFO(名前付きパイプ)

ディストリビューションですでにtmpfsサポートされているマウントポイントがどこかに設定されている可能性があります。すべての一時ファイルに使用できます。 (例:/tmp/一部のシステムおよび構成では)

私のシステムでは、デフォルトでは/run/user/1000の下に十分な大きさのtmpfsがあり、これは指定した<300MiBに適しています。

マシンのルートは、どこかに新しいマシンをインストールして使用できます。

失敗:一般ユーザーとして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

関連情報