Arrat de String's

28/03/2005 - 01:18 por Angel | Informe spam
Hola amigos,

Mi problema es el siguiente:

Supongamos que me llega el siguiente string:

FMM/5
1/BR864/19MAR/LGW
BRU
121-42751741LGWBRU/T5K46MCO.12/NEWSPAPERS
121-73023521LGWBRU/T1K4MCO.05/ACFT INST
LAST

Tengo el siguiente código que me introduce en un array cada una de las
líneas.

Public Function Dividir_Mensaje(ByVal Mensaje As String, ByVal ParamArray
Delimitador() As Char) As String()
Return Mensaje.Split(Delimitador)

End Function

Ahora bien, de cada una de esas líneas tengo que separar por el delimitador
"/". Habia pensado en crearme un array que redimensionandolo guardara cada
una de las partes delimitadas por el caracter "/". El código que realice es
el siguiente:

Dim arrLineas() As String
Dim arrAux() As String
Dim arrCampos() As String
Dim i As Integer
Dim j As Integer
objValidaMensaje = New clsValidaMensaje(strServidor, strBaseDatos,
strConexion)

arrLineas = objValidaMensaje.Dividir_Mensaje(txtMensaje.Text, Chr(13))

For i = 0 To UBound(arrlineas)

arrAux = objValidaMensaje.Dividir_Mensaje(arrLineas(i), "/")

For j = 0 To UBound(arrAux)

ReDim Preserve arrCampos(arrAux(i) + 1)

Next j

Next i

arrLineas = Nothing

arrAux = Nothing

El problema es que al realizar Redim Preserve me genera un error.

¿Es posible redimensionar un array de String? ¿Alguien tiene alguna idea
mejor de como realizarlo?

Acepto todas sus sugerencias.

Muchas gracias de antemano.
 

Leer las respuestas

#1 Leonardo Azpurua
28/03/2005 - 02:56 | Informe spam
"Angel" escribió en el mensaje
news:
Hola amigos,



Hola, Angel:

Mi problema es el siguiente:


[...]

Dim arrLineas() As String
Dim arrAux() As String
Dim arrCampos() As String


[...]
For i = 0 To UBound(arrlineas)
arrAux = objValidaMensaje.Dividir_Mensaje(arrLineas(i), "/")
For j = 0 To UBound(arrAux)
ReDim Preserve arrCampos(arrAux(i) + 1)
Next j
Next i


[...]
arrLineas = Nothing
arrAux = Nothing



Estas dos lineas son prescindibles: al salir del procedimiento serán
"marcados para recolección", aunque no les asignes nothing.

El problema es que al realizar Redim Preserve me genera un error.

¿Es posible redimensionar un array de String? ¿Alguien tiene alguna idea
mejor de como realizarlo?



Si es posible redimensionar un array de string. Lo que no es posible es
utilizar como índice un valor de tipo string arbitrario (arrAux contiene los
Strings que obtuviste de la linea, arrAux(i) es el i-esimo string del
array). Tienes dos errores en tu código: el primero es el intento de sumarle
1 a un string; el segundo es el de utilizar un string como indice.

La manera correcta es esta:

For i = 0 To UBound(arrlineas)
arrAux = objValidaMensaje.Dividir_Mensaje(arrLineas(i), "/")
For j = 0 To UBound(arrAux)
ReDim Preserve arrCampos(arrCampos.GetLength(0))
arrCampos(arrCampos.GetUpperBound(0)) = arrAux(j)
Next j
Next i

Si quieres simplificarte la vida (y ahorrarte las llamadas a GetLength y
GetUpperBound, y unas cuantas variables, puedes escribir:

Dim nCampos As Long = 0
For Each Linea As String In arrLineas
arrAux = objValidaMensaje.Dividir_Mensaje(s, "/")
For each aux As String in arrAux
ReDim Preserve arrCampos(nCampos)
arrCampos(nCampos) = aux
nCampos += 1
Next
Next

No se si sea más eficiente, pero te permite cambiar los vectores por
colecciones, o por listas, o por lo que mejor te parezca.

Otra recomendación es que en vez de usar
a = Split(s, "/")
escribas
a = s.Split("/").

además de ser más directa (la función Split es un "intermediario" que llama
al metodo Split de su argumento) el método Split de los String permite
utilizar un conjunto de separadores.

Salud!


Salud!

Preguntas similares