文字列からデータ テーブルへ (コードの最適化)ループ内の .exe ファイルは、(効率的に) データ テーブルに変換する必要がある文字列を返します。
文字列には次の特徴があります。
- 行は「\n」文字で制限されていますが、必要に応じて変更できます
- 列は「、」で制限されます
- 物乞いと文字列の終わりには、削除する必要がある行があります
- 日時の行は異なる場合があります。 例では 7 が表示されますが、これらは最大 100k 行になる可能性があります。
- この操作は、ループ内で数百の順序で繰り返されます (文字列は異なりますが、行数は同じです)。
str_query =
"*> mycolumnname
1,mycolumnname,50.,mycolumdescription,mycolumnunits
* End exe...
*> mycolumnname, 31-Jan-2020 14:30:00, 31-Jan-2020 15:30:00, blabla, 7
31-Jan-20 14:30:00,mycolumnname,10.60466
31-Jan-20 14:40:00,mycolumnname,10.60466
31-Jan-20 14:50:00,mycolumnname,10.60466
31-Jan-20 15:00:00,mycolumnname,10.60466
31-Jan-20 15:10:00,mycolumnname,10.60466
31-Jan-20 15:20:00,mycolumnname,10.60466
31-Jan-20 15:30:00,mycolumnname,10.60466
* End exe...
...
...
...
...
";
この文字列を次の (積み上げ) 形式のデータ テーブルに変換するにはどうすればよいですか。
31-Jan-20 14:30:00,mycolumnname,10.60466,mycolumdescription,mycolumnunits
31-Jan-20 14:40:00,mycolumnname,10.60466,mycolumdescription,mycolumnunits
31-Jan-20 14:50:00,mycolumnname,10.60466,mycolumdescription,mycolumnunits
31-Jan-20 15:00:00,mycolumnname,10.60466,mycolumdescription,mycolumnunits
31-Jan-20 15:10:00,mycolumnname,10.60466,mycolumdescription,mycolumnunits
31-Jan-20 15:20:00,mycolumnname,10.60466,mycolumdescription,mycolumnunits
31-Jan-20 15:30:00,mycolumnname,10.60466,mycolumdescription,mycolumnunits
これらの文字列からデータ テーブルへの操作を効率的に管理できる JSL 関数はどれですか (メモリおよび/または CPU に関して)。
マルチスレッドまたはマルチプロセッシングは使用できません。これはデータベースのクエリです。
Re: 文字列からデータテーブルへ (コードの最適化)FN、
Craig のアプローチを試したか知りたいですか? あなたの例ではうまくいきましたか?
-B
Re: 文字列からデータテーブルへ (コードの最適化)...そして、CSV パラメータをその open ステートメントに渡すことができます。 出力の先頭に修正できない余分な行がある場合は、open ステートメントに最初のデータ行、列名の存在、および使用するデータ型を伝えることができます。 データが数行を超える場合は、ソース スクリプトに含まれるすべての情報を JMP に伝えた方がはるかに高速になるため、JMP は形式を推測するために余分なパスを作成しません。 ソース スクリプトは、既にインポートされたテーブル JMP にあります。
Re: 文字列からデータテーブルへ (コードの最適化)涼しい! RunProgram は blob を返すことができます。 open() 関数は、ファイル名の代わりに blob を受け入れることができます。 外部プログラムで CSV を印刷出力 (標準出力) として作成できる場合は、動作するはずです。
ここに例: https://community.jmp.com/t5/Discussions/Load-CSV-from-variable/mp/208453
Re: 文字列からデータテーブルへ (コードの最適化)はい、ほぼ CSV 形式の文字列であり、出力はある程度調整できます。
現在のコードは、RunProgram() を使用して出力文字列を取得し、次に Words() を使用してリストを取得し、次に TextToColumns() を使用しています。
文字列を直接 Open() できますか? 開いているのはファイルのみであると思われますが、これは理想的には避けるべきです。
Re: 文字列からデータテーブルへ (コードの最適化)あなたのフォーマットはCSVファイルによく似ています。 open() 関数は CSV データを理解し、列とデータ型に関する十分な情報を与えると、非常に効率的になります (開発時間と待機時間の両方)。
.exe プログラムから JMP にどのようにデータを取得していますか? (フラットファイル? runProgram()? open()? 何か他のもの?)
Re: 文字列からデータテーブルへ (コードの最適化)たぶん、2 つの部分をリストに入れることは、開始する方法ですか?
clear globals();
query =
"*> mycolumnname 1,mycolumnname,50.,mycolumdescription,mycolumnunits
* End exe...
*> mycolumnname, 31-Jan-2020 14:30:00, 31-Jan-2020 15:30:00, blabla, 7
31-Jan-20 14:30:00,mycolumnname,10.60466
31-Jan-20 14:40:00,mycolumnname,10.60466
31-Jan-20 14:50:00,mycolumnname,10.60466
31-Jan-20 15:00:00,mycolumnname,10.60466
31-Jan-20 15:10:00,mycolumnname,10.60466
31-Jan-20 15:20:00,mycolumnname,10.60466
31-Jan-20 15:30:00,mycolumnname,10.60466
* End exe...
...
...
...
...
";
query=Substitute( query, "*> mycolumnname ", "colnames=list(" );
query=Substitute( query, "* End exe...", ");" );
query=Substitute( query, "*> mycolumnname, ", "coldata=list(" );
query=Substitute( query, "* End exe...", ");" );
for(i=1, i<=5, i++, query=Substitute( query, "...", "" ));
show(query);<BR /><BR />
何を試しましたか?