forked from sheetjs/sheetjs
DSV detect semicolon ';' delimiter
This commit is contained in:
parent
6d741ebd3a
commit
51b4751b95
@ -512,14 +512,42 @@ var PRN = (function() {
|
||||
return arr;
|
||||
}
|
||||
|
||||
// List of accepted CSV separators
|
||||
var guess_seps = {
|
||||
0x2C: ',',
|
||||
0x09: "\t",
|
||||
0x3B: ';'
|
||||
};
|
||||
|
||||
// CSV separator weights to be used in case of equal numbers
|
||||
var guess_sep_weights = {
|
||||
0x2C: 3,
|
||||
0x09: 2,
|
||||
0x3B: 1
|
||||
};
|
||||
|
||||
function guess_sep(str) {
|
||||
var cnt = [], instr = false, end = 0, cc = 0;
|
||||
var cnt = {}, instr = false, end = 0, cc = 0;
|
||||
for(;end < str.length;++end) {
|
||||
if((cc=str.charCodeAt(end)) == 0x22) instr = !instr;
|
||||
else if(!instr) cnt[cc] = (cnt[cc]||0)+1;
|
||||
else if(!instr && cc in guess_seps) cnt[cc] = (cnt[cc]||0)+1;
|
||||
}
|
||||
if((cnt[0x2C]||0) >= (cnt[0x09]||0)) return ",";
|
||||
return "\t";
|
||||
|
||||
cc = [];
|
||||
for(end in cnt) if ( cnt.hasOwnProperty(end) ) {
|
||||
cc.push([ cnt[end], end ]);
|
||||
}
|
||||
|
||||
if ( !cc.length ) {
|
||||
cnt = guess_sep_weights;
|
||||
for(end in cnt) if ( cnt.hasOwnProperty(end) ) {
|
||||
cc.push([ cnt[end], end ]);
|
||||
}
|
||||
}
|
||||
|
||||
cc.sort(function(a, b) { return a[0] - b[0] || guess_sep_weights[a[1]] - guess_sep_weights[b[1]]; });
|
||||
|
||||
return guess_seps[cc.pop()[1]];
|
||||
}
|
||||
|
||||
function dsv_to_sheet_str(str/*:string*/, opts)/*:Worksheet*/ {
|
||||
|
36
xlsx.flow.js
36
xlsx.flow.js
@ -5974,14 +5974,42 @@ var PRN = (function() {
|
||||
return arr;
|
||||
}
|
||||
|
||||
// List of accepted CSV separators
|
||||
var guess_seps = {
|
||||
0x2C: ',',
|
||||
0x09: "\t",
|
||||
0x3B: ';'
|
||||
};
|
||||
|
||||
// CSV separator weights to be used in case of equal numbers
|
||||
var guess_sep_weights = {
|
||||
0x2C: 3,
|
||||
0x09: 2,
|
||||
0x3B: 1
|
||||
};
|
||||
|
||||
function guess_sep(str) {
|
||||
var cnt = [], instr = false, end = 0, cc = 0;
|
||||
var cnt = {}, instr = false, end = 0, cc = 0;
|
||||
for(;end < str.length;++end) {
|
||||
if((cc=str.charCodeAt(end)) == 0x22) instr = !instr;
|
||||
else if(!instr) cnt[cc] = (cnt[cc]||0)+1;
|
||||
else if(!instr && cc in guess_seps) cnt[cc] = (cnt[cc]||0)+1;
|
||||
}
|
||||
if((cnt[0x2C]||0) >= (cnt[0x09]||0)) return ",";
|
||||
return "\t";
|
||||
|
||||
cc = [];
|
||||
for(end in cnt) if ( cnt.hasOwnProperty(end) ) {
|
||||
cc.push([ cnt[end], end ]);
|
||||
}
|
||||
|
||||
if ( !cc.length ) {
|
||||
cnt = guess_sep_weights;
|
||||
for(end in cnt) if ( cnt.hasOwnProperty(end) ) {
|
||||
cc.push([ cnt[end], end ]);
|
||||
}
|
||||
}
|
||||
|
||||
cc.sort(function(a, b) { return a[0] - b[0] || guess_sep_weights[a[1]] - guess_sep_weights[b[1]]; });
|
||||
|
||||
return guess_seps[cc.pop()[1]];
|
||||
}
|
||||
|
||||
function dsv_to_sheet_str(str/*:string*/, opts)/*:Worksheet*/ {
|
||||
|
36
xlsx.js
36
xlsx.js
@ -5890,14 +5890,42 @@ var PRN = (function() {
|
||||
return arr;
|
||||
}
|
||||
|
||||
// List of accepted CSV separators
|
||||
var guess_seps = {
|
||||
0x2C: ',',
|
||||
0x09: "\t",
|
||||
0x3B: ';'
|
||||
};
|
||||
|
||||
// CSV separator weights to be used in case of equal numbers
|
||||
var guess_sep_weights = {
|
||||
0x2C: 3,
|
||||
0x09: 2,
|
||||
0x3B: 1
|
||||
};
|
||||
|
||||
function guess_sep(str) {
|
||||
var cnt = [], instr = false, end = 0, cc = 0;
|
||||
var cnt = {}, instr = false, end = 0, cc = 0;
|
||||
for(;end < str.length;++end) {
|
||||
if((cc=str.charCodeAt(end)) == 0x22) instr = !instr;
|
||||
else if(!instr) cnt[cc] = (cnt[cc]||0)+1;
|
||||
else if(!instr && cc in guess_seps) cnt[cc] = (cnt[cc]||0)+1;
|
||||
}
|
||||
if((cnt[0x2C]||0) >= (cnt[0x09]||0)) return ",";
|
||||
return "\t";
|
||||
|
||||
cc = [];
|
||||
for(end in cnt) if ( cnt.hasOwnProperty(end) ) {
|
||||
cc.push([ cnt[end], end ]);
|
||||
}
|
||||
|
||||
if ( !cc.length ) {
|
||||
cnt = guess_sep_weights;
|
||||
for(end in cnt) if ( cnt.hasOwnProperty(end) ) {
|
||||
cc.push([ cnt[end], end ]);
|
||||
}
|
||||
}
|
||||
|
||||
cc.sort(function(a, b) { return a[0] - b[0] || guess_sep_weights[a[1]] - guess_sep_weights[b[1]]; });
|
||||
|
||||
return guess_seps[cc.pop()[1]];
|
||||
}
|
||||
|
||||
function dsv_to_sheet_str(str, opts) {
|
||||
|
Loading…
Reference in New Issue
Block a user