2011-03-29 31 views
7

esto es probablemente una pregunta muy simple. Pero tengo esta matriz de la que necesito quitar partes inútiles. Pero todavía lo quiero en una matriz.VB - ¿Agregar a la matriz?

Así, la matriz se ve así cuando se trata de:

ArrValues(0) "Firstname=FIRSTNAME" 
ArrValues(1) "Lastname=LASTNAME" 
ArrValues(2) "Username=USERNAME" 
ArrValues(3) "Displayname=DISPLAYNAME" 

Entonces le envío esta matriz a través de este fragmento de código:

For Each s In arrValues 
    s = Split(s, "=") 
    s = s(1) 
Next 

Este retira las cuerdas, así que sólo reciben FIRSTNAME y pronto. Pero, quiero enviar cada cadena limpiada a una matriz nuevamente. ¿Cómo puedo hacer eso?

+0

¿Su idea es tomar la cadena justo después del signo =? Si es así, te sugiero que uses la función MID. –

+2

@Tiago - ¿Por qué usar MID? ¿Qué pasa con el uso de la función Dividir? –

+1

@Joel Goodwin No hay nada de malo en usar Split. Pero la función dividida se transmite en el hecho de que todos los valores se declaran como variantes, porque se volverán a dimensionar, es decir, una variante con un valor "Firstname = FIRSTNAME" se convertirá en una matriz con dos valores, (Firstname, FIRSTNAME). Usando la función MID, lo evitaremos. Como mencioné en mi publicación, no soy un experto en rendimiento (¿existe un experto en rendimiento VBA?) Pero creo que es mejor evitar este redim siempre que sea posible. Aún así, Split hace el trabajo deseado también. –

Respuesta

3

Como siempre y cuando tenga todas las cuerdas con un signo '=', este código debería funcionar ... usando la función MID. No soy un experto en rendimiento, pero creo que una función MID tendría un mejor rendimiento que SPLIT (ya que split redimirá cada valor).

Aún así, el código de Helen podría funcionar también. Solo compartí este código para mostrar mi enfoque MID :)

Sub MidArray() 

    Dim ArrValues(3) As Variant 
    Dim vValue As Variant 
    Dim iCount As Integer 

    ArrValues(0) = "Firstname=FIRSTNAME" 
    ArrValues(1) = "Lastname=LASTNAME" 
    ArrValues(2) = "Username=USERNAME" 
    ArrValues(3) = "Displayname=DISPLAYNAME" 

    For iCount = LBound(ArrValues) To UBound(ArrValues) 

     ArrValues(iCount) = Mid(ArrValues(iCount), InStr(ArrValues(iCount), "=") + 1) 

    Next iCount 

End Sub 
+1

Por cierto, su código no escribe en la matriz; de eso se trata en realidad la pregunta. – Helen

+0

Ups ... ¡Gracias, Helen! Código Fix'd. –

+0

Gracias! Esto fue realmente lo mismo que pensé :) con ligeras diferencias. Pero creo que la sugerencia de Helen fue la que estaba buscando en primer lugar. Pero creo que voy a establecer esta como la respuesta de todos modos. Principalmente porque tiene una mejor reputación;) –

7

Para volver a escribir en la matriz, debe utilizar la notación ArrValues(index) = new_value. Por lo tanto, debe utilizar un bucle For normal en lugar de For Each, y acceder a los elementos de la matriz por sus índices. Así es como se puede hacer esto:

For i = LBound(ArrValues) To UBound(ArrValues) 
s = ArrValues(i) 
s = Split(s, "=") 
ArrValues(i) = s(1) 
Next