ワイルドカードを使用して複数の Excel ファイルを開く JSL スクリプト。こんにちは、ワイルドカードを使用して複数のExcelファイルを開くようにJSLをコーディングするのを手伝ってくれる人はいますか?
Re: ワイルドカードを使用して複数の Excel ファイルを開く JSL スクリプト。その場合は、"multiple" キーワードを指定して Pick File 機能を使用することも検討してください。 スクリプト インデックスから:
Names Default To Here( 1 );
Files =
Pick File(
"Select JMP File",
"$SAMPLE_DATA",
{"JMP Files|jmp;jsl;jrn", "All Files|*"},
1,
0,
"",
"multiple"
);
For( i = 1, i <= N Items( Files ), i++,
Try( Open( Files[i] ) )
);Re: ワイルドカードを使用して複数の Excel ファイルを開く JSL スクリプト。返信ありがとうございます。 ワイルドカードを使用してすべてのファイルを選択すると思いました (*.* のようなもの)。 正規表現は、いくつかの基準に基づいて特定のファイルを選択するのに最適です。 今は必要なようです。for ループを使用してすべてのファイルを開くことができます。 柔軟性を高めるために、後で正規表現が必要になると確信しています。Re: ワイルドカードを使用して複数の Excel ファイルを開く JSL スクリプト。最初の質問では、JMP に読み込むファイル名を選択するときにワイルドカードを使用する機能を要求していました。RegEx() には、ワイルドカードを使用できる構文があります。@ihは、ワイルドカードを使用して構造を満たすファイル名を返すように RegEx() 関数を構造化する方法を示しています。
ここで、「ワイルドカードを使用して」と指定したときの内容を確認するために、質問に戻る必要がありますか?
Re: ワイルドカードを使用して複数の Excel ファイルを開く JSL スクリプト。そのディレクトリ内のすべてのファイルを開く場合 (それらがすべて xls ファイルであることはわかっています)、正規表現について心配する必要はありません。「my file」で始まり「.xls」で終わるファイルのみを開きたい場合は、for ループ内に if ステートメントを追加することで、ファイルが条件に一致することを確認できます。
*未テストのコード*
// Read all the file names
files = Files In Directory( "C:\Users\MyUserName\Documents\My Data\" );
X = N Items( files );
Y = "C:\Users\MyUserName\Documents\My Data\";
dt = New Table( "My data file" );
For( i = 1, i < X, i++,
if( !is missing( regex( files[i], "my file.*\.xls", "\0" , IGNORECASE ) ),
//open jmp files for each xls files.
dt1 = Open(
Y || files[i],
Worksheets( "my xls worksheet" ),
Use for all sheets( 0 ),
Concatenate Worksheets( 0 ),
Create Concatenation Column( 0 ),
Worksheet Settings(
1,
Has Column Headers( 0 ),
Number of Rows in Headers( 1 ),
Headers Start on Row( 1 ),
Data Starts on Row( 1 ),
Data Starts on Column( 1 ),
Data Ends on Row( 0 ),
Data Ends on Column( 0 ),
Replicated Spanned Rows( 1 ),
Suppress Hidden Rows( 1 ),
Suppress Hidden Columns( 1 ),
Suppress Empty Columns( 1 ),
Treat as Hierarchy( 0 )
)
);
dt1 << Set Name( files[i] );
//I concatenated all the files in one jmp file and close it each time.
dt << Concatenate( Data Table( dt1 ), "Append to first table" );
Close( dt1 );
);
);Re: ワイルドカードを使用して複数の Excel ファイルを開く JSL スクリプト。やあ、
時間を割いて解決策を教えていただきありがとうございます。 あなたのソリューションは機能しています。 次のスクリプトを使用しました。
ただし、ここで正規表現を使用する方法と、正規表現の使用がどのように役立つかはわかりません。
私のスクリプト:
// Read all the file names
files = Files In Directory( "C:\Users\MyUserName\Documents\My Data\" );
X = N Items( files );
Y = "C:\Users\MyUserName\Documents\My Data\";
dt = New Table( "My data file");
For( i = 1, i < X, i++,
//open jmp files for each xls files.
dt1 = Open(
Y || files[i],
Worksheets( "my xls worksheet" ),
Use for all sheets( 0 ),
Concatenate Worksheets( 0 ),
Create Concatenation Column( 0 ),
Worksheet Settings(
1,
Has Column Headers( 0 ),
Number of Rows in Headers( 1 ),
Headers Start on Row( 1 ),
Data Starts on Row( 1 ),
Data Starts on Column( 1 ),
Data Ends on Row( 0 ),
Data Ends on Column( 0 ),
Replicated Spanned Rows( 1 ),
Suppress Hidden Rows( 1 ),
Suppress Hidden Columns( 1 ),
Suppress Empty Columns( 1 ),
Treat as Hierarchy( 0 )
)
);
dt1 << Set Name( files[i] );
//I concatenated all the files in one jmp file and close it each time.
dt << Concatenate( Data Table( dt1 ), "Append to first table" );
Close( dt1 );
);
Re: ワイルドカードを使用して複数の Excel ファイルを開く JSL スクリプト。ここにあなたを始めるかもしれない1つの方法があります.他のユーザーが検索フレーズを入力しない限り、自分で正規表現を指定することをお勧めします。 正規表現は素晴らしいリソースです。
//list all files in directory
files = Files in Directory( Pick Directory() );
//a string with wildcards, * for any string and ? for exactly one character
str = "My?Files*.xls*";
//Replace windcards with regex character classes. Note that this does
//not protect against all strings a user might enter
rgx = Substitute( str, ".", "\.", "*", ".*", "?", "." );
//Or just specify the regex yourself
rgx = "My Files.*\.xlsx?";
//Check each file, if it matches then open it
if( N items( files ) > 0,
for( i = 1, i <= N items( files ), i++,
if( !is missing( regex( files[i], rgx, "\0" , IGNORECASE ) ),
//Open script goes here
Show( files[i] );
)
)
);