2013-09-27 14 views
5

Jak wykryć separator CSV z łańcucha znaków w Javascript/NodeJS?Automatyczne wykrywanie separatorów CSV w JavaScript

Jaki jest standardowy algorytm?

Należy zauważyć, że separator nie jest przecinkiem zawsze. Najczęściej spotykane separatory to ;, , i \t (karta).

+1

Oto jak działa Python: http://svn.python.org/view/python/trunk/Lib/csv.py?view=markup#l162 – Blender

+0

Jakiego modułu używasz do analizy pliku CSV? – Alex

+0

@Blender Byłoby miło przenieść go na javascript. Nie jestem ekspertem od Pythona ... i nie widzę podobnego pytania na SO. –

Odpowiedz

12

Możliwe algorytm się prawdopodobny rozdzielacza (S) jest dość proste, przy założeniu, dane są również uformowane:

  1. Dla każdego separatora,
    1. Dla każdej linii
      1. Podziel linię przez separator, sprawdź length.
      2. 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ą.

Powiązane problemy