буквы? Например надо из этого 1ч12м сделать 72. в тоже время встречаются 45м, а надо 45. Значения могут быть отрицательными и знак надо сохранить.
написал вот такое:
[a=List.Transform(Text.Split(Text.Remove([REMAINING],{"м"}),"ч"),Number.From),
b = if Text.Start([REMAINING],1)="-" then -1 else 1,
c = Number.Abs(a{0}),
d=b*c*60+b*a{1}
][d]
Но вот при 45м выходит ошибка. Как обработчик ошибок напсать? или может по другому вообще решить эту задачу. Заранее спасибо за ответ!
if Text.Contains(..., "ч") then... else...
[a=List.Transform(Text.Split(Text.Remove("-45м",{"м"}),"ч"),Number.From), x = List.LastN({0,0}&a, 2), d= x{0}*60 + x{1} ][d]
f=(x)=>[a=Number.From(Text.BeforeDelimiter(x,"ч"))*60+Number.From(Text.BetweenDelimiters(x,"ч","м"), b=Number.From(Text.BeforeDelimiter(x,"м")), c=if Text.Contains(x,"ч") then a else b][c]
добавил знак, а то некорректно суммировалось [a=List.Transform(List.RemoveMatchingItems(Text.SplitAny("-1ч45м","мч"), {""}),Number.From), x = List.LastN({0,0}&a, 2), s = if Number.Sign(x{0})=0 then 1 else Number.Sign(x{0}), d= x{0}*60 + x{1}*s ][d]
Вот это решение мне более понятно. Но выдает ошибку
x = List.LastN({0,0}&a, 2) что это строка делает не пойму
список из 2 значений, если у вас только 45м, то будет {0,45} если 1ч45м - будет {1,45}
все работает отлично! Но разобраться не могу Text.SplitAny - объединяем в список по разделителям "мч" = "-1 45" List.RemoveMatchingItems - удаляем пробелы ={ -1,45}
Text.SplitAny - делаем из текста список по любому из разделителей м и\или ч List.RemoveMatchingItems - удаляем пустые элементы списка, т.к. 15м разделится на {15,""} List.Transform текст в числа
огромное спасибо за объяснение!
Сергей, будьте добры подскажите, как оставить только отрицательные значения, а вместо положительных выводить 0
a=List.Transform(List.RemoveMatchingItems(Text.SplitAny([REMAINING],"мч"), {""}),Number.From), x = List.LastN({0,0}&a, 2), s = if Number.Sign(x{0})=0 then 1 else Number.Sign(x{0}), d = x{0}*60 + x{1}*s, r = if Number.Sign(d) = -1 then d else 0 ][r]) Сделал, работает! нормально решение?
лучше проверку до всех вычислений вынести, чтоб меньше гонять память if Text.StartsWith([REMAINING], "-") then ....
Сергей, не могу додуматься как корректно вставить все это дело. Вставил, но на положительных значениях ошибка. Не могу понять как включить в общую цепочку: [a = if Text.StartsWith([REMAINING], "-") then List.Transform(List.RemoveMatchingItems(Text.SplitAny([REMAINING],"мч"), {""}),Number.From) else 0, x = List.LastN({0,0}&a, 2), s = if Number.Sign(x{0})=0 then 1 else Number.Sign(x{0}), d = x{0}*60 + x{1}*s ][d]
огласите весь список пжлста) if Text.StartsWith([REMAINING], "-") then [h= Text.Split([REMAINING], "ч"), x = if List.Count(h)>1 then List.FirstN(List.RemoveNulls({Number.From(h{0})} & {Number.From(Text.Split(h{1}, "м"){0}),0}),2) else {0} & {Number.From(Text.Split(h{0}, "м"){0})}, d= -(x{0}*60 + x{1}) ][d] else 0
на картинке, кстати, нормально распределение. Можно выделить "Ящик с усами"
Обсуждают сегодня