M 代码相当于 Left (string, len(string)-11)

问题描述 投票:0回答:1

如何从列中的字符串中删除最后 X 个字符?

我正在尝试生成用户友好的文件名列表,这些文件名用于生成 Power Query 表。 然而,当阅读 m 个文本命令的列表时,我没有看到一个简单的方法来执行相当于:

 Text.left(#"previous table"{"Filename'}, Text.length(#"previous table"{"Filename'} - 11)

(基于我对 Excel 的了解)。

因为我看到我的文件名的长度是可变的,但知道我总是想消除最后 11 个字符,我想也许我可以使用

Text.reverse(#"previous table"{"Filename'})
,然后在位置 11 处进行分割,只保留分割的右侧,然后再做一次逆转。 然而,我还不太了解 m 语法,当我尝试这样做时,我得到的只是一个错误
Text.Reverse

我的m代码:

let
    Source = Forecasting,
    #"Removed Other Columns" = Table.SelectColumns(Source,{"Source.Name"}),
    #"Removed Duplicates" = Table.Distinct(#"Removed Other Columns"),
    #"Renamed Columns" = Table.RenameColumns(#"Removed Duplicates",{{"Source.Name", "Submitted Reports"}}),
    Custom1 = Text.Reverse(#"Renamed Columns"{{"Submitted Reports"}})
in
    Custom1

进入“重命名列”步骤时的示例数据:

Submitted Reports
Bug Bunny 241008923443.xlsm
Daffy Duck 241130234521.xlsm
Wyle E. Cayote 240909124312.xlsm

期望的结果:

Submitted Reports
Bug Bunny 241008
Daffy Duck 241130
Wyle E. Cayote 240909
powerquery m
1个回答
0
投票

如果您想删除最后五个字符并知道它们是什么(“.xlsm”):

let
    Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],

    CleanFilenames = Table.TransformColumns(Source, {{"Submitted Reports", each if Text.EndsWith(_, ".xlsm") then Text.RemoveRange(_, Text.Length(_) - 5, 5) else _}})
in
    CleanFilenames

或者如果您想删除四个字符的文件扩展名:

CleanFilenames = Table.TransformColumns(Source, {{"Submitted Reports", each if Text.Middle(_, Text.Length(_) - 5, 1) = "." then Text.RemoveRange(_, Text.Length(_) - 5, 5) else _}})

或者只删除最后五个字符:

CleanFilenames = Table.TransformColumns(Source, {{"Submitted Reports", each Text.RemoveRange(_, Text.Length(_) - 5, 5)}})
© www.soinside.com 2019 - 2024. All rights reserved.