Imagen

Código: Seleccionar todo

PUBLIC SUB ButtonComprobar_Click()
DIM hproc AS Process
DIM buf AS String
DIM sCads AS NEW String[]
DIM a AS Integer
DIM NombreArchivoSalida AS String
DIM mensaje AS String
ListBox1.Clear
NombreArchivoSalida = User.home & "/print.txt"
IF Exist(NombreArchivoSalida) THEN
KILL NombreArchivoSalida
END IF
'PRINT "ping -c3 -i 2 "; TextBoxIP.Text & " >"; NombreArchivoSalida
hproc = SHELL ("ping -c3 -i 2 " & TextBoxIP.Text & " >" & NombreArchivoSalida)
DO WHILE hproc.State = Process.Running
WAIT 0.1
TextLabel1.text = "espere..."
LOOP
TextLabel1.text = "Salida generada"
sCads = Split(File.Load(NombreArchivoSalida), "\n")
FOR a = 0 TO scads.Count - 1
ListBox1.Add(Str(sCads[a]))
IF InStr(scads[a], "0% packet loss") <> 0 THEN
mensaje = "No hay paquetes perdidos"
ENDIF
' PRINT scads[a]
NEXT
IF mensaje = "No hay paquetes perdidos" THEN
Message.Info("No hay paquetes perdidos")
ELSE
Message.Info("Ha habido algun problema")
ENDIF
END
Explicación Del Código:
La idea es hacer un ping a una direccion dada en un textbox y la salida que genera en pantalla pasarla a un archivo de texto, eso lo hacemos con la siguiente orden, anteriormente hemos definido un proceso:

Código: Seleccionar todo

DIM hproc AS Process
.....
.....
hproc = SHELL ("ping -c3 -i 2 " & TextBoxIP.Text & " >" & NombreArchivoSalida)
Para controlar si ha terminado de ejecutar esta orden, mediante este bucle vemos el estado de proceso:

Código: Seleccionar todo

DO WHILE hproc.State = Process.Running
WAIT 0.1
TextLabel1.text = "espere..."
LOOP
Ahora leemos el archivo de salida y lo asignamos a un arrays de cadenas (sCads), “troceando” el archivo de salida mediante la orden Split y el caracter “\n”:

Código: Seleccionar todo

sCads = Split(File.Load(NombreArchivoSalida), "\n")
Escribimos en un listbox su contenido, comprobando que si en alguna parte de la linea (orden InStr) viene el texto “0% packet loss”, asignamos a la variable mensaje “No hay paquetes perdidos”:

Código: Seleccionar todo

FOR a = 0 TO scads.Count - 1
ListBox1.Add(Str(sCads[a]))
IF InStr(scads[a], "0% packet loss") <> 0 THEN
mensaje = "No hay paquetes perdidos"
ENDIF
' PRINT scads[a]
NEXT
Mensaje final: si la variable mensaje vale “No hay paquetes perdidos”, nos muestra un mensaje de informacion “No hay paquetes perdidos”, en caso contrario muestra que otro mensaje diciendo que “Ha habido algun problema” (puede haber varios problemas: no estar conectado a la red, no se ha devuelto los paquetes enviados de información:

Código: Seleccionar todo

IF mensaje = "No hay paquetes perdidos" THEN
Message.Info("No hay paquetes perdidos")
ELSE
Message.Info("Ha habido algun problema")
ENDIF
Para evitar errores, al principio del programa, hemos incluido una linea que hace que borre (si existe) un archivo anterior de salida:

Código: Seleccionar todo

NombreArchivoSalida = User.home & "/print.txt"
IF Exist(NombreArchivoSalida) THEN
KILL NombreArchivoSalida
END IF
Este es el resultado de la prueba de un ping de una dirección Ip:
Imagen
Welcome to your nightmare, bitch.
Responder

Volver a “Otros lenguajes”