MATLABからC#ソフトウェアにデータを転送する必要があります。 MATLABからのデータも、オフラインで編集可能(MATLAB外およびC#ソフトウェア)である必要があります。これを達成するために、私のMATLABコードは、読み取り可能なパターンのデータをテキストファイルに出力します。たとえば:C#ので文字列からキーワードを抽出し、C#のプロパティに割り当てます。
<L> pt: [0.001,2,3], spd: 100, cfg: fut, daq: on, id: [1,1] </L>
<L> pt: [0.002,3,4], cfg: nut, spd: 100, id: [1,1], daq: on</L>
<C> pt: [0.02,5,3], spd: 100, daq: on, id: [1,1] </C>
<L> pt: [1.002,3,4], spd: 100, daq: off</L>
が、私は、それぞれの行を解析し、これらのキーワードを抽出し、プロパティに割り当てたい:
enum PathType { L, C}
class Path
{
public PathType Type { get; set; }
public float[] Pt { get; set; }
public int Spd { get; set; }
public string Cfg { get; set; }
public bool Daq { get; set; }
public int[] Id { get; set; }
}
だから、1行目のために、私は何かを持っているつもりのようになります。 4行目のため
var path = new Path {
PathType = PathType.L,
Pt = new []{ 0.001, 2, 3 },
Spd = 100,
Cfg = "fut",
Daq = true,
Id = new []{ 1, 1 }};
:
var path = new Path {
PathType = PathType.L,
Pt = new []{ 1.002, 3, 4 },
Spd = 100,
Cfg = null,
Daq = false,
Id = null;
キーワードは異なる順序で配置され、すべての行に表示されない場合があるため、これらの情報を抽出するために単一の正規表現を使用することはできません。
var typeReg = new Regex(@"<(\w+)>");
var ptReg = new Regex(@"pt:\s+(?<open>\[)[^\[]*(?<close-open>\])(?(open))");
var spdReg = new Regex(@"spd:\s+(\d+)");
var cfgReg = new Regex(@"cfg:\s+(fut|nut)");
var daqReg = new Regex(@"daq:\s+(on|off)");
var idReg = new Regex(@"id:\s+(?<open>\[)[^\[]*(?<close-open>\])(?(open))");
これは動作しますが、これを行うにはもっと良い方法があるのでしょうか?
L; pt: [0.001,2,3]; spd: 100; cfg: fut; daq: on; id: [1,1]
そしてIはデリミタ;
で文字列を分割した後x.StartWith('...')
で各部分を確認することができる:
は私のような異なるパターンのデータを印刷しなければなりません。しかし、このように、私は現在のパターンほど読みにくいと感じています。
xml
を使用したくないのは、テキストファイルを希望のサイズより大きくするためです。
MATLABはこれらの文字列を作成しています。解析しているファイルを生成している場合は、ファイルサイズが気になる場合はXMLの代わりにJSONを使用します。 MATLABがそれらを生成している場合は、あなたが言ったように分割された文字列を解析する必要があります。 – krillgar
現在のフォームのデータファイルのサイズはどれくらいですか?オブジェクトのサイズと数の点で。 –
@krillgar文字列を作成するコードをMATLABで作成しました。私はいつも私のC#コードに合うようにそれらを変更することができます。 JSONは良いと思います。私はそれを試してみましょう。 – Anthony