午夜视频在线网站,日韩视频精品在线,中文字幕精品一区二区三区在线,在线播放精品,1024你懂我懂的旧版人,欧美日韩一级黄色片,一区二区三区在线观看视频

分享

按分隔符拆分,這個方法真的太爽了!

 Excel辦公實戰(zhàn) 2021-06-29

Excel的核心是數(shù)據(jù)處理,更多傾向數(shù)值方面的處理,相對于文本的處理和清洗比較吃力,但是PQ的定位則是全面的數(shù)據(jù)清洗,專門有文本處理類函數(shù),可以說在Excel中的各種文本難題,在PQ中都可以非常輕松來處理!

今天要聊的主題是:提取指定分隔符之間的字符串!

PQ中文本函數(shù)目前已經(jīng)有40+,今天我們會涉及到的函數(shù)如下:

前三個名稱中就是Delimiter,指定分隔符,后兩個則是直接給定分割符號來切割,略有不同,都可以實現(xiàn)效果!

具體我們通過案例來說明!

數(shù)據(jù)源

<金橘-9.9>/<萊姆-18.9>/<蜜柑-6.7>/<蜜橘-9.9>/<檸檬-16.4>/<葡萄柚-9.8>/<臍橙-19.9>/<砂糖橘-14.6>/<甜橙-9.9>/<文旦-8.1>

案例學(xué)習(xí)

案例1 | 按“/”拆分字符串



= Text.Split(str,"/")

真的是不能再簡單了!

Text.Split函數(shù)比較簡單,第一參數(shù)是需要處理的字符串,第二參數(shù)是分隔符符!


當(dāng)然除了上面的方面,我們還有Delimiter相關(guān)的函數(shù)也可以實現(xiàn)!


= List.Transform({0..9},each Text.BetweenDelimiters("/"& str,"/","/",_))


主要看一下Text.BetweenDelimiters函數(shù)!以下我們先簡單看一下簡化語法

簡化語法:Text.BetweenDelimiters(字符串,開始分隔符,結(jié)束分隔符,第幾段)
第幾段從0開始!

那么以上公式的意思,就是提取“/”之間1-10端的內(nèi)容,其實和Split結(jié)果是一樣的!看上去好像比Split麻煩,但是他的核心是起止分隔符!


下面我們進一步提取名稱和單價,來進一步學(xué)習(xí):


案例2 | 提取名稱和單價


首先,我們還是來看一下開始和結(jié)束分隔符,如何使用!

以下公式就是提取“<>”之間的全部內(nèi)容!

= List.Transform({0..9},each Text.BetweenDelimiters(str,"<",">",_))


如果我們還要進一步處理,就可以對拆分出來的內(nèi)容,這個再按“-”拆分!
把上一步的結(jié)果存儲在s中,對s遍歷處理即可!

List.Transform(s,each Text.Split(_,"-"))


如果你想轉(zhuǎn)成表格看的更直觀,可以簡單操作如下:

#table關(guān)鍵字來構(gòu)建,當(dāng)然也可以使用其他table類函數(shù)來處理!


下面我們簡單的看一下SplitAny,看名字大概能猜測,Any應(yīng)該支持多字符串
拆分!

= Text.SplitAny(str,"<>/-")
按第二參數(shù)指定的全部字符串來拆分!


以上的結(jié)果,如果數(shù)據(jù)源對應(yīng)的分隔符連續(xù)就會拆分出空內(nèi)容,稍微處理一下同樣可以實現(xiàn)名稱和單價兩列顯示!

以下內(nèi)容能看懂最好,看不懂先了解一下,以后我們見到List對應(yīng)的函數(shù),再嘮!

= #table(2,List.Split(List.Select(Text.SplitAny(str,"<>/-"),each _<>""),2)


首先是選擇列表中不為空的內(nèi)容,然后每兩個拆分為一組,最后轉(zhuǎn)為表!


下面我們來談一下反向獲取數(shù)據(jù)!

案例3 | 反向獲取


比如我們先獲取最后一對“<>”中的內(nèi)容,該如何處理呢?

=Text.BetweenDelimiters(str,"<",">",{0,1})


前面我們有講過,給的是簡化的語法,官方完整的語法如下:
核心是第四、五參數(shù)是any類型,而不是number數(shù)值類型,說明沒有那么簡單! 

官方有一個案例:

案例中有:RelativePosition.FromEnd 和 RelativePosition.FromStart
其他他們是枚舉類型,方便閱讀,我們可以使用1和0來代替


那么具體是什么意思呢?
RelativePosition.FromStart  > 字面:從開始,其實就是正序(0)-默認
RelativePosition.FromEnd    >字面:從結(jié)束,其實就是倒序(1)

現(xiàn)在我們看案例中的公式就好理解一些了!
第五參數(shù)沒寫,默認是0,也就是一段,但是相對于第四參數(shù)的第一段,所以是最后一段!


如果還是不懂也沒有關(guān)系,我們通過幾個案例進一步鞏固!


案例4 | 任意位置提取


> 倒數(shù)第2個"<",及向后數(shù)第2個“>"之間的內(nèi)容!
Text.BetweenDelimiters(str,"<",">",{1,1},1)




本文由“壹伴編輯器”提供技術(shù)支持

> 倒數(shù)第三段"<>"之間的內(nèi)容

完整寫法:
Text.BetweenDelimiters(str,"<",">",{2,1},{0,0})


> 開始和結(jié)束都用倒序的情況

= Text.BetweenDelimiters(str,"<",">",{2,1},{1,1})

這里我們稍微解釋一下:
1、記住倒敘的結(jié)束位置是相對于開始位置來講的
2、索引是從0開始的,也就是1表示第一個找到的位置
3、案例中,“<" 用的是{2,1}也就是從后往前找到第3個"<" 也就是沙糖桔前面的"<",然后看第五參數(shù){1,1},表示在第二參數(shù)找到的位置,倒序向前找到第二個">",然后返回之間的內(nèi)容!


本文由“壹伴編輯器”提供技術(shù)支持
Text.AfterDelimiter 和 Text.BeforeDelimiter 相對Text.BetweenDelimiters要簡單很多,一個分隔符之后的內(nèi)容如果,一個分隔符之前的內(nèi)容你這個函數(shù)都掌握了,那么他們兩個肯定沒有問題,這里就不再啰嗦了!


PowerQuery在文本處理方面非常的方便,常用的文本清洗完全可以勝任,在熟悉了常用的函數(shù)之后,可以說是隨心所欲的清洗!

本文由“壹伴編輯器”提供技術(shù)支持

全部文章附件下載、海量模板分享、不限次數(shù)提問、專屬答疑群都在這里

    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多