2013-04-24 59 views
0

首先,如果這個問題已經得到解答,我真的很抱歉。我對腳本編寫的所有內容都有非常基本的把握,所以如果我已經在沒有意識到的情況下遇到我的問題的答案,我不會感到驚訝(因爲它超出了我的頭)...帶有忽略字符的Google電子表格排序腳本?

我有一個大量庫存電子表格,我想按字母順序排序,但清單中的許多項目在他們的第一個原則單詞前面有各種前綴,我希望按它們排序。是否可以創建一個腳本來指定一組字符串或字符,這些字符串或字符應該在排序中被忽略?我在查找包含基於指定分隔符生成新列的答案時看到了很多建議,但由於庫存中的項目沒有一致的前綴(或前綴),我不認爲這種方法適用於我)。當我嘗試這個建議時,我想根據項目名稱爲每個項目排序的原則單詞是不同的列。希望這是有道理的......如果有人作爲一個模板,甚至只是一個鏈接,讓我開始創建一個這樣的腳本,我會非常感激。

+0

我想任何腳本或公式都需要寫入A)發現一個或幾個文本模式,其中每個項目將適合該模式;或者B)你有一個你想要排序的所有單詞的有限列表,並且腳本循環遍歷電子表格中的每個項目,並查找是否包含你的排序單詞之一。您可以篩選數據,並在此處發佈數據中與數據匹配的每個文本模式的所有示例。 (如果您的電子表格中沒有包含所有數據的模式,那麼它就是計劃B)。 – 2013-04-24 18:09:42

+0

給你一些文字模式的想法:第四個字符通常是第一個單詞的開始,但如果是第五個,那麼第四個字母總是一個數字;有一些字符,那麼一個空格,然後是要搜索的單詞;在要搜索的單詞之前總是有一個字母數字或字母X. – 2013-04-24 18:11:33

+0

該庫存是一個化學品的長長的清單,有一些漫長而荒謬的名字。我想按第一個原則詞排序,這裏有幾個例子:1)D-** A **蘭胺2)順式-3-(N-Tert- ** B ** utoxycarbonylamino)環戊烷羧酸3)(1R, 2S,5R) - ( - ) - ** M **(S)-p-甲苯亞磺酸鹽我認爲在某些地方排列它會更容易,但我會告訴它忽略一組特定的字符串輸入:'(''N-''順''反'等等...感謝您的建議,但希望我能想出一些東西 – user2316646 2013-04-24 21:26:48

回答

0

你可以用數組來做到這一點,這裏是一個例子,我在第一個字符後排序降序(在lowerCase中)。

您可以在排序功能中選擇其他參數。

function test(){ 
    Logger.log(['xyz 123','wxy 234','vwx 345','abc 456',]) 
    Logger.log(sort(['xyz 123','wxy 234','vwx 345','abc 456',])) 
} 
function sort(array){ 
    array.sort(function(x,y){ 
     var xp = x.toLowerCase().substring(x.indexOf(' ')+1); 
     var yp = y.toLowerCase().substring(y.indexOf(' ')+1); 
     return xp == yp ? 0 : xp > yp ? -1 : 1;// replace xp > yp with xp < yp for ascending order 
     }); 
    return array 
} 

日誌輸出:

[xyz 123, wxy 234, vwx 345, abc 456] 
[abc 456, vwx 345, wxy 234, xyz 123] 

正如你所看到的,它是在數字空間(降序)

+0

當我建議我的答案,我沒有你的'真實生活'答案更有效率,並且很可能適合您的需求......如果需要,您也可以將兩者結合使用 – 2013-04-25 05:59:04

1

我站在嗶嘰的肩膀與此下面的例子,使用後整理正則表達式以匹配樣本中較大的單詞(5個或更多字母......你可以改變這個,但{7,}是與Menthyl和丙氨酸都匹配的最高單詞。當然Butoxycarbo ...也是匹配的它要長得多。):

function test2(){ 
     Logger.log(sort2(['(1R,2S,5R)-(-)-Menthyl (S)-p-toluenesulfinate' ,'D-Alanine','Cis-3-(N-Tert-Butoxycarbonylamino)cyclopentanecarboxylic acid'])); 
     } 


     function sort2(array){ 
      array.sort(function(x,y){ 
      var xp = x.match(/\b[A-z]{5,}\b.*$/m); 
      var yp = y.match(/\b[A-z]{5,}\b.*$/m); 
      return xp == yp ? 0 : xp > yp ? -1 : 1;// replace xp > yp with xp < yp for ascending order 
      }); 
      return array 
     } 
+0

使用正則表達式確實是個好主意:-),+1 – 2013-04-25 05:43:58

+0

謝謝Serge。另外,對於OP,您可以訪問regexpal.com並在您的一些示例數據上測試正則表達式的變體。 (順便說一句,你不可能得到一個完美的正則表達式,它會匹配你所有的數據......所以塞爾的評論結合戰術是有道理的。) – 2013-04-25 13:02:58

相關問題