2012-09-12 8 views
6

Mam funkcję, która odczytuje plik rozdzielany.Funkcja string.Split w separatorze tabulatora C#

Separator jest przekazywany do funkcji argumentem łańcuchowym. Problem polega na tym, że po przejściu przez ogranicznik "\t" kończy się tak, jak "\\t", a zatem Split nie może znaleźć tej sekwencji.

Jak mogę rozwiązać ten problem?

private void ReadFromFile(string filename, string delimiter) 
{ 

     StreamReader sr = new StreamReader(filename, Encoding.Default); 
     string[] firstLine = sr.ReadLine().Split(t.ToCharArray()); 

     ....... 
} 
+3

proszę pokazać kod! – Yahia

Odpowiedz

21

Chyba używasz coś jak

string sep = @"\t"; 

w tym przypadku września odbędzie \\t podwójnego back slash

użycie string sep = "\t"

string content = "Hello\tWorld"; 
string sep = "\t"; 
string[] splitContent = content.Split(sep.ToCharArray()); 
1

używać pojedynczych qutes do tego jak Split ("\ t"), w ten sposób będziesz przekazywał znak, a nie ciąg znaków.

-3

czy próbowałeś: Environment.NewLine?

+0

Myślę, że mógłbyś niechcący opublikować tę odpowiedź tutaj zamiast na innym pytaniu, ponieważ nie wydaje się, aby miało to związek z zadawanym pytaniem. – shieldgenerator7

0

Jeśli przechodzą w "\ t" jako ogranicznik nic nie zmieni go na "\ t". Coś innego jest podwójną ucieczką z twojej karty.

Blah("\t"); 
    private static void Blah(string s) 
    { 
     var chars = s.ToCharArray(); 
     Debug.Assert(chars.Length == 1); 

     var parts = "blah\tblah\thello".Split(chars);    
     Debug.Assert(parts.Length == 3); 
    } 
0

Innym sposobem, aby zrobić swoją podzielone jest zastąpienie TAB (\ t) przez pustą przestrzeń na tej drodze:

  if(linea.ToLower().Contains(@"\t")) 
       linea = linea.Replace(@"\t", " "); 
      retVal = linea.Trim().Split(' ')[1]; 

Ten kod działa dla mnie.

1

przekazać wartość parametru jako liczbę dziesiętną \ t (tabulator) i przekonwertować na nią Char.

int delimeter =9; 

// 9 ==> \t 
// 10 ==> \n 
// 13 ==> \r 

char _delimeter = Convert.ToChar(delimeter); 

string[] rowData = fileContent.Split(_delimeter); 

Happy Programming.