summaryrefslogtreecommitdiffstats
path: root/autoload
diff options
context:
space:
mode:
Diffstat (limited to 'autoload')
-rw-r--r--autoload/csv.vim111
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\+')