el reemplazo de cadena no funciona en absoluto

Estoy leyendo un archivo de texto y necesito reemplazar algunas áreas con texto nuevo que marqué con {0}, {1}, {2}, {3}, {4}, {5}, {6}.

Así que cargo el texto, lo guardo en una variable de cadena y luego uso String.Replace pero no funciona.

        For i As Integer = 0 To 6
            fileText.Replace("{" & i & "}", DisplayStudentData(i))
        Next

Y DisplayStudentData se ve así:

        Protected Function DisplayStudentData(ByVal itemNumber As Integer) As String

        Dim dsItem As String = ""
        If itemNumber <> -1 Then
            Select Case itemNumber
                Case 0
                    dsItem = "testFirstName"
                Case 1
                    dsItem = "testTitle"
                Case 2
                    dsItem = "testClass"
                Case 3
                    dsItem = "testTeacher"
                Case 4
                    dsItem = "testDept"
                Case 5
                    dsItem = "testEmail"
                Case 6
                    dsItem = "testPhone"
            End Select
        End If
        Return dsItem
    End Function

Parece que lo anterior debería funcionar, pero no es así.

Cualquier ayuda sería muy apreciada.

¡Gracias!


Vale, me di cuenta...

Puse todos los elementos de datos en una matriz, luego hice esto después de cargar el archivo de texto:

            fileText = String.Format(fileText, dArr(0), dArr(1), dArr(2), dArr(3), dArr(4), dArr(5), dArr(6))

¿Es esta una buena forma de hacerlo?

preguntado el 03 de mayo de 12 a las 17:05

¿Qué es lo que no funciona al respecto exactamente? ¿Qué está haciendo exactamente? ¿Qué has hecho para averiguarlo, con qué tipo de datos estás tratando? Parece que está tratando con datos de tipo CSV, ¿por qué elige leerlo de esta manera? Parece una forma extraña de leer un archivo. -

Estoy leyendo el archivo usando StreamReader y luego almacenando el archivo en una cadena. Luego quiero reemplazar las partes que están marcadas como {0},{1},{2}, etc. con datos "reales". El archivo se escribe bien, pero aún contiene todos mis marcadores. -

Ok, lo descubrí ... ver ediciones arriba -

Dado que los índices de la matriz se alinean, solo debería poder pasar la matriz una vez, en lugar de elementos individuales: fileText = String.Format(fileText, dArr) -

2 Respuestas

fileText = fileText.Replace("{" & i & "}", DisplayStudentData(i))

Reemplazar devuelve un Un nuevo cuerda. No modifica la cadena desde la que se llamó.

También puedes hacer esto:

fileText = String.Format(fileText, Enumerable.Range(0,7).Select(Function(i) DisplayStudentData(i)).ToArray())

¿Por qué DisplayStudentData no es solo una matriz en primer lugar (lo que haría que string.Format() sea aún más fácil)?

contestado el 03 de mayo de 12 a las 17:05

+1 Buena respuesta. Se me adelantó en el primer punto, y luego, mientras estaba escribiendo el String.Format método me ganaste en eso también lol. - Curtis

Gracias Joel. ¿Cómo podría DisplayStudentData ser una matriz? Necesito usar el caso de selección para elegir qué elemento de datos devolver. Gracias - Skye Boniwell

@JoelCoehoorn inicialmente usaste loop para hacer {0}{1}{2}{3}{4}{5}{6} y luego la siguiente línea como mencionaste. ¿No es esto demasiado código? - Pankaj

¿En qué espacio de nombres está Enumerable? Parece que no puedo encontrarlo (.net 2.0) - Skye Boniwell

Acabo de enterarme de que System.Linq no es compatible con mi versión de .NET - Skye Boniwell

en otra nota, si sabes que la cuerda siempre permanecerá igual

podrías hacer algo como

dim myTestString = "{0} {1} {2} {3} {4} {5} {6}"
dim result as string = string.format(myTeststring, "testFirstName", 
 "testTitle", "testClass", "testTeacher", "testDept", "testEmail", "testPhone")

siempre puede convertirlo en una propiedad de su objeto de datos de estudiantes.

contestado el 03 de mayo de 12 a las 17:05

Bueno, no siempre será lo mismo...{0}, {1}, {2}, etc. siempre estarán en el archivo de texto, pero los reemplazos serán diferentes nombres, títulos, etc... - Skye Boniwell

Asumiré que está obteniendo su información de un archivo de estructura (como Excel). Simplemente lea su fila, reemplace "testFirstName" con la columna apropiada, etc. - Lareau

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.