diff options
Diffstat (limited to '')
| -rw-r--r-- | autoload/csv.vim | 111 | 
1 files changed, 48 insertions, 63 deletions
| diff --git a/autoload/csv.vim b/autoload/csv.vim index 8561f30f..16eeb676 100644 --- a/autoload/csv.vim +++ b/autoload/csv.vim @@ -1450,7 +1450,7 @@ fu! csv#SumColumn(list) "{{{3          let b:csv_result = '0'          return 0      else -        let sum = has("float") ? 0.0 : 0 +        let sum = 0.0          for item in a:list              if empty(item)                  continue @@ -1460,33 +1460,25 @@ fu! csv#SumColumn(list) "{{{3              let format2 = '\d\+\zs\V' . s:nr_format[1] . '\m\ze\d'              try                  let nr = substitute(nr, format1, '', '') -                if has("float") && s:nr_format[1] != '.' +                if s:nr_format[1] != '.'                      let nr = substitute(nr, format2, '.', '')                  endif              catch -                let nr = 0 +                let nr = '0'              endtry -            let sum += (has("float") ? str2float(nr) : (nr + 0)) +            let sum += str2float(nr)          endfor -        if has("float") -            let b:csv_result = string(float2nr(sum)) -            if float2nr(sum) == sum -                return float2nr(sum) -            else -                return printf("%.2f", sum) -            endif -        endif -        let b:csv_result = string(sum) -        return sum +        let b:csv_result = sum +        return printf("%.2f", sum)      endif  endfu  fu! csv#AvgColumn(list) "{{{3      if empty(a:list)          let b:csv_result = '0' -        return 0 +        return 0.0      else          let cnt = 0 -        let sum = has("float") ? 0.0 : 0 +        let sum = 0.0          for item in a:list              if empty(item)                  continue @@ -1496,30 +1488,25 @@ fu! csv#AvgColumn(list) "{{{3              let format2 = '\d\+\zs\V' . s:nr_format[1] . '\m\ze\d'              try                  let nr = substitute(nr, format1, '', '') -                if has("float") && s:nr_format[1] != '.' +                if s:nr_format[1] != '.'                      let nr = substitute(nr, format2, '.', '')                  endif              catch -                let nr = 0 +                let nr ='0'              endtry -            let sum += (has("float") ? str2float(nr) : (nr + 0)) +            let sum += str2float(nr)              let cnt += 1          endfor -        if has("float") -            let b:csv_result = printf("%.2f", sum/cnt) -            return str2float(b:csv_result) -        else -            let b:csv_result = printf("%s", sum/cnt) -            return b:csv_result + 0 -        endif +        let b:csv_result = printf("%.2f", sum/cnt) +        return sum/cnt      endif  endfu  fu! csv#VarianceColumn(list, is_population) "{{{3      if empty(a:list) -        return 0 +        return 0.0      else          let cnt = 0 -        let sum = has("float") ? 0.0 : 0 +        let sum = 0.0          let avg = csv#AvgColumn(a:list)          for item in a:list              if empty(item) @@ -1530,64 +1517,64 @@ fu! csv#VarianceColumn(list, is_population) "{{{3              let format2 = '\d\+\zs\V' . s:nr_format[1] . '\m\ze\d'              try                  let nr = substitute(nr, format1, '', '') -                if has("float") && s:nr_format[1] != '.' +                if s:nr_format[1] != '.'                      let nr = substitute(nr, format2, '.', '')                  endif              catch -                let nr = 0 +                let nr = '0'              endtry -            let sum += pow((has("float") ? (str2float(nr)-avg) : ((nr + 0)-avg)), 2) +            let nr = str2float(nr) +            let sum += pow((nr-avg), 2)              let cnt += 1          endfor          if(a:is_population == 0)              let cnt = cnt-1          endif -        if has("float") -            let b:csv_result = printf("%." . get(b:, 'csv_accuracy', get(g:, 'csv_accuracy', 2)) . "f", sum/cnt) -            return b:csv_result -        else -            let b:csv_result = printf("%s", sum/cnt) -            return sum/(cnt) -        endif +        let b:csv_result = sum/cnt +        return b:csv_result      endif  endfu  fu! csv#SmplVarianceColumn(list) "{{{2 +    unlet! b:csv_result      if empty(a:list) -        let b:csv_result = '0' -        return 0 +        let b:csv_result = 0.0 +        return 0.0      else          return csv#VarianceColumn(a:list, 0)      endif  endfu  fu! csv#PopVarianceColumn(list) "{{{2 +    unlet! b:csv_result      if empty(a:list) -        let b:csv_result = '0' -        return 0 +        let b:csv_result = 0.0 +        return 0.0      else          return csv#VarianceColumn(a:list, 1)      endif  endfu  fu! csv#SmplStdDevColumn(list) "{{{2 +    unlet! b:csv_result      if empty(a:list) -        let b:csv_result = '0' -        return 0 +        let b:csv_result = 0.0 +        return 0.0      else -        let result = sqrt(str2float(csv#VarianceColumn(a:list, 0))) -        let b:csv_result = string(result) +        let result = sqrt(csv#VarianceColumn(a:list, 0)) +        let b:csv_result = result          return result      endif  endfu  fu! csv#PopStdDevColumn(list) "{{{2 +    unlet! b:csv_result      if empty(a:list) -        let b:csv_result = '0' -        return 0 +        let b:csv_result = 0.0 +        return 0.0      else -        let result = sqrt(str2float(csv#VarianceColumn(a:list, 1))) -        let b:csv_result = string(result) +        let result = sqrt(csv#VarianceColumn(a:list, 1)) +        let b:csv_result = result          return result      endif  endfu @@ -1610,13 +1597,13 @@ fu! csv#MaxColumn(list) "{{{3              let format2 = '\d\+\zs\V' . s:nr_format[1] . '\m\ze\d'              try                  let nr = substitute(nr, format1, '', '') -                if has("float") && s:nr_format[1] != '.' +                if s:nr_format[1] != '.'                      let nr = substitute(nr, format2, '.', '')                  endif              catch -                let nr = 0 +                let nr = '0'              endtry -            call add(result, has("float") ? str2float(nr) : nr+0) +            call add(result, str2float(nr))          endfor          let result = sort(result, s:csv_numeric_sort ? 'n' : 'csv#CSVSortValues')          let ind = len(result) > 9 ? 9 : len(result) @@ -1995,10 +1982,7 @@ fu! csv#AnalyzeColumn(...) "{{{3          call filter(res, 'v:val =~ ''^''.join(max_items, ''\|'').''$''')      endif -    if has("float") -        let  title="Nr\tCount\t % \tValue" -    else -        let  title="Nr\tCount\tValue" +    let  title="Nr\tCount\t % \tValue"      endif      echohl Title      echo printf("%s", title) @@ -2014,12 +1998,8 @@ fu! csv#AnalyzeColumn(...) "{{{3                  else                      let k = key                  endif -                if has("float") -                    echo printf("%02d\t%02d\t%2.0f%%\t%.50s", i, res[key], -                        \ ((res[key] + 0.0)/qty)*100, k) -                else -                    echo printf("%02d\t%02d\t%.50s", i, res[key], k) -                endif +                echo printf("%02d\t%02d\t%2.0f%%\t%.50s", i, res[key], +                    \ ((res[key] + 0.0)/qty)*100, k)                  call remove(res,key)                  let i+=1              else @@ -2950,6 +2930,11 @@ fu! csv#EvalColumn(nr, func, first, last, ...) range "{{{3          call csv#Warn("File is no CSV file!")          return      endif +    " Need a Vim with floating point feature +    if !has("float") +        call csv#Warn("Your Vim is missing floating point feature!") +        return +    endif      let save = winsaveview()      call csv#CheckHeaderLine()      let nr = matchstr(a:nr, '^\-\?\d\+') | 
