2016-07-08 13 views
0

Ich versuche, einen Text Zeile für Zeile analysieren und dann eine Zeile auf Token mit '\t' als Trennzeichen analysieren.Javascript Parsing Problem

Bisher habe ich folgendes:

str = "a\tb\tc\n1\t2\t3\nx\t\y\tz" 
 
console.log(str + "\n"); 
 
    
 
i = 0; 
 
j = str.indexOf("\n", i); 
 

 
sstr = str.substr(i, j); 
 
    
 
tokens = sstr.split('\t'); 
 
    
 
console.log(tokens + "\n"); 
 
    
 
i = j + 1; 
 
j = str.indexOf("\n", i); // (*) 
 
    
 
sstr = str.substr(i, j); 
 
    
 
console.log(sstr + "\n"); 
 
    
 
tokens = sstr.split("\t"); 
 
console.log(tokens + "\n"); // (**)

Warum erhalte ich folgendes:

1,2,3 
x,y,z 

anstelle der folgenden Optionen:

1,2,3 

unter console.log(tokens + "\n"); // (**)

Habe ich einen Fehler gemacht?

+1

Warum Sie beginnen, werden nicht durch die Spaltung auf '„\ n“'? – nnnnnn

+0

@nnnnnn Original 'str' hat 10000+ Zeilen und ich muss es Zeile für Zeile konsequent verarbeiten. – lllll

+0

@nnnnnn Danke. Ich brauche nur 'j - i' anstelle von' j' – lllll

Antwort

0

Sie verwenden j als End-Index der erforderlichen Teilzeichenfolge, aber das zweite Argument von .substr() ist nicht der End-Index, es ist die Anzahl der Zeichen zu nehmen. (Es funktioniert das erste Mal, weil der Startindex 0 ist, so dass der Endindex gleich der Anzahl der Zeichen ist.)

Versuchen Sie stattdessen .slice(). (Oder substring(), aber ich ziehe .slice(), weil es vielseitig ist, und kürzer zu geben.)

sstr = str.slice(i, j);