Hola que tal nuevamenteee :P:P
Queria consultar una cosita... Tengo un texto que es todo seguido, pero quiero dividirlo...
Como para poner un ejemplo, supongamos que son todos USUARIOS, usuario1, usuario2, usuario3...
El texto me lo devuelve una web php con "echo"...
Seria asi:
dato1|dato2|dato3|dato4|1 dato1|dato2|dato3|dato4|2 dato1|dato2|dato3|dato4|3
Como ven, son 4 datos y despues del 4to separador esta el identificador de cada usuario.
La cuestion es que no se me ocurre como identificar los 4 datos + el identificador de cada "usuario"...
Estaba pensando en contar los separadores y al llegar a 4, que haga un split y corte como si fuera un usuario... Pero tampoco se como hacerlo...
Va, se me ocurre readfield pero no se no me convence, hay alguna otra alternativa?
Gracias!!!
No se entiende bien lo q dices pero parece q usando split simplemente se puede pero veo q lo has intentado no se, explica mejor.
mmm se me complica para explicarlo quizas xD
aver yo tengo este texto:
dato1|dato2|dato3|dato4|1 dato1|dato2|dato3|dato4|2 dato1|dato2|dato3|dato4|3
Se supone que son 3 usuarios que tienen 4 datos cada uno y al final el identificador...
dato1|dato2|dato3|dato4|1
dato1|dato2|dato3|dato4|2
dato1|dato2|dato3|dato4|3
Quiero separarlos osea:
dim Usuario() as string
Usuario(1) = dato1|dato2|dato3|dato4|1
Usuario(2) = dato1|dato2|dato3|dato4|2
Usuario(3) = dato1|dato2|dato3|dato4|3
No intente hacer split, lo usaria para luego de tener los datos de cada usuario, ahi si hacer un split y separar cada uno de los datos del usuario...
Pero teniendolo asi (original):
dato1|dato2|dato3|dato4|1 dato1|dato2|dato3|dato4|2 dato1|dato2|dato3|dato4|3
Como puedo separar cada usuario?
Fa tienes razon, yo no se mucho pero tendria q saber como hacer un array de arrays q es lo q falta creo mira esto:
Dim Data As String
Dim Usuario1() As String, Usuario2() As String
Dim Usuario3() As String
Data = "dato1|dato2|dato3|dato4|1 dato1|dato2|dato3|dato4|2 dato1|dato2|dato3|dato4|3"
Usuario1() = Split(Data, "|" & 1)
Usuario2() = Split(Usuario1(1), "|" & 2)
Usuario3() = Split(Usuario2(1), "|" & 3)
MsgBox Usuario1(0)
MsgBox Usuario2(0)
MsgBox Usuario3(0)
Lo hice de esa forma por si sabes hacer lo de un array dentro de otro xD yo tendria q saberlo talvez son los vasos de mas q tengo xD me fui!!
Hay otras formas, pero a mi me encanta las expresiones regulares :xD
Public Function GetData(ByVal strText As String) As Collection
Dim cTemp As New Collection
Dim oRegExp As Object
Dim oMatch As Object
Dim oMatches As Object
Set oRegExp = CreateObject("VBScript.RegExp")
With oRegExp
.Pattern = "[\w\d]+\|[\w\d]+\|[\w\d]+\|[\w\d]+\|(\d+)"
.Global = True
.IgnoreCase = True
End With
Set oMatches = oRegExp.Execute(strText)
For Each oMatch In oMatches
cTemp.Add oMatch.SubMatches(0)
Next
Set GetData = cTemp
End Function
Private Sub Form_Load()
Dim vItem As Variant
Const S As String = "dato1|dato2|dato3|dato4|1 dato1|dato2|dato3|dato4|2 dato1|dato2|dato3|dato4|3"
For Each vItem In GetData(S)
MsgBox vItem
Next
End Sub
Mmmm raul tu funcion me devuelve el identificador de cada usuario verdad? Y como obtengo los datos de cada uno siendo asi?
Gracias a los 2!
Perdon por el doble post, ya lo solucione, no sera la mejor manera, pero me funciona perfecto, aca les dejo como hice!
Private Sub Form_Load()
Dim i As Integer, l As Integer
Dim Data As String, X As String, Datos As String, Dats() As String
Dim Usuario(100) As String
Datos = "0 dato1|dato2|dato3|dato4|1 dato5|dato6|dato7|dato8|2 dato9|dato10|dato11|dato12|3 dato13|dato14|dato15|dato16|4 dato17|dato18|dato19|dato20|5"
X = Right(Data, 1) 'ultimo usuario (en este caso seria x = 5)
For i = 1 To X 'hacemos el recorrido del usuario 1 hasta x (ultimo usuario)
Datos = ReadField((i * 4) - 3, Data, Asc("|")) & ReadField((i * 4) - 2, Data, Asc("|")) & ReadField((i * 4) - 1, Data, Asc("|")) & ReadField(i * 4, Data, Asc("|"))
Dats() = Split(Datos, i - 1 & " ")
Usuario(i) = Dats(1)
Next i
For l = 1 To X
MsgBox Usuario(l)
Next l
End Sub
Private Function ReadField(ByVal Pos As Integer, ByVal Text As String, ByVal SepASCII As Integer) As String
Dim i As Integer
Dim LastPos As Integer
Dim CurChar As String * 1
Dim FieldNum As Integer
Dim Seperator As String
Seperator = Chr$(SepASCII)
LastPos = 0
FieldNum = 0
For i = 1 To Len(Text)
CurChar = Mid$(Text, i, 1)
If CurChar = Seperator Then
FieldNum = FieldNum + 1
If FieldNum = Pos Then
ReadField = Mid$(Text, LastPos + 1, (InStr(LastPos + 1, Text, Seperator, vbTextCompare) - 1) - (LastPos))
Exit Function
End If
LastPos = i
End If
Next i
FieldNum = FieldNum + 1
If FieldNum = Pos Then
ReadField = Mid$(Text, LastPos + 1)
End If
End Function
.
Si usas el Split con ese tipo de datos deberias usar una estructura para que todo sea mas organizado.
Temibles Lunas!¡.