|
Página 3 de 3
|
Dispositivos USB En Listbox (SOLUCIONADO)
Autor |
Mensaje |
Pablo-GNU
Aprendiz
Registrado: Enero 2010
Mensajes: 57
Edad: 37
|
Re: Dispositivos USB En Listbox
El problema no pasaba por el wait, pasaba porque se redireccionaban los datos desde el terminal y desde gambas al mismo fichero y no podia capturar la salida, pero eso esta arreglado, daba igual que hubiese un wait puesto, de todos modos sigo tu consejo y lo he quitado. Mira, al terminar de hacer el fichero, soplo tambien me paso un codigo para listar el fichero en un Listbox, pero me da errores de variable. Te adjunto el codigo para que lo mires porque no se por donde van los tiros, te agradeceria que me explicases el fallo asi lo termino de comprender, porque no lo encuentro el problema. Desde ya gracias.
PUBLIC SUB Button1_Click()
DIM direccion AS String[]
DIM Contadordev AS Integer
DIM Contadorrem AS Integer
DIM path AS String[]
DIM removable AS String
DIM removableleer AS String[]
DIM unidades AS String
DIM Vendedor AS String
DIM Modelo AS String
DIM Reno AS String
DIM Tamano AS String
DIM f AS File
unidades = Temp
SHELL "ls /sys/block | grep sd >> " & unidades WAIT ' ############ SACO EL CONTENIDO DE UNIDADES SD ##############
SHELL "ls /sys/block | grep hd >> " & unidades WAIT ' ############ SACO EL CONTENIDO DE UNIDADES HD ##############
direccion = Split(File.Load(unidades), gb.NewLine) ' ############ LISTO LAS UNIDADES SOLAS SIN DEV ##############
path = Split(File.Load(unidades), gb.NewLine) ' ############ LISTO LAS UNIDADES PARA AÑADIR DEV ############
direccion.Resize(direccion.Length - 1)
path.Resize(path.Length - 1)
KILL unidades
FOR Contadordev = 0 TO path.Max ' ##############################################################################
path[Contadordev] = "/dev" &/ path[Contadordev] ' ############## AÑADO EL /DEV/ A PATH PARA USARLO DE REFERENCIA ###############
NEXT ' ##############################################################################
removable = Temp
f = OPEN removable FOR CREATE
FOR Contadorrem = 0 TO direccion.Max
SHELL "cat /sys/block/" & direccion[Contadorrem] & "/device/vendor" TO Vendedor ' ######## METO EL FABRICANTE EN UNA VARIABLE Vendedor ########
SHELL "cat /sys/block/" & direccion[Contadorrem] & "/device/model" TO Modelo ' ######## AÑADO MODELO A una variable Modelo #################
SHELL "cat /sys/block/" & direccion[Contadorrem] & "/removable" TO Reno ' ######## AÑADO REMOVABLE A UNA VARIABLE Reno ################
SHELL "cat /sys/block/" & direccion[Contadorrem] & "/size" TO Tamano ' ######## AÑADO TAMAÑO A VARIABLE TAMANO #####################
PRINT #f, direccion[Contadorrem] & "\n" & Vendedor; Modelo; Tamano; Reno ' ######## AÑADIR TODO A ARCHIVO ##############################
NEXT
CLOSE #f
f = OPEN removable FOR INPUT
DO WHILE NOT Eof(f)
INPUT #f, direccion; Vendedor; Modelo; Tamano; Reno
list1.add(direccion & Vendedor & Modelo & (Tamano / 2 / 1024) & "K" & IIf(Reno = "1", "Si", "No"))
LOOP
CLOSE #f
KILL removable
END
última edición por Pablo-GNU el Domingo, 31 Enero 2010, 10:37; editado 1 vez
|
#21 Domingo, 31 Enero 2010, 10:37 |
|
|
soplo
Analista Programador
Registrado: Septiembre 2009
Mensajes: 843
Edad: 44
|
Re: Dispositivos USB En Listbox
Hola
Shell admite dos formatos distintos e incompatibles entre sí.
Citar: [ Process = ] SHELL Command [ WAIT ] [ FOR { { READ | INPUT } | { WRITE | OUTPUT } } ] [ AS Name ]
SHELL Command TO Variable
De manera que si utilizara TO no podría usar WAIT.
Shell
A modo de información añado que en el primer formato devuelve un objeto process que tiene sus propios eventos y métodos.
Por último utilizar exec en vez de shell es mas rápido y ocupa menos memoria porque shell hace lo mismo pero invocando a bash para hacerlo. Es decir shell llama a bash o sh o ksh o el que sea y le pasa el string a ejecutar. Exec directamente ejecuta el comando.
Respecto al problema de las variables que dices veo que la variable que se pone tras el TO debe ser string.
|
#22 Domingo, 31 Enero 2010, 18:44 |
|
|
Pablo-GNU
Aprendiz
Registrado: Enero 2010
Mensajes: 57
Edad: 37
|
Re: Dispositivos USB En Listbox
Creo que el problema estaba mas bien en las variables que utilizabamos para el DO, que no podian ser las mismas que para el FOR. Ahora ya esta, ya lista los dispositivos de manera correcta, he tenido que corregir el problema de caracteres en blanco ya que afectaba a la hora de leer del F. Que ta parece? Solo nos queda el hacer el combobox al seleccionar el valor, por ejemplo, pendrive 4GB, nos devuelva a una variable su direccion correspondiente. He pensado en hacer que al volcar los datos al combobox y sobrevivir al filtro de si son desmontables o no, tambien guarde la direccion en una array, entonces al seleccionar el list[2], nos apunte al valor 2 del array, asi al estar alineados, se correspondan tambien... tu que crees? Saludos y gracias, ya va quedando menos!!!!
PUBLIC SUB Button1_Click()
DIM direccion AS String[]
DIM Contadordev AS Integer
DIM Contadorrem AS Integer
DIM path AS String[]
DIM removable AS String
DIM removableleer AS String[]
DIM unidades AS String
DIM Vendedor AS String
DIM Modelo AS String
DIM Reno AS String
DIM Tamano AS String
DIM dire AS String
DIM Vende AS String
DIM Mode AS String
DIM Re AS String
DIM Tama AS Float
DIM f AS File
ComboBox1.Clear
unidades = Temp
SHELL "ls /sys/block | grep sd >> " & unidades WAIT ' ############ SACO EL CONTENIDO DE UNIDADES SD ##############
SHELL "ls /sys/block | grep hd >> " & unidades WAIT ' ############ SACO EL CONTENIDO DE UNIDADES HD ##############
direccion = Split(File.Load(unidades), gb.NewLine) ' ############ LISTO LAS UNIDADES SOLAS SIN DEV ##############
path = Split(File.Load(unidades), gb.NewLine) ' ############ LISTO LAS UNIDADES PARA AÑADIR DEV ############
direccion.Resize(direccion.Length - 1)
path.Resize(path.Length - 1)
KILL unidades
FOR Contadordev = 0 TO path.Max ' ##############################################################################
path[Contadordev] = "/dev" &/ path[Contadordev] ' ############## AÑADO EL /DEV/ A PATH PARA USARLO DE REFERENCIA ###############
NEXT ' ##############################################################################
removable = Temp
f = OPEN removable FOR CREATE
FOR Contadorrem = 0 TO direccion.Max
SHELL "cat /sys/block/" & direccion[Contadorrem] & "/device/vendor" TO Vendedor ' ######## METO EL FABRICANTE EN UNA VARIABLE Vendedor ########
SHELL "cat /sys/block/" & direccion[Contadorrem] & "/device/model" TO Modelo ' ######## AÑADO MODELO A una variable Modelo #################
SHELL "cat /sys/block/" & direccion[Contadorrem] & "/removable" TO Reno ' ######## AÑADO REMOVABLE A UNA VARIABLE Reno ################
SHELL "cat /sys/block/" & direccion[Contadorrem] & "/size" TO Tamano ' ######## AÑADO TAMAÑO A VARIABLE TAMANO #####################
Vendedor = Trim(Vendedor)
Modelo = Replace(Trim$(Modelo), " ", "")
Reno = Trim(Reno)
Tamano = Trim(Tamano)
PRINT #f, direccion[Contadorrem];; Vendedor;; Modelo;; Tamano;; Reno ' ######## AÑADIR TODO A ARCHIVO ##############################
NEXT
CLOSE #f
f = OPEN removable FOR INPUT ' ####################### LOOP PARA INTRODUCIR VALOR A COMBOBOX ###########################
DO WHILE NOT Eof(f)
INPUT #f, dire; Vende; Mode; Tama; Re
IF Re = "1" THEN
ComboBox1.Add(Vende & " " & Mode & " Capacidad: " & (Round((Tama / 2048), 2)) & " Mb")
ENDIF
LOOP
CLOSE #f
KILL removable
END
EDITO:
Mira si queda menos, que de momento ya esta!! Os pego el codigo para ver si lo veis bien o le veis algun fallo, ya que ahora que funciona, si se optimiza o se queda asi, lo pegare en la seccion de Aplicaciones/Fragmento de codigo, para que si alguien lo necesita lo pueda utilizar. Muchas gracias a todos, os habeis portado muy bien conmigo... Nos seguimos hablando y viendo por aqui... para lo que necesiteis, aqui estoy... gracias..
última edición por Pablo-GNU el Domingo, 31 Enero 2010, 20:25; editado 1 vez
|
#23 Domingo, 31 Enero 2010, 19:15 |
|
|
fabianfv
Analista Programador
Registrado: Octobre 2009
Mensajes: 495
Edad: 50 Ubicación:
|
Re: Dispositivos USB En Listbox
Citar:
EDITO:
Mira si queda menos, que de momento ya esta!! Os pego el codigo para ver si lo veis bien o le veis algun fallo, ya que ahora que funciona, si se optimiza o se queda asì
Sí que se puede optimizar, pero lo primero es determinar el objetivo de esa optimización.
Para optimizar el código para facilitar su mantenimiento te sugiero empezar con estas tareas:
- Usa sangrías (indentación) para mostrar el nivel de anidamiento.
- Quita los símbolos # de los comentarios porque dificultan la lectura del código.
- Deja únicamente los comentarios que sean pertinentes (lo que no sea evidente al leer el código).
- Usa nombres completos para los nombres de las variables con el estilo YoSoyUnaVariable.
- Parece haber variables duplicadas en el código, revísalas y elimina las que efectivamente estén duplicadas.
- Revisa que los nombres de variables sean apropiados para lograr que el código sea autoexplicativo.
Bien, esto para empezar. Si quieres luego seguimos con más.
Saludos cordiales.
|
#24 Lunes, 01 Febrero 2010, 21:32 |
|
|
soplo
Analista Programador
Registrado: Septiembre 2009
Mensajes: 843
Edad: 44
|
Re: Dispositivos USB En Listbox (SOLUCIONADO)
Yo creo que podrías hacer una clase con ese software de tal forma que tuvieras con un único método ObtenerUsb y que tuviera un parámetro true o false.
Si es true te devuelve los usb montados. Si es false te devuelve todos los usb del sistema.
De esa forma en tus aplicaciones con solo incluir esa clase podrías llamar a ese método y obtener un array con todos los usb que quieres bien para meterlos en un combo o para hacer con ellos lo que quieras.
Si decides hacerlo asegúrate de que borras los temporales que creaste para dejar el sistema limpio.
Es una sugerencia nada mas.
|
#25 Miercoles, 03 Febrero 2010, 21:09 |
|
|
|
Temas parecidos
Temas parecidos
|
Página 3 de 3
|
Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado Usuarios registrados conectados: Ninguno
|
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
|
|
|
|
|