Możliwe algorytm się prawdopodobny rozdzielacza (S) jest dość proste, przy założeniu, dane są również uformowane:
- Dla każdego separatora,
- Dla każdej linii
- Podziel linię przez separator, sprawdź
length
.
- Jeśli jego
length
jest nie równa długości ostatniej linii, nie jest to poprawny ogranicznik.
Dowód koncepcji (nie obsługuje pól cytowanych):
function guessDelimiters (text, possibleDelimiters) {
return possibleDelimiters.filter(weedOut);
function weedOut (delimiter) {
var cache = -1;
return text.split('\n').every(checkLength);
function checkLength (line) {
if (!line) {
return true;
}
var length = line.split(delimiter).length;
if (cache < 0) {
cache = length;
}
return cache === length && length > 1;
}
}
}
Kontrola length > 1
jest, aby upewnić się split
nie tylko zwrócić całą linię. Zwróć uwagę, że to zwraca tablicę możliwych separatorów - jeśli jest więcej niż jeden element, masz problem z niejednoznacznością.
Oto jak działa Python: http://svn.python.org/view/python/trunk/Lib/csv.py?view=markup#l162 – Blender
Jakiego modułu używasz do analizy pliku CSV? – Alex
@Blender Byłoby miło przenieść go na javascript. Nie jestem ekspertem od Pythona ... i nie widzę podobnego pytania na SO. –