Portal    Foro    Buscar    FAQ    Registrarse    Conectarse


Publicar nuevo tema  Responder al tema 
Página 1 de 1
 
 
Text Finder
Autor Mensaje
Responder citando   Descargar mensaje  
Mensaje Text Finder 
 
Hola

Quería recibir una ayudita de esta gran comunidad gambas.

Les cuento lo que quiero lograr en gambas. Quiero que el programa encuentre ficheros con extensión jnlp de un directorio que se le asigne. A partir de allí, a cada uno los editará buscando en su contenido la cadena:

Código: [Descargar] [Ocultar]
  1. <jnlp spec="1.0+" codebase="file:///C:\Program Files\PhET-1.0/sims/battery-voltage" href="battery-voltage_el.jnlp"> 


Y que la reemplace por:

Código: [Descargar] [Ocultar]
  1. <jnlp spec="1.0+" codebase="../battery-voltage" href="battery-voltage_el.jnlp"> 


Son distintos archivos y pretendo que a cada uno, que tienen diferentes nombres, en vez de la larga cadena que comienza con "file:///" sólo queden los 2 puntitos seguido de la barra y el nombre de la carpeta en al que se encuentra el archivo jnlp.

Sé que puedo hacerlo manualmente, pero sería interesante un programa para ello.
 



 
pelucas95 - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Text Finder 
 
Hola pelucas95, bienvenido...
Citar:
un directorio que se le asigne

Para esto puedes usar la siguiente instrucción:
Dialog.SelectDirectory()
 



Citar:
Quiero que el programa encuentre ficheros con extensión jnlp


Pueses usar un comando de consola "ls"
Shell "ls " & ruta & "/*.jnlp"  & " >" & User.home & "/listado.txt"


Esta linea creara un fichero "listado.txt", que contiene todos los archivos de la ruta que le has dicho con la extensión "jnlp" (en cada linea habrá una ruta más el nombre del archivo

Ahora tendras que procesar cada archivo y linea por linea ver si tiene el contenido que tienes que sustituir....


He creado una clase para que veas como es todo el proceso:
' gambas class file

Private ruta As String
Private arr_lista_ficheros_a_procesar As String[]

Public Sub _new()

    Dialog.SelectDirectory()
    'este es la carpeta...
    ruta = Dialog.Path

End

Public Sub listaficheros()

    Dim a As Integer
    Dim extension As String
    Dim fichero_temporal As String

    extension = "jnlp"
    fichero_temporal = User.home & "/listado.txt"
    Shell "ls " & ruta & "/*." & extension & " >" & fichero_temporal Wait

    arr_lista_ficheros_a_procesar = Split(File.LOAD(fichero_temporal), "\n")
    For a = 0 To arr_lista_ficheros_a_procesar.count - 1
        Print arr_lista_ficheros_a_procesar[a]
    Next

End

Public Sub procesa()

    Dim a As Integer

    For a = 0 To arr_lista_ficheros_a_procesar.count - 1
        cambia(arr_lista_ficheros_a_procesar[a])
    Next

End

Private Sub cambia(nombre_fichero As String)

    Dim lineas As String[]
    Dim a As Integer
    Dim contenido As String

    If Exist(nombre_fichero) Then
        lineas = Split(File.Load(nombre_fichero), "\n")

        For a = 0 To lineas.count - 1
            lineas[a] = procesacambio(lineas[a])

        Next

        'las lineas se han procesado,  voy a añadirla a una variable tipo cadena

        For a = 0 To lineas.count - 1
            contenido &= lineas[a]
        Next

        'ahora guardo la variable tipo cadena con el nombre del fichero (sustituyendo el antiguo, por uno nuevo con las lineas modificadas)
        File.Save(nombre_fichero, contenido)
    Endif

End

Private Function procesacambio(cadena As String) As String

    Dim tmp As String
    Dim final As Integer 'donde empieza: href="battery-voltage_el.jnlp">
    Dim pos As Integer 'donde empieza el: /battery-voltage" href="battery-voltage_el.jnlp">
    Dim inicio As Integer 'donde empieza el: file:///

    If Mid$(cadena, 1, Len("<jnlp spec=")) = "<jnlp spec=" Then
        'la linea empieza adecuadamente, para intentar hacer el cambio
        ' busco la cadena...
        'final de la cadena debe de estar antes de href=
        final = RInStr(cadena, "href=")
        'buscar en la cadena principal, el ultimo "/" antes de llegar al href
        pos = RInStr(Mid$(cadena, 1, final), "/")
        inicio = InStr(cadena, "file:///")
        If inicio = 0 Or final = 0 Then
            'no encuentra file o href .... devuelve la cadena
            Return cadena
            Return
        Endif
        'sustituyendo...

        tmp = Mid$(cadena, 1, inicio - 1) & ".." & Mid$(cadena, pos, Len(cadena))
        Print "Se ha realizado un cambio..."
        Print cadena
        Print "sustituida por:"
        Print tmp
        Return tmp

    Else
        'la linea no empieza por   "<jnlp spec="
        Return cadena
    Endif

End
 


Y para usar esta clase, en el formulario principal:

Public Sub Form_Open()

    Dim trata As New Tratamiento

    trata.listaficheros()
    trata.procesa()

End


buscarjnlp-0.0.1.tar.gz
Descripción:  
Descargar
Nombre del archivo: buscarjnlp-0.0.1.tar.gz
Tamaño: 5.71 KB
Descargado: 39 veces
buscarjnlp-0.0.1.tar.gz
Descripción:  
Descargar
Nombre del archivo: buscarjnlp-0.0.1.tar.gz
Tamaño: 5.71 KB
Descargado: 39 veces
buscarjnlp-0.0.1.tar.gz
Descripción:  
Descargar
Nombre del archivo: buscarjnlp-0.0.1.tar.gz
Tamaño: 5.71 KB
Descargado: 39 veces

 




===================
Blog personal
Web: SoloGambas seleccion de articulos dedicados a Gambas
Visita el Curso de Gambas3 ¡¡¡Gratuito!!!
 
última edición por jsbsan el Domingo, 04 Marzo 2012, 21:54; editado 1 vez 
jsbsan - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Text Finder 
 
Julio:

Esto,por que no usaste el dir ?.
Ejemplo:


SUB PrintDirectory(Directory AS String)

  DIM File AS String

  FOR EACH File IN Dir(Directory, "*.png").Sort()
    PRINT File
  NEXT

END
 


Si usamos comandos externos a gambas le quitamos protagonismo..   
A menos que quieras usar las posibilidades de un comando externo.

Entre usar una cosa y otra te comento una duda que ya tuve hace tiempo.
Cuando usar una cosa u otra.

De los antiguos programas de Spectrum en los emuladores usa la extensión TZX y TAP (que son las cintas convertidas a PC)
Quería que de cada archivo con extensión TZX o TAP me presentase las cabecera de cada programa contenido en la cinta.Solo "Program"
Yo uso en Linux el emulador Fuse, que trae una utilidad Tzxlist para mostrar el contenido de las cintas.

Si lo hacia con un script de Shell de Unix se quedaba así:

#/bin/sh
clear;
IFS=$'\x0A'$'\x0D'
for fichero in *.tzx *.tap;
do
echo $fichero
tzxlist $fichero|grep "Program"
done;

 


Ahora bien. Y si usaba un script en gambas y hago uso de un comando externo (para que se pueda listar el contenido de la lista)

#!/usr/bin/env gbs2

#Usamos un script realizado en gambas

Dim directorio as string
dim ficheros as string[]
Dim fichero as string

directorio=user.home&/"Prueba/JuegoSpectrum/"
ficheros=dir(directorio,"*.tzx")
ficheros.insert(dir(directorio,"*.tap"))

for each fichero in ficheros
    print fichero                      
    shell ("tzxlist "& chr$(34) & directorio & fichero & chr$(34) & " | " & "grep "& chr$(34) & "Program" & chr$(34)) wait      
next
 


¿ Donde hay menos código ?.
Dilema..

Entonces, es lo que cada programador busque.Y eso que hacen los dos lo mismo.Pero claro, gambas es gambas y ya
conoces el dicho de "Tiran mas dos....".

Y lo bonito que quedaría en un formulario..

Saludos.
 




===================
Gambas Básico
"No es un bug, es una característica no documentada"
 
última edición por Shell el Lunes, 05 Marzo 2012, 10:06; editado 2 veces 
Shell - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Text Finder 
 
Citar:
por que no usaste el dir ?.


Pues la verdad, no lo conocia.... Tambien como suelo usar comandos externos, me resulta cómodo "un camino mas trillado", y no busco otras forma que tambien pueden funcionar....


Saludos

Nota:
¿todavia juegas con juegos de spectrum???    
 




===================
Blog personal
Web: SoloGambas seleccion de articulos dedicados a Gambas
Visita el Curso de Gambas3 ¡¡¡Gratuito!!!
 
jsbsan - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Text Finder 
 
Hola Julio.

jsbsan escribió: [Ver mensaje]


¿todavia juegas con juegos de spectrum???    


 

Adoro esos ordenadores antiguos. Es una pena que la gente pueda tirar esas reliquias.
Jugar exactamente no,trastear si.El basic por muy antiguo que sea sigue siendo basic.

Realmente,¿ que hay de original en los juegos de hoy ?.
¿ Cuantos de ellos tienen ideas originales ?.Muy pocos.

Saludos.
 




===================
Gambas Básico
"No es un bug, es una característica no documentada"
 
Shell - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Text Finder 
 
Yo tengo una coleccion de estos mostruos de la tecnologia en casa... todos funcionando, desde el ZX81 hasta el Amiga 1200 Incluso alguno tuneado como por ejemplo el C64 con lector de SD, jejeje
 



 
arubioc - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Text Finder 
 
Excelentísimo. Lo he probado y anda perfectamente. Gracias.

Hay partes que le entiendo al código y otras en las que no tanto  
 



 
pelucas95 - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Mostrar mensajes anteriores:    
 
OcultarTemas parecidos
Tema Autor Foro Respuestas último mensaje
No hay nuevos mensajes Scrolling Text techm3 General 3 Sabado, 19 Junio 2010, 05:22 Ver último mensaje
abarzuaf
No hay nuevos mensajes Añadir Popup Menu A Text Box angelnu Controles/Librerías/Componentes 13 Lunes, 25 Octobre 2010, 20:21 Ver último mensaje
jsbsan
No hay nuevos mensajes Bug O Error Con Key.Text Y Gb.qt / Gb.qt.e... BrunoIV General 8 Viernes, 19 Agosto 2011, 20:32 Ver último mensaje
Invitado
No hay nuevos mensajes Propiedad Text De ToolButton GTK Distinto ... tincho Aplicaciones/Fragmentos de Código 3 Miercoles, 04 Octobre 2017, 17:06 Ver último mensaje
tincho
 

Publicar nuevo tema  Responder al tema  Página 1 de 1
 

Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado
Usuarios registrados conectados: Ninguno


 
Lista de permisos
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas
No puede adjuntar archivos
Puede descargar archivos
No puede publicar eventos en el calendario



  

 

cron