Buenas!.
Estoy viendo la aplicación de Alberto.
Quiero buscar la palabra "CAJA" pero no quiero que se muestren palabras que contengan estas.
Por ejemplo no quiero que en los resultados de la búsqueda me muestre DIARIOCAJA ó BDCajaseguridad
He probado a marcar la opción Sólo palabras, pero no es la adecuada.
Creo que lo ideal es usar una expresión regular, pero no sé como se usan en el menú de búsquedas de Gambas.
Os muestro un ejemplo desde la línea de comandos.
Desde el menú de herramientas de Gambas, abro una terminal. Ahora estoy en el directorio raíz del proyecto.
Como sé que las fuentes del proyecto se encuentran en .src me voy a este.
Ok, ahora vamos a usar el comando grep del shell de Linux.
En esta parte voy a buscar la palabra "CAJA" en todos los archivos del directorio fuente del proyecto.
Me muestra: ( A ver como se muestra el Copy & Paste )
Cita:
FMain.class: TablaContactos = Conexion.Exec("Select * from DIARIOCAJA")
FMain.class: TablaContactos = conexion.Exec("select * from DIARIOCAJA")
FMain.class: TablaContactos = Conexion.Exec("Select * from DIARIOCAJA")
FMain.class: TablaContactos = Conexion.Exec("Select * from DIARIOCAJA")
FMain.class: VarResult = Conexion.Create("DIARIOCAJA")
FMain.class: TablaContactos = Conexion.Exec("Select * from DIARIOCAJA")
FMain.class: ' resultados = Conexion.Exec("Select sum(SALDO) TOTAL from DIARIOCAJA") 'OBTENEMOS LA SUMA TOTAL DEL CAMPO
FMain.class: ruta = Application.Path &/ "CAJA"
FMain.class: rutacopia = Application.Dir &/ "BDCAJAseguridad"
FMain.class: Shell "cp /home/alberrto/Diariodecaja/* /home/alberrto/BDCAJAseguridad"
FMain.class: Shell "cp /home/alberrto/BDCAJAseguridad/* /home/alberrto/Diariodecaja"
FMain.class: Shell "mkdir /home/alberrto/BDCAJAseguridad"
FMain.class: Shell "cp /home/alberrto/Diariodecaja/* /home/alberrto/BDCAJAseguridad"
FMain.form: Text = ("COPIA SEGURIDAD BASE DATOS CAJA")
frmes.class: TablaContac = ConnX.Exec("Select * from DIARIOCAJA")
frmes.class: TablaContac = ConnX.Exec("Select * from DIARIOCAJA where mes='" & TextBox1.text & "' ")
ModSQL.module: .name = "CAJA"
reportdiarioenero.class: TablaContactos = Con.Exec("Select * from DIARIOCAJA")
reportdiarioenero.class: hRes1 = Con.Exec("Select * from DIARIOCAJA ")
Reportpormes.class: TablaContactos = Con.Exec("Select * from DIARIOCAJA ")
Reportpormes.class: hRes1 = Con.Exec("Select * from DIARIOCAJA where MES='" & text1 & "' ")
Fijaros que muestra la palabra pero esta contenida en otras.
Ahora vamos a usar una opción que tiene el comando Grep para que la búsqueda sea más exacta.
Ahora se muestra esto:
Cita:
Main.class: ruta = Application.Path &/ "CAJA"
FMain.form: Text = ("COPIA SEGURIDAD BASE DATOS CAJA")
ModSQL.module: .name = "CAJA"
Preguntas.
¿ La característica de usar expresiones regulares en el buscador del editor de Gambas está activa ?
( Incluso si se tuviese que añadir al proyecto el componente gb.pcre ).
Encontré una referencia en la lista internacional pero es del año 2021!! y no hubo más respuestas. ( Nada concreto )
Si se supone que se muestra la opción, la característica debería estar incorporada, no es un adorno.
¿ Cómo se usan las expresiones regulares en el menú de búsquedas del editor de Gambas ?. ( Con esta me conformo ).
¿ Cómo podría hacer eso directamente en el menú de búsquedas del editor de Gambas ?. ( No es necesario. Me gusta complicarme.
)
Saludos
Revisando el código fuente de Gambas donde vemos la carpeta "Search".
Usa el comando grep aparentemente.
He usado esto y la respuesta es muy aproximado a lo que quiero.
La salida fue:
Falta este, pero debe ser por la construcción de la expresión regular.
Cita:Main.form: Text = ("COPIA SEGURIDAD BASE DATOS CAJA")
Por cierto, los paréntesis que muestro en la búsqueda no son necesarios. Con "CAJA", es suficiente.
No me convence. Esta buscando "CAJA" con las comillas incluidas
Esta es la función o procedimiento que usa el código fuente de Gambas para usar Grep.
Código:
Private Sub GrepFile(sPath As String, Optional bUseReplaceString As Boolean)
Dim sText As String
Dim aGrep As String[]
Dim sGrep As String
Dim sFind As String
Dim sTemp As String
' Dim iAge As Integer
' Dim hGrepResult As CGrepResult
Dim iPos As Integer
Dim sSearch As String
Dim hFile As Object
Dim sResult As String
Dim iFilePos As Integer
Dim hEditor As TextEditor
hFile = Project.Files[sPath]
If sPath Then
If Not hFile Or If Not hFile.IsModified() Then
sTemp = sPath 'Project.GetUncompressedPath(sPath, True)
Endif
Endif
If Not sTemp Then
Try hEditor = hFile.GetEditor()
If hEditor Then Object.Lock(hEditor)
Try sText = hFile.GetText()
If hEditor Then Object.Unlock(hEditor)
If Not sText Then Return
sTemp = Temp$("grep")
File.Save(sTemp, sText)
Endif
aGrep = ["grep", "-nobs"]
If bUseReplaceString Then
' aGrep.Add("-F")
' aGrep.Add("--")
' aGrep.Add(ReplaceString)
Else
If IgnoreCase Then aGrep.Add("-i")
If RegularExpression Then
aGrep.Add("-E")
Else If WordsOnly Then
aGrep.Add("-E")
Else
aGrep.Add("-F")
Endif
aGrep.Add("--")
sSearch = Search
If WordsOnly Then sSearch = "(^|[^_$[:alnum:]])" & Project.GrepQuote(Search) & "($|[^_$[:alnum:]])"
aGrep.Add(sSearch)
Endif
aGrep.Add(sTemp)
'grep -nR -F -I -i -w -ob --exclude=*~ --exclude-dir=.svn -s -- "Date" * .src
Exec aGrep To sGrep
For Each sFind In Split(sGrep, "\n", "", True)
iPos = InStr(sFind, ":")
If iPos = 0 Then Continue
sResult = CStr(CInt(Left(sFind, iPos - 1)))
sFind = Mid$(sFind, iPos + 1)
iPos = InStr(sFind, ":")
If iPos = 0 Then Continue
iFilePos = CInt(Left(sFind, iPos - 1))
sFind = Mid$(sFind, iPos + 1)
If WordsOnly Then
If IgnoreCase Then
If String.LCase(sFind) Not Begins String.LCase(Search) Then iFilePos += String.Len(String.Left(sFind))
Else
If sFind Not Begins Search Then iFilePos += String.Len(String.Left(sFind))
Endif
sFind = Search
Endif
sResult &= ":" & CStr(iFilePos)
sResult &= ":" & CStr(Len(sFind)) & ":" & CStr(String.Len(sFind)) '& ":" & sFind
Print sResult
Flush
'Sleep 0.005
Next
End
Eso es. Marca la opción solo palabras.
Salida:
Osea, usa el comando grep probablemente con expresiones regulares ( dentro de lo posible ), pero
no es necesario marcar la opción.