Access - simplificar información de un campo

 
Vista:

simplificar información de un campo

Publicado por nuria (1 intervención) el 23/04/2024 19:25:13
tengo información en un campo del tipo:

mesa grande blanca %MEGRBL%
banco azul %BAAZ%
silla pequeña amarilla %SIPEAM%

quiero poder extraer el código que me aparece dentro de los signos porcentaje en otra columna y no consigo hacerlo, gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

simplificar información de un campo

Publicado por Anonimo (3369 intervenciones) el 23/04/2024 22:58:42
Si uno de ellos siempre esta al final:

La ubicación del primer signo, que se obtiene con la función InStr, que devuelve su posición (se le añadira una unidad para excluir el signo)
1
2
?instr("mesa grande blanca %MEGRBL%","%")
 20

La longitud del dato se logra así:
.- con la función Len se obtiene la longitud total de la cadena
.- a esta longitud se le resta el inicio
.- para excluir el signo final, se le resta una unidad

1
2
?Len("mesa grande blanca %MEGRBL%","%")
 27

Conocido el inicio y su longitud, con la función MID se obtiene: (en el ejemplo el dato esta en la variable UnTexto):
1
2
3
4
5
6
7
8
9
10
11
UnTexto = "mesa grande blanca %MEGRBL%"
?Mid(UnTexto,InStr(UnTexto,"%")+1, Len(UnTexto)-1-InStr(UnTexto,"%"))
MEGRBL
 
UnTexto= "banco azul %BAAZ%"
?Mid(UnTexto,InStr(UnTexto,"%")+1, Len(UnTexto)-1-InStr(UnTexto,"%"))
BAAZ
 
UnTexto = "silla pequeña amarilla %SIPEAM%"
?Mid(UnTexto,InStr(UnTexto,"%")+1, Len(UnTexto)-1-InStr(UnTexto,"%"))
SIPEAM

Si el signo no esta al final de la cadena (ambos están en el medio) para obtener el signo final se puede utilizar la función InStrRev que hace lo mismo que InStr, pero comienza por el final

1
?Mid(UnTexto,InStr(UnTexto,"%")+1, InStrRev(UnTexto,"%") - InStr(UnTexto,"%")-1)

NOTA:
Mas que simplificar, se trata de 'extraer' de una cadena de texto el dato que hay entre marcadores (que pueden ser iguales o diferentes)
La demo se creo en la 'ventana de inmediato'
En una consulta como separador de listas (en version española) se utilizara el punto y coma en lugar de la coma simple.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Eduardo Pérez Fernández

simplificar información de un campo

Publicado por Eduardo Pérez Fernández (336 intervenciones) el 25/04/2024 01:05:22
Pruebe con este procedimiento

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
Sub ExtraerCodigo()
    Dim rs As DAO.Recordset
    Dim texto As String
    Dim inicio As Integer, fin As Integer
    Dim codigo As String
 
    ' Abrir el recordset con los datos
    Set rs = CurrentDb.OpenRecordset("NombreDeSuTabla")
 
    ' Recorrer el recordset
    Do While Not rs.EOF
        ' Obtener el texto de la columna deseada
        texto = rs.Fields("NombreDeSuCampo").Value
 
        ' Buscar la posición del primer y último signo de porcentaje
        inicio = InStr(texto, "%")
        fin = InStrRev(texto, "%")
 
        ' Extraer el código entre los signos de porcentaje
        If inicio > 0 And fin > 0 Then
            codigo = Mid(texto, inicio + 1, fin - inicio - 1)
 
            ' Actualizar el valor del campo con el código extraído
            rs.Edit
            rs.Fields("NuevoCampo").Value = codigo
            rs.Update
        End If
 
        ' Mover al siguiente registro
        rs.MoveNext
    Loop
 
    ' Cerrar el recordset
    rs.Close
    Set rs = Nothing
End Sub

Haga los respectivos reemplazos nombre de la tabla y los campos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Francisco
Val: 467
Plata
Ha disminuido 1 puesto en Access (en relación al último mes)
Gráfica de Access

simplificar información de un campo

Publicado por Francisco (212 intervenciones) el 25/04/2024 20:31:37
Creo que hay una mejor manera de hacerlo....

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
Option Compare Database
Option Explicit
 
Function GetToken(Text As String, Delimiter1 As String, Delimiter2 As String) As String
 
    ' Variables para almacenar el índice inicial y final del token
    Dim StartIndex As Long
    Dim EndIndex As Long
 
    ' Encontrar el índice inicial del token
    StartIndex = InStr(Text, Delimiter1) + Len(Delimiter1)
 
    ' Si no se encuentra el delimitador inicial, devolver una cadena vacía
    If StartIndex = 0 Then
        GetToken = ""
        Exit Function
    End If
 
    ' Encontrar el índice final del token
    EndIndex = InStr(StartIndex, Text, Delimiter2) - 1
 
    ' Si no se encuentra el delimitador final, devolver la cadena restante
    If EndIndex = 0 Then
        GetToken = Mid(Text, StartIndex)
        Exit Function
    End If
 
    ' Devolver el token
    GetToken = Mid(Text, StartIndex, EndIndex - StartIndex + 1)
 
End Function
 
Sub UpdateField(ByVal miTabla As String, ByVal miCampoOrigen As String, ByVal miCampoDestino As String)
    Dim miSQL As String
 
    miSQL = "UPDATE " & miTabla
    miSQL = miSQL & " SET " & miCampoDestino & " = GetToken(" & miCampoOrigen & ",'%','%');"
 
    DoCmd.SetWarnings False
    DoCmd.RunSQL miSQL
    DoCmd.SetWarnings True
 
End Sub

Lo ejecutas de la siguiente manera

1
call UpdateField("MITABLA","MICAMPO_ORIGEN", "MICAMPO_DESTINO")

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar