2012-10-05 28 views
8

? Vi aquí algunas preguntas relacionadas con la eliminación de comillas dobles. Pero no resolvió mi problema. Les dijeron que utilicen las funciones Reemplazar o Recortar. Usé pero el problema permanece.¿Desea eliminar las comillas dobles de las cadenas

Mi código:

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(); 

me trató mediante el uso de rowString.Replace('"', ' ').Trim(); en código de seguridad. Pero las comillas dobles están presentes tal como están. Proveideme una solución. Gracias.

+0

Sospecho que si lee las respuestas en las otras preguntas * cuidadosamente *, obtendrá la respuesta ... Tenga en cuenta que también debe usar declaraciones 'using' para deshacerse de los recursos, incluso si hay un excepción. –

Respuesta

22

Es necesario asignar de nuevo a rowString:

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

Strings son immutable.

row.String.Replace(...) te devolverá una cadena, ya que no estás asignando nada, se descartará. No cambiará el objeto original rowString.

Puede usar String.Empty o "" para reemplazar las comillas dobles por una cadena vacía, en lugar del espacio simple ' '. Por lo que su declaración debe ser:

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

(Recuerde que pasar comillas dobles como una cadena"\"", ya que la sobrecarga del método con String.Empty será necesario que tanto los parámetros a ser de tipo cadena).

Es posible deshacerse de Trim() al final, si estuviera tratando de eliminar espacios añadiendo durante string.Replace al principio o al final de la cadena.

+3

Esta respuesta sería mejor si usted explicara * por qué * ... –

+0

@JonSkeet, estaba a punto :), Su modificación ahora – Habib

+0

@Habib, funciona bien, pero cómo eliminar los espacios. Por favor ayuda. Gracias. –

0

Esta fila contiene un error.

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

Como ambos reemplazan y recortan devuelve una cadena, debe asignarla a una variable. Al no asignar la cadena, perderá el valor generado por los métodos de reemplazo y recorte.

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

En VB se debe intentar esto:

Replace("""", ""); 

Pero en C# debe intentar esto:

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

No es por eso que las comillas dobles aún están allí, aunque ... –

0

rowString.Replace('"', ' ') crea un nuevo objeto de cadena y de no modificar el objeto cadena existente Así, tendrá que asignar el objeto de cadena recién creado a una variable diferente o sobrescribir su variable existente.

rowString=rowString.Replace('"', ' ').Trim()  
or 
var somestring=rowString.Replace('"', ' ').Trim() 
0

Como mencionó Habib, las cadenas son inmutables. Cualquier manipulación de cadena necesita ser reestablecida con los datos manipulados como Reemplazar, Revertir, etc. ...

Así que intente asignar la cadena reemplazada para obtener el comportamiento deseado.

0

su problema es un error común. Esto es lo que tiene que hacer:

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

Asegúrese de devolver el resultado a una variable (rowString =). Si no hace esto, C# seguirá ejecutando los métodos, pero no modificará la variable. Este es el caso con cualquier immutable objects.

Ejemplo:

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

se no modificar el rowString objeto real.

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

reemplaza el antiguo valor de rowString con el resultado del código de la derecha.

Escribí esta respuesta y me di cuenta de que Habib explicaba exactamente lo mismo que se menciona arriba. :)

Cuestiones relacionadas