多数のログ ファイルを 1 つのファイルに連結しようとしていますが、バージョン 13 を使用しています。JMP 14 の方がはるかに簡単です... 他の人はしばらくの間 jmp 13 を使用する予定なので、汎用スクリプトを作成する必要があります。
現時点で私が持っているスクリプトは、多数のオープンデータテーブルを生成できます。 それはうまくいきます。反復処理を行って、openDT のリストを取得できます。
しかし、連結しようとすると成功しません。 単一のファイルに連結するだけで、テーブルを開く必要さえありません。
誰かこの問題を理解するのを手伝ってくれませんか?
_____________________________________________________
開いているログの 1 つで連結関数を実行し、次の結果を生成しました。
Data Table( "test_data_1.log" ) << Concatenate(
Data Table( "test_data_2.log" ),
Data Table( "test_data_3.log" ),
Output Table( "RESULTS" ),
Create source column
);
___________________________________________________
names = {"/C:/1test/test_data_1.log", "/C:/1test/test_data_2.log", "/C:/1test/test_data_3.log"};
openDTs = {DataTable("test_data_3.log"), DataTable("test_data_2.log"), DataTable("test_data_1.log")};
名前が解決されていません: 'Results' 、Results/*###*/ へのアクセスまたは評価が発生します。
次のスクリプトでは、/*###*/ でマークされたエラーが発生します。
dirpath = Munger( Pick Directory( "JMP 13.xx locate the LOG FILES: " ), 1, "/", "" );
Set Current Directory( dirpath );
names = Files In Directory( dirpath, recursive( 1 ) );
For( i = 1, i <= N Items( names ), i++,
dt1 = Open(
names[i] = Convert File Path( dirpath ) || names[i],
columns(
Column( "STARTDATETIME", Numeric, "Continuous", Format( "y/m/d h:m:s", 26, 3 ), Input Format( "y/m/d h:m:s", 3 ) ),
Column( "FIVER", Numeric, "Continuous", Format( "Best", 12 ) ),
Column( "CLASS", Character, "Nominal" ),
Column( "BLANK", Character( 1 ), "Nominal" ),
Column( "TYPE", Character, "Nominal" ),
Column( "CSTARGET", Character, "Nominal" ),
Column( "CSACTION", Character, "Nominal" ),
Column( "NUMCODE", Numeric, "Continuous", Format( "Best", 12 ) ),
Column( "DEVICE", Character, "Nominal" ),
Column( "DATA", Character, "Nominal" ),
Column( "ENDDATE", Numeric, "Continuous", Format( "y/m/d h:m:s", 29, 6 ), Input Format( "y/m/d h:m:s", 6 ) ),
Column( "JUNK1", Numeric, "Continuous", Format( "y/m/d h:m:s", 29, 6 ), Input Format( "y/m/d h:m:s", 6 ) ),
Column( "JUNK2", Numeric, "Continuous", Format( "Best", 12 ) )
),
Import Settings(
End Of Line( CRLF, CR, LF ),
End Of Field( Other( "0x7c" ), CSV( 0 ) ),
Strip Quotes( 1 ),
Use Apostrophe as Quotation Mark( 0 ),
Use Regional Settings( 0 ),
Scan Whole File( 1 ),
Treat empty columns as numeric( 0 ),
CompressNumericColumns( 0 ),
CompressCharacterColumns( 0 ),
CompressAllowListCheck( 0 ),
Labels( 0 ),
Column Names Start( 1 ),
Data Starts( 1 ),
Lines To Read( "All" ),
Year Rule( "20xx" )
)
);
Current Data Table( dt1 );
dt1 << delete columns( "CLASS", "FIVER", "BLANK", "JUNK1", "JUNK2" );
dt1 << Select Where(
Contains( As Column( dt1, "TYPE" ), "Execute" ) | Contains( As Column( dt1, "TYPE" ), "++" ) | Contains(
As Column( dt1, "TYPE" ),
"SetState"
) | Contains( As Column( dt1, "TYPE" ), "SAM" ) | Contains( As Column( dt1, "TYPE" ), "DAC" )
);
dt1 << Delete Rows;
);
Show( names );
openDTs = {};
For( i = 1, i <= N Table(), i++,
Insert Into( openDTs, Data Table( i ) )
);
Show( openDTs );
dt = New Table( "Results" );
For( k = 1, k <= N Items( names ), k++,
Current Data Table( Results/*###*/ );
dt << concatenate( Data Table( names[k] ), Output Table( "Results" ), Create Source column );
);Jim - ありがとう...オーバーホールを行いました...データを列に解析せずにファイルを開いて、ソース列を追加します。 次に、連結します。 次に、連結されたファイルを取得して解析します。 その進行はより速く、より論理的です。以下を追加しました:
// create the variables to set the column name and
// define the column value
cName = "SOURCE";
fName = dt1 << get name;
dt1 << New Column( cName, Character, Nominal, Set each value( fName ) );
Then iterate the open tables:
// define a list of open data tables.
openDTs = List();
For( i = 1, i <= N Table(), i++,
Insert Into( openDTs, Data Table( i ) )
);
// Loop through the data tables again and concatenate
For( k = 2, k <= N Items( openDTs ), k++,
Current Data Table();
dtUpdated = Current Data Table() << Concatenate( openDTs[k] );
Close( openDTs[k], nosave );
);
現在はうまく機能しています。
Current Data Table() 関数を次のように変更する必要があります。
Current Data Table( dt );
またはへ
Current Data Table( data table( "Results" ) );
ただし、通常は各ファイルが読み込まれるときに連結を行います。私にはそのほうがきれいに見える
Names default to here(1);
dirpath = Munger( Pick Directory( "JMP 13.xx locate the LOG FILES: " ), 1, "/", "" );
Set Current Directory( dirpath );
names = Files In Directory( dirpath, recursive( 1 ) );
dt = New Table( "Results" );
For( i = 1, i <= N Items( names ), i++,
dt1 = Open(
names[i] = Convert File Path( dirpath ) || names[i],
columns(
Column( "STARTDATETIME", Numeric, "Continuous", Format( "y/m/d h:m:s", 26, 3 ), Input Format( "y/m/d h:m:s", 3 ) ),
Column( "FIVER", Numeric, "Continuous", Format( "Best", 12 ) ),
Column( "CLASS", Character, "Nominal" ),
Column( "BLANK", Character( 1 ), "Nominal" ),
Column( "TYPE", Character, "Nominal" ),
Column( "CSTARGET", Character, "Nominal" ),
Column( "CSACTION", Character, "Nominal" ),
Column( "NUMCODE", Numeric, "Continuous", Format( "Best", 12 ) ),
Column( "DEVICE", Character, "Nominal" ),
Column( "DATA", Character, "Nominal" ),
Column( "ENDDATE", Numeric, "Continuous", Format( "y/m/d h:m:s", 29, 6 ), Input Format( "y/m/d h:m:s", 6 ) ),
Column( "JUNK1", Numeric, "Continuous", Format( "y/m/d h:m:s", 29, 6 ), Input Format( "y/m/d h:m:s", 6 ) ),
Column( "JUNK2", Numeric, "Continuous", Format( "Best", 12 ) )
),
Import Settings(
End Of Line( CRLF, CR, LF ),
End Of Field( Other( "0x7c" ), CSV( 0 ) ),
Strip Quotes( 1 ),
Use Apostrophe as Quotation Mark( 0 ),
Use Regional Settings( 0 ),
Scan Whole File( 1 ),
Treat empty columns as numeric( 0 ),
CompressNumericColumns( 0 ),
CompressCharacterColumns( 0 ),
CompressAllowListCheck( 0 ),
Labels( 0 ),
Column Names Start( 1 ),
Data Starts( 1 ),
Lines To Read( "All" ),
Year Rule( "20xx" )
)
);
Current Data Table( dt1 );
dt1 << delete columns( "CLASS", "FIVER", "BLANK", "JUNK1", "JUNK2" );
dt1 << Select Where(
Contains( As Column( dt1, "TYPE" ), "Execute" ) | Contains( As Column( dt1, "TYPE" ), "++" ) | Contains(
As Column( dt1, "TYPE" ),
"SetState"
) | Contains( As Column( dt1, "TYPE" ), "SAM" ) | Contains( As Column( dt1, "TYPE" ), "DAC" )
);
dt1 << Delete Rows;
dt1 << rerun formulas; // make sure all dt1 operations are complete
// Concatenate to the Results data table
dt << concatenate( dt1, Append to first table( 1 ), Create Source Column );
// To keep the work environment clean, I normally delete the latest input data table
close( dt1, nosave );
);