データ処理に使用する関数を読み込ませる

csvファイルのデータをアプリで処理する際に、事前に処理に使用する関数を別の設定ファイル(例えばtxtファイル)から読み込んでおいて、その関数を使用して処理するということを考えております。(関数を種々変えながら最適な関数を選択するため)
関数は、設定ファイルの中の関数を書き換えることで適用される関数が変えられるようにすることを考えています。
関数に関しては無名関数や関数ハンドルで設定可能というのはわかったのですが、設定したファイルからどのようにして関数を読み込めばいいのかがよくわかりません。
readtableだと勝手に切り刻まれてしまいますし、csvでは文字が使えなさそうですし。
何か簡潔でよい方法はないでしょうか。
例)
入力:xxxx.csv(データファイル), zzzz.txt(関数設定ファイル),→読み込み→計算:(〇〇〇〇.exe)→出力:xxxx2.csv(zzzz.txtに設定された関数でxxxx.csvを処理したデータファイル)
zzzz.txt(関数設定ファイル)をどのようにして読み込むか?

12 Kommentare

maeda
maeda am 28 Feb. 2019
Hironoriさんが試みたいことは、1つのcsvファイルを読み込み、複数の自作関数でcsvファイルを計算し、計算した複数の結果を別に用意した1つのcsvファイルとして保存したいということでしょうか。
madhan ravi
madhan ravi am 28 Feb. 2019
doc dlmread
doc csvread
HIronori Kamachi
HIronori Kamachi am 28 Feb. 2019
はい。ただ、いったん作成したexeファイルはそのままで、自作関数のみを変更したいニーズがありますので、自作関数を別のファイルに記述しておき、exeファイルの動作時にそのファイルから自作関数を読み込み、csvファイル(データファイル)を読み込んで自作関数で計算し、計算した結果を別のデータ処理出力ファイル(csvファイル)として保存したいということです。
Yoshio
Yoshio am 28 Feb. 2019
exeファイル、〇〇〇〇.exeは、固定処理を行い、この中で、指定した自作関数を使うということで良いでしょうか? またこのexeではcsvファイルの読み込みも行うのでしょうか? exeファイルの機能が今ひとつわかりませんでした。
HIronori Kamachi
HIronori Kamachi am 28 Feb. 2019
はい、その通りです。
exeファイルの処理は
①自作関数が記述されているファイルから自作関数を読み込む
②入力データファイル(csvファイル)からデータを読み込む
③自作関数で、②で読み込んだデータを処理する
④③で処理したデータを出力データファイル(csvファイル)に書き込む
を想定しています。
Yoshio
Yoshio am 1 Mär. 2019
追加ですみません。自作関数というのはm-functionの事でしょうか?またMATLABとexeの関係が分かりませんでした。MATLABを使ったプログラム開発全体の流れと、入出力の概要を教えてください。
HIronori Kamachi
HIronori Kamachi am 1 Mär. 2019
MATLABで、ある手法を使って、いくつかの測定器の入力データを組み合わせ、既存のデータから製品のある特性を事前に推定するプログラム(exe)を作成、運用しております。
最初に標本データを食わせて目的変数の予測性が高くなるような入力変数を選択し、定式化して使用するところまで現行プログラムに含まれており、そこに入力データの関数による事前処理も追加できるように検討中です。
現況、定式化の際に標本データの一部データを関数処理したものを使うと予測性が高くなる場合があります。実際に運用する際のデータは直接入力されるために関数処理できないため、プログラムの中で処理する必要があります。そこで、必要があれば外から関数を入力できる形式にしておくと便利なのでそうしたいということです。
要するに、一旦作成したプログラムは変更せずに、外からのパラメータ選択や関数付与だけで運用したいわけです。
入力は、種々の測定器から入ってくるデータ(流量計、回転数計、物性測定データ等)になります。時系列的に時々刻々入力されてきます(csvファイル形式で)。
これに、推定計算で求めたデータを追加し同様にファイルに出力しています。
まだわかりにくいでしょうか。
Yoshio
Yoshio am 1 Mär. 2019
Bearbeitet: Yoshio am 1 Mär. 2019
詳細なご説明ありがとうございます。
1.MATLABでプログラムを開発: m-file => Exeプログラム
2.exe化したプログラム 設定ファイル => 自作関数読み込み
ということと理解しました。
自作関数は、m-fileを読み込んで使うのでしょうか?それともdllを読み込んで使いたいのでしょうか?
m-fileを読み込む場合には、ファイルの内容をテキストとして読み取る fileread が使えると思います。
またやり方として、まずexe化する前に、全ての流れをスクリプトで作成し、実行できたらexe化することをお勧めします。
HIronori Kamachi
HIronori Kamachi am 1 Mär. 2019
やり方はおっしゃる通りスクリプトで作成、正常動作確認後exe化して配布しています。
それを、解析を行う方がパラメータや使用する変数の選択を行って予測性が高くなるように調整しています。
自作関数は、exe化後に関数(というか式)が変更できるように、簡単にtxtファイルあたりで作成したのを読み込んで使用するような形を考えています。
Yoshio
Yoshio am 1 Mär. 2019
Bearbeitet: Yoshio am 1 Mär. 2019
1.設定ファイル => 自作関数読み込み
これもスクリプトで実装し動作確認された上でのご質問でしょうか?
2.ご質問の自作関数の読み込みは、m-fileと想定しましたが、m-fileの中身相当の式をテキストファイル.txtから読み込んでexe内で定義したいということでしょうか? もしそうでしたら、簡単な例を示して頂けますか。m-fileの読み込みでだと、わかるのですが、式の読み込みで実行のイメージがつかめません。1で実装されているのでしたら、コードを示して頂ければと思います。
HIronori Kamachi
HIronori Kamachi am 4 Mär. 2019
1. とりあえず簡単にスクリプト書いてfilereadで想定した自作関数(ヘッダを含めて4行、3つの想定関数例を記述したテキストファイル)の読み込みはテキストデータとして1行のキャラクタデータとして読み込めたので、後はこれを4行に分けて1行ずつ取得?分離?すればいいことだと思います。
2.m-fileというのがよくわかっていないので簡単に説明もしくは例をご教示いただけたらと思います。もしかしてhogehoge.mに関数を設定しておくということでしょうか。
その場合、メインの処理用の.exeが動いている際に例えば同一フォルダに入れておいて、hogehoge.mを読みに行ったり、exeが動いている最中に、別の外部機器(プログラム)からのデータ入力ファイル(.csvファイル)がフォルダ内に書き込まれるまではexeは一時停止しますので、それを利用してhogehoge.mの入れ替えなどはできるのでしょうか。
HIronori Kamachi
HIronori Kamachi am 5 Mär. 2019
とりあえずスクリプトでは動作確認できました。
まだ組み込みは行ってませんが。
myfunction2.txt の中身は以下の通りです
myfunction_setting
@(a,b,c)a*log10(b*c)
@(a,b,c)a*b*c
動作確認できたスクリプトは以下の通りです
最終的には下4行はまとめて、myfunctionの定義数に伴い自動的に増減できるようにして
組み込む予定です。
fid = fopen('myfunction2.txt');
line_ex = 0;
n=0;
str1=strings;
while line_ex ~= -1
n=n+1;
line_ex = fgetl(fid);
if line_ex ~=-1
str1(n,1) = line_ex;
else
end
end
fh1=str2func(char(str1(2,1)));
fh2=str2func(char(str1(3,1)));
fktn(1,1)=fh1(5,10,10);
fktn(1,2)=fh2(2,2,10);

Melden Sie sich an, um zu kommentieren.

Antworten (0)

Kategorien

Mehr zu スクリプト finden Sie in Hilfe-Center und File Exchange

Produkte

Version

R2017a

Gefragt:

am 27 Feb. 2019

Kommentiert:

am 5 Mär. 2019

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!