在腳本中進行表寬查找和替換<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />我有幾個由歐洲同事創建的大型資料表(+100,000 筆記錄)。
建立表格時,使用 EU 編號格式,即“,”是小數點。
我需要進行全表替換,將“,”替換為“.”。為了使該表能夠與現有腳本一起使用。
我可以使用 get column names() 語句來取得列名稱,但我無法弄清楚如何使用替代(...)或替代(...)語句來對品質進行替換。
大衛
回覆:在腳本中進行表寬查找和替換嗨大衛,
我有同樣但相反的問題 - 將點全域替換為逗號分隔符在一系列進程日誌檔案中。
我發現擺脫這種情況的最簡單方法是將每個 jmp 文件保存為文字文件,然後使用 JMP:s“最佳猜測”選項導入它。
它將原來的分隔符號替換為系統期望的分隔符號(在我的例子中,“.”被替換為“,”),並將列從分類重新分類為連續。 手動完成一個並使用原始程式碼來處理其餘部分。
回覆:在腳本中進行表寬查找和替換有趣的討論。我玩了一些代碼並得到了49 65394 列的全域列重新命名所需的秒數。聯想 T420 PC、Windows 7 64 位元、JMP 64 位元、4 GB RAM。
dt =打開( “$sample_data\Probe.jmp” ) ;
// 將列數擴展到 65000
// 警告大約需要 10 分鐘!
為了(我= 1 ,我<= 65000 ,我++,
dt <<新專欄( “XYZ” ||字元(我) ,數位,連續的) ;
) ;
開始時間=今天() ;
列名稱列表= dt <<取得列名(細繩) ;
數控=恩科爾斯( dt ) ;
為了(我= 1 ,我<=數控,我++,
one_col_name =列名稱列表[我] ;
// 僅當列包含有問題的字串時才重命名該列
如果(包含( one_col_name , “X” ) ,
柱子(我) <<設定名稱(代替( one_col_name , “X” , “D” )) ;
) ;
) ;
結束時間=今天() ;
列印(字元(結束時間-開始時間) || “秒” ||字元(數控) || “ 列” ) ;
回覆:在腳本中進行表寬查找和替換我嘗試使用以下方法呼叫搜尋對話框,但它工作不可靠。 當腳本編輯設定時,對話框似乎會斷開連接。 但也許有人可以找到改進程式碼的方法。
如果這個異常寬的檔案源自 JMP 外部,則在匯入之前編輯列名稱可能會更有效,例如透過可以從 JSL 觸發的 Perl 或 VBA 腳本(可能取決於平台)。
dt =目前數據表() ;
老的= “C” ;
新的= “問” ;
dt <<將視窗置於前面;
// 呼叫搜尋對話框並編輯設定
主選單( “尋找” ) ;
w =窗戶( “搜尋對話框” ) ;
w [文字編輯框( 1 )] <<設定文字(老的) ;
w [文字編輯框( 2 )] <<設定文字(新的) ;
如果( w [複選框 複選框( 2 )] <<得到, w [複選框 複選框( 2 )] <<放( 1 )) ;
如果( w [複選框 複選框( 6 )] <<得到, w [複選框 複選框( 6 )] <<放( 1 )) ;
如果(( w [複選框 複選框( 7 )] <<得到) == 0 , w [複選框 複選框( 7 )] <<放( 1 )) ;
w [按鈕盒( 3 )] <<點選;
//主選單(“全部替換”);
回覆:在腳本中進行表寬查找和替換也許我根據大衛對“獲取列名稱”的評論混淆了他的要求。我的印像是他想更改列名稱(而不是實際的行資料)。無論如何,這就是我正在努力做的事情。我想更改多個列的名稱(即從每個列名稱中刪除“labdata”)。這就是我上面的腳本要做的事情。在 JSL 中,處理 85,000 列大約需要 19 秒。「搜尋對話框」只需要幾分之一秒的時間。
關於如何做的任何想法那沒有 For 迴圈(或超級有效率的迴圈)?
謝謝,
傑克
回覆:在腳本中進行表寬查找和替換在 MacBook Pro 上使用 JMP 11 時,如果使用 HP time( ) 而不是 Today( ),我會得到「2 秒處理 5800 行」或 1.753558 秒。
與上面的說法相反,內建的查找和替換在這裡要慢得多。 下面的程式碼需要 16.27 秒才能完成(程式碼假設搜尋對話方塊已透過先前的手動搜尋「準備好」)。
dt =打開( “$Sample_Data\Probe.jmp” ) ;
開始時間=血量時間() ;
主選單( “全部替換” ) ;
結束時間=血量時間() ;
列印(字元((結束時間-開始時間) / 1e6 ) || “秒” ||字元(號) || “行” ) ;
回覆:在腳本中進行表寬查找和替換下面是一個範例,其中包含範例資料集中的一個大表。它只有 5800 行,需要 8 秒。Lenovo T420 上的 JMP 11 64 位元。比較不同的方法會很有趣。
dt =打開( “$Sample_Data\Probe.jmp” ) ;
列名= dt <<取得列名(數位,細繩) ;
為了(我= 1 ,我<=尼特姆斯(列名) ,我++,
柱子( dt ,列名[我]) <<資料類型(特點) ;
) ;
開始時間=今天() ;
號=行數( dt ) ;
列名= dt <<取得列名(細繩) ;
為了(我= 1 ,我<=尼特姆斯(列名) ,我++,
一個列=柱子( dt ,列名[我]) ;
為了( k = 1 , k <=號, k ++,
一個列[ k ] =代替(一個列[ k ] , “。” , “,” ) ; // 用逗號取代小數
) ;
) ;
結束時間=今天() ;
列印(字元(結束時間-開始時間) || “秒” ||字元(號) || “行” ) ;
回覆:在腳本中進行表寬查找和替換嗨大衛,
**輸入所有這些內容後,我意識到原來的問題是很久以前發布的。然而,我的「更有效」問題仍然存在,是否有人可以提供幫助。 **
我正在嘗試弄清楚同樣的事情。一種解決方案是使用 For 循環並單獨處理每一列,但這可能需要相當長的時間,具體取決於您的資料集。下面列出了範例程式碼供您參考。
dt = 當前資料表();
為了( i=1,i<=ncol(dt),i++,
科名= Column(i) << 取得名稱;
新名稱= munger(colname,1,"替換字串",""); // 你可以使用「Substitute」指令做類似的事情
列(i) << 設定名稱(newcolname);
);
有誰知道比 For 迴圈更有效的方法來解決這個問題?例如,當使用標準的「尋找和取代」對話方塊時,執行速度非常快。然而,在大約 65,000 列上,For 循環方法需要相當多的時間。
謝謝,
傑克