Forum Discussion

Dicken's avatar
Dicken
Post Prodigy
2 years ago
Solved

Inserting blank into a list ,

Hi, 
  in the code below is there a way to deal with the fact the last value is  not included, other than what i have don and 

 

 let alist = { "a","a","a","a","b","b","b","b","c","c","c","d"} , 
 poslist = { 0..List.Count( alist )-2}  in 
 List.Accumulate( poslist, {}, (s,c)=>  
          if alist {c} = alist {c +1} then s & { alist {c} } else 
           s & { alist {c} , "", List.Last( alist) } )

 

 just stuck it on at the end,   I know there are oher ways, but I'm just interested in a neater way or perhaps an 'and' 
statement. 

Richard. 

  • Dicken's avatar
    Dicken
    1 year ago

    Please read post alist = 

     { "a","a","a","a","b","b","b","b","c","c","c","d"} 
  • This perhaps?:

     

    let alist = {"a","a","a","a","b","b","b","b","c","c","c","d"}, 
    poslist = {1..List.Count(alist)-1}
    in List.Accumulate(poslist, {alist{0}}, (s,c)=> if alist{c} = alist{c-1} then s & {alist{c}} else s & {"",alist{c}})

     

     resulting in:

    or use null instead of "".

     

10 Replies

    • Dicken's avatar
      Dicken
      Post Prodigy

      No I , that is what it does, I want a better solution to  getting the last value included ohter than just adding it on the end, I did say this in the originla post,  please don't suggest alternativves as that is not the point I wans a conditons that will autmatically include the last value when ii is met or something somilar. 

      • AlienSx's avatar
        AlienSx
        Super User

        please show us what you have as a start (presumably alist) and what you want to get in the end. We don't need your code. Thanks. 

  • Dicken's avatar
    Dicken
    Post Prodigy

    No I'm tryiing to achieve what I said I was trying to achieve, a way of avoiding just adding the last  value on 
    at then end.   

      s & { alist {c} , "original post.  

     

  • p45cal's avatar
    p45cal
    Solution Supplier

    This perhaps?:

     

    let alist = {"a","a","a","a","b","b","b","b","c","c","c","d"}, 
    poslist = {1..List.Count(alist)-1}
    in List.Accumulate(poslist, {alist{0}}, (s,c)=> if alist{c} = alist{c-1} then s & {alist{c}} else s & {"",alist{c}})

     

     resulting in:

    or use null instead of "".

     

    • Dicken's avatar
      Dicken
      Post Prodigy

      Yes , thanks, I had gon about it in a slightly different way,   this is to insert 3 blank rows but the principle hte same  starting a  1 column tablle to insert 3 blank rows at change;  the main problem is it's not very effecient, need to re write with generate ? 

       

        = let alist =  Source [Test] , pos = { 1..List.Count(alist ) -1} , 
      
      acc =  List.Accumulate( pos, {}, (s,c)=> 
       if alist {c-1} = alist {c} then s & {0} else s & { 0,1,0,0} ) 
                in List.Accumulate( 
                      List.PositionOf( acc, 1 , Occurrence.All  ), 
                                                  Source  , (s,c)=>  
                                                     Table.InsertRows( s, c ,Table.ToRecords( insert3 ) )) 

       

      • p45cal's avatar
        p45cal
        Solution Supplier

        to insert 3 blank rows instead of one, use:

        …then s & {alist{c}} else s & {null,null,null,alist{c}}

        or:

        …then s & {alist{c}} else s & {"","","",alist{c}}

        or any number of blank rows (10 here):

        …then s & {alist{c}} else s & List.Repeat({null},10) & {alist{c}})

  • Hi Dicken 

     

    Without List.Accumulate

    = List.Combine(
    List.Transform(
    List.Zip({alist,List.Skip(alist)}),
    each if _{0} = _{1} or _{1} = null then {_{0}} else {_{0}, ""})
    )

     

    or with your first idea

    = let alist = { "a","a","a","a","b","b","b","b","c","c","c","d"} , 
    poslist = { 0..List.Count( alist )-1} in
    List.Accumulate( poslist, {}, (s,c)=>
    if c=List.Max(poslist) or alist {c} = alist {c +1} then s & { alist {c} } else
    s & { alist {c} , "" , List.last(alist)} )

     Stéphane