Forum Discussion
type Text: Clean in-between white space
Hi. Is there a way to parse text to single white spaces only?
That is:
"mary white helloooo"
Becomes:
"mary white helloooo"
- Anonymous5 years ago
try this
let Source = Excel.Workbook(File.Contents("C:yourpath\Q.14 Data.xlsx"), null, true), Table1_Table = Source{[Item="Table1",Kind="Table"]}[Data], #"Changed Type" = Table.TransformColumnTypes(Table1_Table,{{"Single space everything, and trim both ends (don’t make a new column)", type text}}), tc=Table.TransformColumns( #"Changed Type", {"Single space everything, and trim both ends (don’t make a new column)", each Text.Combine(List.Select(Text.Split(_," "), each _<>""), " ")}) in tc
10 Replies
- AnonymousNot applicable
Text.Combine(List.Select(Text.Split("mary white helloooo"," "), each _<>""), " ")I do not intend to boast this solution, but just as a side observation, I point out that this cuts away the blanks that precede the first word or follow the last word.
This of course can be an advantage or a disadvantage, it depends on what one is looking for. - AlBCommunity Champion
Hi michellepace
Paste this M code in a blank query to see the steps. The recursive function is the relevant one.
let Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45Wyk0sqlQAgvKMzJJUEEMhIzUnJx8IlGJjAQ==", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [Column1 = _t]), #"Changed Type" = Table.TransformColumnTypes(Source,{{"Column1", type text}}), fx = (input as text) => let reduce = Text.Replace(input," "," "), res=if Text.Length(reduce)=Text.Length(input) then input else @fx(reduce) in res, #"Added Custom" = Table.AddColumn(#"Changed Type", "Custom", each fx([Column1])) in #"Added Custom"Please mark the question solved when done and consider giving kudos if posts are helpful.
Contact me privately for support with any larger-scale BI needs, tutoring, etc.
Cheers
- ziying35Impactful Individual
Hi, michellepace
Try this:
= let str="mary white helloooo" in Text.Combine(Splitter.SplitTextByWhitespace()(str), " ")If my code solves your problem, mark it as a solution
- AnonymousNot applicable
= Splitter.SplitTextByWhitespace()(" mary white helloooo ")
this function, that of which I now know the existence thanks to ziying35 , for a string with leading or trailing whites spaces, gives this result
where the first and last element are the empty string "".
Why?
what kind of internal logic is applied in your opinion?
- ziying35Impactful Individual
Anonymous
The function does have the problems you describe, and I'm not sure about its internal logic. The scenarios I've used it in before have been without leading and trailing spaces
= let str=" mary white helloooo " in Text. Trim(Text.Combine(Splitter.SplitTextByWhitespace()(str), " "))
- IceyCommunity Support
Hi michellepace ,
Could Anonymous 's method meet your requirements?
If it could, please accept his reply as a solution so that people who may have the same question can get the solution directly.
If not, please let us know.
Best Regards,
Icey