2012-10-05 11 views
8

Ich sah einige Fragen hier zum Entfernen von Anführungszeichen. Aber es hat mein Problem nicht gelöst. Sie haben gesagt, dass sie die Replace- oder Trim-Funktionen verwenden sollen. Ich habe benutzt, aber das Problem bleibt.Wollen Sie die doppelten Anführungszeichen aus den Strings entfernen

Mein Code:

DataTable dt = TypeConveriontHelper.ConvretExcelToDataTable(SourceAppFilePath); 
     string targetPath = BatchFolderPath + @"\" + "TRANSACT.INX"; 
     StreamWriter wrtr = null; 
     wrtr = new StreamWriter(targetPath); 
     for (int x = 0; x < dt.Rows.Count; x++) 
     { 
      string rowString = ""; 
      for (int y = 0; y < dt.Columns.Count; y++) 
      { 
       if (y == dt.Columns.Count - 1) 
       { 
        rowString += "\"" + dt.Rows[x][y].ToString() + "\""; 
       } 
       else 
       { 
        rowString += "\"" + dt.Rows[x][y].ToString() + "\"~"; 
       } 
      }   
      rowString.Replace('"', ' ').Trim(); 
      wrtr.WriteLine(rowString); 
     } 
     wrtr.Close(); 
     wrtr.Dispose(); 

Ich habe versucht, durch rowString.Replace('"', ' ').Trim(); in über Code. Aber doppelte Anführungszeichen sind vorhanden wie es ist. Beweisen Sie mir eine Lösung. Vielen Dank.

+0

Ich vermute, wenn Sie die Antworten in den anderen Fragen * sorgfältig * lesen, erhalten Sie die Antwort ... Beachten Sie, dass Sie auch 'using' Anweisungen verwenden sollten, um Ressourcen zu entsorgen, auch wenn es ein Ausnahme. –

Antwort

22

Sie müssen es zuweisen zurück zu rowString:

rowString = rowString.Replace('"', ' ').Trim(); 

Stringsimmutable sind.

row.String.Replace(...) wird Ihnen eine Zeichenfolge zurückgeben, da Sie nichts zuweisen, wird es verworfen werden. Es wird das ursprüngliche rowString Objekt nicht ändern.

Sie können String.Empty oder "" verwenden, um doppelte Anführungszeichen durch eine leere Zeichenfolge statt durch ein einzelnes Leerzeichen ' ' zu ersetzen. So sollten Sie Ihre Aussage sein:

rowString = rowString.Replace("\"", string.Empty).Trim(); 

(Denken Sie daran, doppelte Anführungszeichen als String übergeben"\"", da die -Methodenüberladung mit string.Empty sowohl die Parameter erfordern String als Typ).

Sie können von Trim() am Ende loszuwerden, wenn Sie während der string.Replace am Anfang oder Ende der Strings Hinzufügen versuchen Leerzeichen zu entfernen.

+3

Diese Antwort wäre besser, wenn Sie erklären würden, warum * ... –

+0

@JonSkeet, ich war dabei :), Seine jetzt geändert – Habib

+0

@Habib, es funktioniert gut, aber wie Sie die Leerzeichen entfernen. Bitte Hilfe. Vielen Dank. –

0

Diese Zeile enthält einen Fehler.

Da sowohl replace als auch trim eine Zeichenfolge zurückgibt, müssen Sie diese einer Variablen zuweisen. Wenn Sie die Zeichenfolge nicht zuweisen, verlieren Sie den Wert, der von den Ersetzungs- und Trimmmethoden generiert wird.

var myString = rowString.Replace('"', ' ').Trim(); 
//Or 
rowString = rowString.Replace('"', ' ').Trim(); 
0

In VB müssen Sie dies versuchen:

Replace("""", ""); 

Aber in C# müssen Sie versuchen, diese:

Replace("\"", ""); 
+1

Das ist nicht der Grund, warum die doppelten Anführungszeichen immer noch da sind ... –

0

rowString.Replace('"', ' ') ein Objekt neue Zeichenfolge erstellt und ändern Sie nicht die bestehende String-Objekt Daher müssen Sie das neu erstellte String-Objekt einer anderen Variablen zuweisen oder Ihre vorhandene Variable überschreiben.

0

Wie Habib erwähnt, sind Strings unveränderlich. Jede Zeichenfolgenmanipulation muss mit den manipulierten Daten wie Ersetzen, Umkehren, usw. zurückgesetzt werden.

Versuchen Sie also, die ersetzte Zeichenfolge zuzuweisen, damit Ihr gewünschtes Verhalten erreicht wird.

0

Ihr Problem ist ein häufiger Fehler. Hier ist, was Sie tun müssen:

rowString = rowString.Replace('"', ' ').Trim(); 

Seien Sie sicher, dass Ihr Ergebnis einer Variablen (rowString =) zurückzukehren. Wenn Sie dies nicht tun, führt C# weiterhin die Methoden aus, aber die Variable wird nicht geändert. Dies ist bei allen immutable objects der Fall.

Beispiel:

rowString.Replace('"', ' ').Trim(); 

wird nicht ändern die tatsächliche rowString Objekt.

rowString = rowString.Replace('"', ' ').Trim(); 

ersetzt den alten Wert von rowString mit dem Ergebnis des Codes auf der rechten Seite.

Ich schrieb diese Antwort und realisierte gerade, dass Habib genau dasselbe oben erklärte. :)

Verwandte Themen