https://foro.gambas-es.org/viewtopic.php?f=3&t=7015
-----------------------------------
v3ctor
Domingo, 24 Junio 2018, 00:45

Recurso Curioso, No Se Me Ocurrio Otra Forma
-----------------------------------
buenas,

en el programa VisorRV1960 estoy luchando para encontrar un buen método de búsqueda.

parece que lo mejor es el texto plano

así podemos buscar y encontrar pongamos las palabras con faltas o no.
también evitando los saltos de linea odiosos para las búsquedas en sqlite3.
hasta ahora el texto semiPlano  :razz:  lo tenia en un txt y ahi buscaba pero no podia hacer otras cosas muy importantes que si ese texto estuviera en la misma base de datos.

entonces estoy probando (y me tiemblan las manos, aunque lo hago con proyecto de copia y base de copia también) de la siguiente manera, cree manualmente en las 66 tablas un campo llamado 'textoPlano'.

el dilema es como copiar, procesar y guardar el nuevo texto en las columnas correspondientes textoPlano.

al principio intente hacer todo sobre la misma base de datos no me dio resultado no se si sera posible.

después use otra método, de una base leía los datos y en otra copia injertaba el texto plano en los campos vacíos de la columna 'textoplano' y funciono demoro 40 minutos en copiar toda la base de datos, mejor que pasar dos años mas pasando a mano es jajajaj.

aquí les dejo el código por si a alguien le pueda servir o dar ideas.

[code linenumbers=false syntax=gambas]Public Sub Button3_Click()
  
  Dim tabla As String
  Dim tablaX As Table
  Dim campoX As Field
  Dim r1 As Result
  Dim sql1, sql2 As String
  Dim textoPlano As String
  Dim idTabla As String
  Dim cn_Desktop As Connection
  
  Application.Busy = 1
  
  cn_Desktop = New Connection
  cn_Desktop.Type = "sqlite3"
  cn_Desktop.Name = "BibliaRV1960"
  cn_Desktop.Host = "/home/juan/Escritorio"
  
  Try cn_Desktop.Open()
  
  If Error Then
    Message.Error(Error.Text)
    Return
  Endif
  
  For Each tabla In subBiblia.TodasLasTablas()
    
    For Each tablaX In vp.Cn.Tables
      If tablaX.Name = tabla Then
        For Each campoX In tablaX.Fields
          If Left(campoX.Name, 2) = "id" Then
            idTabla = campoX.Name
            Break
          Endif
        Next
      Endif
    Next
    
    sql1 = Subst$("Select * from '&1'", tabla)
    r1 = vp.Cn.Exec(sql1)
    
    Do While r1.Available
      
      textoPlano = subFto.ConvertirTextoToTextoPlano(r1!texto, True)
      
      sql2 = Subst("Update '&1' set textoPlano='&2' where &3=&4", tabla, textoPlano, idTabla, r1[idTabla])
      
      labTabla.Text = "tabla=" & tabla & "  :  idtabla=" & idTabla & "  : r1[idTabla]=" & r1[idTabla]
      Wait 0.0001
     
      Try cn_Desktop.Exec(sql2)
      
      If Error Then
        Message.Error(Error.Text)
        Break
      Endif
      
      r1.MoveNext
    Loop
    
  Next
  
  Application.Busy = 0
  
End[/code]


-----------------------------------
jsbsan
Domingo, 24 Junio 2018, 12:57

Re: Recurso Curioso, No Se Me Ocurrio Otra Forma
-----------------------------------
v3ctor:

[quote]hasta ahora el texto semiPlano    lo tenia en un txt y ahi buscaba pero no podia hacer otras cosas muy importantes que si ese texto estuviera en la misma base de datos.[/quote]

¿probaste con el comando grep? Es muy potente... y rápido (supongo que mucho más que la base de datos)

https://fortinux.gitbooks.io/humble_tips/content/usando_la_linea_de_comandos/tutorial_usar_grep_para_buscar_texto_dentro_de_archivos_en_gnulinux.html


-----------------------------------
mckaygerhard
Martes, 10 Julio 2018, 15:41

Re: Recurso Curioso, No Se Me Ocurrio Otra Forma
-----------------------------------
vector y porque no implementas el proyecto sword en gambas o haces una interfaz gambas para sword, creo esto el programa rv reinventa la rueda en cienrto nivel, lo bueno es que se enfoca en español pero no deja de ser lo mismo que xiphos

creo que concentrarte en saber como usar libsword o la linea de comandos es mejor asi puedes echar mas codigo n nuevas features para el programa en si


-----------------------------------
mckaygerhard
Martes, 10 Julio 2018, 15:51

Re: Recurso Curioso, No Se Me Ocurrio Otra Forma
-----------------------------------
mira vector par no lidiar con importar shared libs complicadas s puede en cambio usar la linea de comandos de sword https://packages.debian.org/sid/diatheke y terminarias haciendo un frontend de esta, si le hace falta algo simplemente haces el request a el proyecto

esto da potencia porque esa linea de comandos seria el "engine" y podrias entonces con el mismo codigo gamba hacer uan version web y otra desktp.. inclusive importarlo a androit usando webviews y cgi (claro esto ultimo solo online pero es algo)

el tema es que seria menos complicado que pensar codigo de busqueda propio


-----------------------------------
v3ctor
Martes, 10 Julio 2018, 17:31

Re: Recurso Curioso, No Se Me Ocurrio Otra Forma
-----------------------------------
[quote user="mckaygerhard" post="42414"]mira vector par no lidiar con importar shared libs complicadas s puede en cambio usar la linea de comandos de sword https://packages.debian.org/sid/diatheke y terminarias haciendo un frontend de esta, si le hace falta algo simplemente haces el request a el proyecto

esto da potencia porque esa linea de comandos seria el "engine" y podrias entonces con el mismo codigo gamba hacer uan version web y otra desktp.. inclusive importarlo a androit usando webviews y cgi (claro esto ultimo solo online pero es algo)

el tema es que seria menos complicado que pensar codigo de busqueda propio[/quote]

parece que esta interesante lo que dices cuando pueda lo ojeo a ver como funciona, gracias por el pique gambero jjaajja.


