Простая функция для обхода списка значений и вызова Text.Replace - PullRequest
0 голосов
/ 10 октября 2019

Я пытаюсь перебрать список значений и вызвать Text.Replace для каждого элемента в списке. По сути, я пытаюсь вытащить только доменное имя из строки.

Например, если у меня есть www.google.com, я хочу, чтобы преобразование привело к google. Вот моя попытка, но она дает мне всевозможные ошибки.

let
    replacements = {"www.", ".ca", ".com" }, 
    replacement = "",
    doReplacements = (value) => {
        List.Transform(replacements, (find) => {
            value = Text.Replace(value, find, replacement)
        })
    },
    Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
    #"Changed Type" = Table.TransformColumnTypes(Source,{
        {"domainname", type text}, 
        {"method", type text}, 
        {"Max bytes_received", Int64.Type}, 
        {"Max bytes_sent", Int64.Type}, 
        {"Max time_taken_ms", Int64.Type}
    }),
    replaced = Table.TransformColumns(#"Changed Type", {
        {"domainname", each let temp = [domainname] in Function.Invoke(doReplacements, {[temp]})}
    }),
    #"Grouped Rows" = Table.Group(replaced, {"domainname"}, {
        {"Verbs", each Text.Combine([method], ","), type text},
        {"bytes_received", each List.Max([Max bytes_received]), type number}, 
        {"bytes_sent", each List.Max([Max bytes_sent]), type number}, 
        {"time_taken", each List.Max([Max time_taken_ms]), type number}
    })
in
    #"Grouped Rows"

Ответы [ 2 ]

1 голос
/ 10 октября 2019

Функция для доступа к базовому URL. Это обрабатывает множество примеров, которых не может иметь более простая версия, включая комбинации ниже

www.example.com
http://www.example.com
http://example.com
example.com
sub.example.com
example.com/directory/

Функция CleanURL

(testurl as text) =>
let
Part1 = Text.Reverse(Text.BeforeDelimiter(Text.Reverse(testurl),"//")),
Part2 = Text.BeforeDelimiter(Part1,"/"),
Part3 = List.LastN(Text.Split(Part2,"."),2){0}
in Part3

Использование

replaced = Table.TransformColumns(#"Changed Type", {{"domainname", each CleanURL(_), type text}})

или без функциикак путаница

 replaced = Table.TransformColumns(#"Changed Type", {{"domainname", each List.LastN(Text.Split(Text.BeforeDelimiter(Text.Reverse(Text.BeforeDelimiter(Text.Reverse(_),"//")),"/"),"."),2){0}, type text}})
1 голос
/ 10 октября 2019

Итак, то, что вы пытаетесь сделать , возможно , и я уже реализовал "таблицы замены" в функции раньше ... но вы также можете просто извлечь текст между разделителями, и это намного проще. Теперь, возможно, ваш фактический список данных может включать случаи, когда это само по себе не сработает, но, учитывая пример, по крайней мере, этого будет достаточно.

Table.TransformColumns(#"Changed Type", {{"domainname", each Text.BetweenDelimiters(_, ".", "."), type text}})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...