Eliminar cero a la izquierda en una cadena de texto

Un usuario Pregunto ✅

Hola

Tengo un escenario en el que necesito eliminar el cero a la izquierda entre la cadena, ¿Podría por favor mirar y resolver amablemente?
texto real
25-EX000250B-2A
7-LMC045600A-A000045B
256-Z00256-00021A
resultado esperado
25-EX250B-2A
7-LMC45600A-A45B
256-Z256-21A

@k_mathana, es posible que desee probar

let
    fn = (txt as text) =>
    let
        #"First 0" = Text.PositionOf(txt, "0"),
        #"Last Number" = Text.PositionOfAny(txt, {"0".."9"}, Occurrence.Last),
        #"Dropped Leading 0" = if #"First 0" = -1 then txt else Text.Range(txt, 0, #"First 0") & Text.From(Number.From(Text.Remove(txt, {"A".."Z", "a".."z"}))) & Text.Range(txt, #"Last Number"+1)
    in
        #"Dropped Leading 0",

    Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WMjLVdY0wMDAwMjVw0jVyVIrViVYy1/XxdTYwMTUzMHDUdQRKAtlOYBkjUzPdKJBiM12QHkOg+lgA", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [Unprocessed = _t]),
    #"Added Custom" = Table.AddColumn(Source, "Processed", each Text.Combine(List.Transform(Text.Split([Unprocessed], "-"), fn), "-"))
in
    #"Added Custom"

Captura de pantalla 2021-03-31 094252.png

@k_mathana – Veo @CNENFRNL ya ha respondido, pero había comenzado a trabajar en esto, así que pensé en publicar.

Este parece ser un enfoque similar.

la funcion fnRemoveLeadingZeros divide el texto siempre que hay una transición de no izquierda dígito a «0», luego recorta los ceros a la de las subcadenas resultantes y se une de nuevo.

let
    fnRemoveLeadingZeros =
      (string as text) =>
        let
          Split = Splitter.SplitTextByCharacterTransition ( each not List.Contains({"0".."9"},_), {"0"})(string),
          TrimZeros = List.Transform(Split, each Text.TrimStart(_,"0") ),
          Join = Text.Combine(TrimZeros)
        in Join,
    Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WMjLVdY0wMDAwMjVw0jVyVIrViVYy1/XxdTYwMTUzMHDUdQRKAtlOYBkjUzPdKJBiM12QHkOg+lgA", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [Input = _t]),
    AddOutput = Table.AddColumn(Source, "Output", each fnRemoveLeadingZeros([Input]), type text )
in
    AddOutput

saludos

Owen

En respuesta a Syndicate_Admin

No hay @k_mathana

Claro, aquí hay un PBIX que contiene las consultas pero se divide para que la función sea independiente de los datos de origen.

  • fnRemoveLeadingZeros es una funcion que toma una cadena de texto y elimina los ceros a la izquierda segun sus requisitos.
  • ExcelFuente es una consulta que carga una tabla desde un archivo de Excel. Por el momento está apuntando a un archivo de Excel en mi unidad local.
  • Tabla Final toma ExcelSource y agrega una columna mediante fnRemoveLeadingZeros.

En realidad, solo puede copiar la función fnRemoveLeadingZeros en Power Query en el archivo PBIX y utilizarla para agregar una columna que aplique esta función, utilizando Agregar columna > Invocar función personalizada.

Esperemos que eso ayude a aplicar la función en su escenario.

saludos

Owen

OwenAuger_0-1617255066368.png

@k_mathana – Veo @CNENFRNL ya ha respondido, pero había comenzado a trabajar en esto, así que pensé en publicar.

Este parece ser un enfoque similar.

la funcion fnRemoveLeadingZeros divide el texto siempre que hay una transición de no izquierda dígito a «0», luego recorta los ceros a la de las subcadenas resultantes y se une de nuevo.

let
    fnRemoveLeadingZeros =
      (string as text) =>
        let
          Split = Splitter.SplitTextByCharacterTransition ( each not List.Contains({"0".."9"},_), {"0"})(string),
          TrimZeros = List.Transform(Split, each Text.TrimStart(_,"0") ),
          Join = Text.Combine(TrimZeros)
        in Join,
    Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WMjLVdY0wMDAwMjVw0jVyVIrViVYy1/XxdTYwMTUzMHDUdQRKAtlOYBkjUzPdKJBiM12QHkOg+lgA", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [Input = _t]),
    AddOutput = Table.AddColumn(Source, "Output", each fnRemoveLeadingZeros([Input]), type text )
in
    AddOutput

saludos

Owen

En respuesta a Syndicate_Admin

Hola @OwenAuger,

Me encanta el enfoque de la función en línea.

En respuesta a Syndicate_Admin

Estimado @OwenAuger, Muchas gracias por la solución dada, Cuando intento aplicar esto en la tabla de Excel, estoy recibiendo algún error, ¿Podría guiarme amablemente cómo cambiar el origen a la tabla de Excel en lugar de Json Documen.

En respuesta a Syndicate_Admin

No hay @k_mathana

Claro, aquí hay un PBIX que contiene las consultas pero se divide para que la función sea independiente de los datos de origen.

  • fnRemoveLeadingZeros es una funcion que toma una cadena de texto y elimina los ceros a la izquierda segun sus requisitos.
  • ExcelFuente es una consulta que carga una tabla desde un archivo de Excel. Por el momento está apuntando a un archivo de Excel en mi unidad local.
  • Tabla Final toma ExcelSource y agrega una columna mediante fnRemoveLeadingZeros.

En realidad, solo puede copiar la función fnRemoveLeadingZeros en Power Query en el archivo PBIX y utilizarla para agregar una columna que aplique esta función, utilizando Agregar columna > Invocar función personalizada.

Esperemos que eso ayude a aplicar la función en su escenario.

saludos

Owen

OwenAuger_0-1617255066368.png

En respuesta a Syndicate_Admin

@OwenAuger Muchas gracias por su tiempo, apreturado.

@k_mathana, es posible que desee probar

let
    fn = (txt as text) =>
    let
        #"First 0" = Text.PositionOf(txt, "0"),
        #"Last Number" = Text.PositionOfAny(txt, {"0".."9"}, Occurrence.Last),
        #"Dropped Leading 0" = if #"First 0" = -1 then txt else Text.Range(txt, 0, #"First 0") & Text.From(Number.From(Text.Remove(txt, {"A".."Z", "a".."z"}))) & Text.Range(txt, #"Last Number"+1)
    in
        #"Dropped Leading 0",

    Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WMjLVdY0wMDAwMjVw0jVyVIrViVYy1/XxdTYwMTUzMHDUdQRKAtlOYBkjUzPdKJBiM12QHkOg+lgA", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [Unprocessed = _t]),
    #"Added Custom" = Table.AddColumn(Source, "Processed", each Text.Combine(List.Transform(Text.Split([Unprocessed], "-"), fn), "-"))
in
    #"Added Custom"

Captura de pantalla 2021-03-31 094252.png

En respuesta a Syndicate_Admin

Estimado @CNENFRNL,
Muchas gracias por la solución dada, estaba tratando de aplicar esto en la tabla de Excel, pero no podía hacer, ¿Cómo aplicaría esto en la tabla de Excel.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *