github.com/keysonzzz/kmg@v0.0.0-20151121023212-05317bfd7d39/encoding/kmgExcel/Trim2DArray.go (about)

     1  package kmgExcel
     2  
     3  import (
     4  	"strings"
     5  )
     6  
     7  //remove empty cell right(every line will have same length)
     8  //remove all empty line (include some empty line in between)
     9  func Trim2DArray(input [][]string) (output [][]string) {
    10  	if len(input) == 0 {
    11  		return [][]string{}
    12  	}
    13  	//find max line cell number
    14  	MaxLineCellNumber := len(TrimRightRowString(input[0]))
    15  	LineNumber := 0
    16  	for _, row := range input {
    17  		thisLineCellNumber := len(TrimRightRowString(row))
    18  		if thisLineCellNumber != 0 {
    19  			LineNumber++
    20  		}
    21  		if MaxLineCellNumber < thisLineCellNumber {
    22  			MaxLineCellNumber = thisLineCellNumber
    23  		}
    24  	}
    25  	output = make([][]string, LineNumber)
    26  	i := 0
    27  	for _, row := range input {
    28  		thisLineCellNumber := len(TrimRightRowString(row))
    29  		if thisLineCellNumber == 0 {
    30  			continue
    31  		}
    32  		if MaxLineCellNumber <= len(row) {
    33  			output[i] = row[:MaxLineCellNumber]
    34  		} else {
    35  			retRow := make([]string, 0, MaxLineCellNumber)
    36  			retRow = append(retRow, row...)
    37  			remainCellNumber := MaxLineCellNumber - len(row)
    38  			for i := 0; i < remainCellNumber; i++ {
    39  				retRow = append(retRow, "")
    40  			}
    41  			output[i] = retRow
    42  		}
    43  
    44  		i++
    45  	}
    46  	return output
    47  }
    48  
    49  func TrimRightRowString(row []string) []string {
    50  	for i := len(row) - 1; i >= 0; i-- {
    51  		if strings.TrimSpace(row[i]) != "" {
    52  			return row[:i+1]
    53  		}
    54  	}
    55  	return []string{}
    56  }