如果您編寫 JSL 一段時間了,您可能保存了腳本的多個副本,並最終想知道腳本之間的差異。 沒有一個很好的方法來回答 Windows 中內建的問題,因此這裡有一種在 JSL 中執行此操作的方法,使用最短的編輯腳本函數(幾乎完成所有工作)。
CompareTextFiles = Function( {pathA, pathB},
{textA, textB, v, gray, red, green, ipart, parts, kind, text, vv, bb},
textA = Load Text File( pathA );
textB = Load Text File( pathB );
parts = Shortest Edit Script( lines( textA, textB, ignorewhitespace() ) );
v = V List Box();
gray = RGB Color( .9, .9, .9 );
red = RGB Color( 1, .7, .7 );
green = RGB Color( .7, 1, .7 );
For( ipart = 1, ipart <= N Items( parts ), ipart += 1,
{kind, text} = parts[ipart];
bb = MouseBox(
Border Box( Left( 10 ), Right( 100 ),
// trim removes a final CR that double spaces the joint
// between text boxes in the vlistbox. the 3 spaces added
// back hides a rendering error that clips the last chars
// in a line...sometimes.
Text Box( Trim( text, right ) || " ", <<SETWRAP></SETWRAP>函數需要兩個檔案名稱並傳回一個適合嵌入到視窗中的 vlist 框。 vlist 框包含一堆繪製在灰色、紅色或綠色背景上的文字方塊。 最短編輯腳本函數傳回的編輯腳本是一個命令列表:保留數據常見的到兩個字串(灰色),刪除第一個字串的資料(紅色),插入來自第二個字串的資料(綠色)。 僅使用這三個命令,該腳本是“a”(不是“the”)將字串 A 轉換為字串 B 的最短腳本。
MouseBox 在紅色和綠色部分中添加了一個工具提示,解釋哪個檔案丟失了該資料或添加了該資料。
這最短的編輯腳本還有一些其他參數(此處未使用)對於較長的文件非常有用,尤其是限制範圍。 透過設定 500 或 1000 個差異的合理限制,您可以直接說“這些文件確實不同”,而無需花費太多時間等待非常緩慢的匹配過程,而該過程不太可能產生有趣的結果。 該函數的呼叫方式為忽略空白參數,因為我對縮排不同的行不感興趣。
Two versions of Jabberwocky downloaded from the webTwo versions of Jabberwocky downloaded from the webTwo versions of Jabberwocky downloaded from the webTwo versions of Jabberwocky downloaded from the web從網上下載的 Jabberwocky 的兩個版本
這些版本中至少有一個對原始版本進行了修改。
附腳本。