2012-11-21 22 views
2

我現在正在使用Google Refine進行優化。我的目標是將一個現有的專欄分成兩部分。我使用的是內置的「基於......添加列「 - 功能列包含街道名稱和coressponding門牌號碼。例如,我有這樣的:如何在forEach函數中將If函數與GREL集成?

Stackoverflow Street 89 

每一行的結構。以同樣的方式,這意味着街道名稱可以是長或短,可以包含一個或多個單詞,但總是以(房子)號碼結尾,並且它總是由空格分開。

因爲我在工作在使用Google Refine的時候,我正在使用GREL語句(Google Refine Expression Language)來實現這個功能,這個想法就是這樣的:將每個由空格分隔的值拆分成小塊,將每個拆分值保存在一個變量中,然後檢查特定值包含一個數值(這是門牌號碼)。如果它是一個數字值,則取該值並將其轉發給輸出。我已經有了這樣的東西。

forEach(value.split(" "), v, v).join(";") 

這裏是一個問題:我如何在forEach函數中集成IF函數?如果我知道如何去做,我可能不僅能夠分割這些值,還可以檢查它的數字。要檢查它是否是數字,可以使用isNumeric(value)。

我很欣賞每一個提示。謝謝,約爾格。

回答

2

如果所有你所描述的約束持有真實的(它總是最後一塊,始終存在),我只是用value.split('')[-1]

在回答你問直接的問題,萬一別人發現這在搜索中,您的表達到目前爲止相當於:

value.split(" ").join(";") 

即forEach沒有做任何事情。要集成IF(),用它作爲形成第三個參數的表達式的一部分的foreach

forEach(value.split(" "), v, if(isNumeric(v),null,v)).join(";") 

我不知道什麼輸出格式,你想實現的,但是這會給你一個半 - 您的單元格值中包含所有非數字字詞的大寫分隔列表。

+0

也謝謝你。這兩個解決方案,halex和Tom Morris都爲我解決了這個問題。 – user1260086