2016-07-05 2 views
0

Hallo, ich habe dieses Problem, und ich hoffe, Sie können mir helfen.C# CSV loswerden der Durchmesser, die nicht benötigt werden

Ich habe eine CSV-Datei, und darin gibt es Zeilen wie diese.


Username|||Password||Email (thats the header) 

tUser1|||||asdf||[email protected] 

tUser2|||qwer|[email protected] 

tUser3|zxcv|[email protected] 

und ich brauche die unnötigen | in den Leitungen zu befreien ...

etwas wie diese:


Username|Password|Email 
tUser1|asdf|[email protected] 
tUser2|qwer|[email protected] 
tUser3|zxcv|[email protected] 
+0

Das ist kein CSV - * Komma * separierter Wert. Aber auch so ist es am besten, mehrere Trennzeichen an der Quelle zu vermeiden (andernfalls haben Sie mehrdeutige Trennzeichen und leere Felder). – Richard

Antwort

2

Sie könnte split die Zeichenfolge f IRST, dann join es

foreach(string line in lines)//or while(!sr.EndOfStream) depends on how you iterate each line 
{ 
    string[] x = line.Split('|'); 
    string show = string.Join("|", x.Where(s => !string.IsNullOrEmpty(s))); 
} 
1

Verwenden string.Split (Here on MSDN) zurück und StringSplitOptions.RemoveEmptyEntries als zweiten Parameter festlegen. Dadurch erhalten Sie ein Array mit den nicht leeren Begrenzungswerten für die geteilte Zeichenfolge. So werden Sie auf etwas suchen, wie

string[] parsedLine = thisLine 
    .Split(new char[] {'|'}, StringSplitOptions.RemoveEmptyEntries); 

Wenn Sie Linien Ihrem Beispiel folgen, wird parsedLine[0] den Benutzernamen enthalten, parsedLine[1] ihr Passwort und parsedLine[2] ihre E-Mail-Adresse.

+0

thx bro, du hast mir sehr geholfen – Stefan

1

Ein andere Möglichkeit reguläre Ausdrücke verwendet, nur ein einfaches direkten Muster @"\|{2,}" (zwei oder viele '|') durch einzelne "|" ersetzt:

String source = @"tUser1|||||asdf||[email protected]"; 

    // "tUser1|asdf|[email protected]" 
    String result = Regex.Replace(source, @"\|{2,}", "|"); 

Für die gesamte Datei:

var data = File 
    .ReadLines(@"C:\MyFile.txt") 
    .Select(line => Regex.Replace(line, @"\|{2,}", "|")); 

File.WriteAllLines(@"C:\MyClearedFile.txt", data);