用於將所有 CSV 檔案連接到一個 JMP 表中的腳本你好!
我目前用於開啟包含 CSV 檔案的目錄並將它們連接到一個主檔案中的腳本不起作用,我希望了解其中的原因。 我已經指定了變數 dir 和 files,當資料夾中有 4 個檔案時,循環似乎在獲取第一個檔案後結束。 另外,是否有一個腳本可以讀取 CSV 檔案的檔案名稱並用它來填入新列?
為了(我= 1 , 我 < N 項(檔案),i++,
這個表=打開(目錄 || 檔[i]);
// 建立新列來指示 SD ID
新專欄( “EX801.SD.ID” 、字元、多重響應);
對於每一行(:EX801.SD.ID = “運行1” ); // 卡在輸入 SD ID - 需要檔名!
這個表 <<移動選定的列({:EX801.SD.ID},到第一個);
// 刪除列“......PV”
為了(我= N 列(此表),我> 32 , 我 - , // 需要第 32 列
這個表 <<刪除列(柱子(我));
);
// 在每個列名前面加上“I”,以便與後面的列名相符
為了(我= 3 , 我 <= 32 , 我++,
柱子(這個表,我)<<設定名稱( “我” || (柱子(這個表,我)<<獲取姓名) );
);
dt <<連接(這個表, “附加到第一個表” );
關閉(此表);
dt <<選擇地點(不見了(:時間)) <<刪除行;
);
回覆:將所有 CSV 檔案連接到一個 JMP 表中的腳本非常感謝您的選擇! 但是,在導入文件後,我似乎無法使用循環腳本來清理它。 關於這是為什麼的任何建議?
// 從選定的資料夾匯入 csv 文件
這個表=多個文件導入(
<<設定資料夾(目錄),
<<設定名稱過濾器( “*.*;” ),
<<設定名稱啟用( 0 ),
<<設定尺寸過濾器({ 254056 , 261197 } ),
<<設定尺寸啟用( 0 ),
<<設定日期過濾器({ 3632893806 , 3633422386 } ),
<<設定日期啟用( 0 ),
<<設定新增檔案名列( 1 ),
<<設定新增檔案大小列( 0 ),
<<設定新增文件日期列( 0 ),
<<設定導入模式( “CSV數據” ),
<<設定字符集( “最佳的揣測” ),
<<設定堆疊模式( “類似堆疊” ),
<<設定 CSV 有標題( 1 ),
<<設定 CSV 允許數字( 1 ),
<<設定 CSV 第一標題行( 1 ),
<<設定 CSV 標題行數( 1 ),
<<設定 CSV 第一資料行( 2 ),
<<設定 CSV EOF 逗號( 1 ),
<<設定 CSV EOF 選項卡( 0 ),
<<設定 CSV EOF 空間( 0 ),
<<設定 CSV EOF 空格( 0 ),
<<設定 CSV EOF 其他( ”” ),
<<設定 CSV EOL CRLF ( 1 ),
<<設定 CSV EOL CR ( 1 ),
<<設定 CSV EOL LF ( 1 ),
<<設定 CSV EOL 分號( 0 ),
<<設定 CSV EOL 其他( ”” ),
<<設定 CSV 報價( “\!” ),
<<設定 CSV 轉義( ”” )
) <<導入數據;
這個表 <<移動選定的列({:檔名},到第一個);
// 刪除列“......PV” // 卡在這裡
為了(k = N 列(本表),k > 32 , k--, // 需要第 32 列
這個表 <<刪除列(柱子(k));
);
回覆:將所有 CSV 檔案連接到一個 JMP 表中的腳本您的問題是您在兩個 For 迴圈中使用變數“i”,其中一個 For 迴圈位於另一個 For 迴圈內部......因此,您的“i”值沒有針對外部迴圈正確遞增。
我在下面的腳本中更改了內部循環的循環變數。這可能是您的解決方案
For( i = 1, i < N Items( files ), i++,
thisTable = Open( dir || files[i] );
// creates new column to indicate SD ID
New Column( "EX801.SD.ID", Character, Multiple Response );
For Each Row( :EX801.SD.ID = "Run1" ); // stuck at inputing SD ID - need file name!
thisTable << Move Selected Columns( {:EX801.SD.ID}, To First );
// deletes columns "......PV"
For( k = N Cols( thisTable ), k > 32, k--, // 1st 32 columns are needed
thisTable << delete columns( Column( k ) );
);
// adds "I" in front of each column name to be matched with column name later
For( k = 3, k <= 32, k++,
Column( thisTable, k ) << Set Name( "I" || (Column( thisTable, k ) << Get Name) );
);
dt << Concatenate( thisTable, "Append to First Table" );
Close( thisTable );
dt << Select Where( Is Missing( :TIME ) ) << Delete Rows;
);
如果您使用的是 JMP 14,也許可以使用 Multiple File Import() 函數。
回覆:將所有 CSV 檔案連接到一個 JMP 表中的腳本選擇“文件”>“多個文件導入”。 有關詳細信息,請參閱幫助 > 使用 JMP。 所有選項都可以編寫腳本。 第一次以互動方式使用它,以確保您在已知情況下獲得結果。 然後將來源表腳本複製到您自己的腳本中。