Mostrando las entradas con la etiqueta InStr. Mostrar todas las entradas
Mostrando las entradas con la etiqueta InStr. Mostrar todas las entradas

miércoles, 28 de diciembre de 2016

Clase txtasc



Buenas,
Resulta que en el programa taller 2015 tengo una pequeña herramienta que me ayuda a verificar los cheksum de las .iso de sistemas operativos que cada tanto hay que bajar.

Se puede usar de forma manual, es decir pegar el cheksum en un cuadro de texto, despues simplemente le damos al programa la ubicacion de la .iso y el programa hace la comprobación cuando termina veremos si esta todo bien o hubo error.

Pues bien tambien le di a esta herramienta la posiblilidad de extraer los cheksum de los archivos... ejemplo de archivo:


En ese archivo no parece complicado extraer la informacion y mostrarla en un tableview.....


pero... en el archivo siguiente el asunto se complica por su formato y por que varia el hash, indicado en una etiqueta 'hash:'

Ejemplo:


Bueno esta clase lo que hace es extraer los nombres de las distribuciones
indicado con la flecha azul de la derecha, y sus correspondientes hashes.

bueno les dejo el codigo para que experimenten.
la clase esta fresquita aun, seguramente tiene muchisimas mejoras, pero ya hace su tarea para lo cual fue creada.

Saludos.





' gambas class file

'Clase txtasc by postapase 28/12/2016

Public Const SHA1 As String = "SHA1"
Public Const SHA256 As String = "SHA256"
Public Const SHA512 As String = "SHA512"


Private Const COMIENZO As String = "-----BEGIN PGP SIGNED MESSAGE-----"
Private Const HASH As String = "Hash:"
Private Const FINAL As String = "-----BEGIN PGP SIGNATURE-----"

Property TipoHash As String
Property HashDistro As Collection

Private $TipoHash As String
Private $HashDistro As New Collection


Public Sub _new(RutaArchivo As String) ''Ingresar ruta de archivo *.txt.asc
Dim archivo As File
Dim parrafo As String
Dim tipo As String
Dim CorteTipoHash As New String[]
Dim CorteHash As New String[]
Dim Contenido As String


If Not Exist(RutaArchivo) Then
Debug Error.Text
Return
Endif

archivo = Open RutaArchivo For Read

While Not Eof(archivo)

Line Input #archivo, parrafo

If InStr(parrafo, FINAL) <> 0 Then Break

If InStr(parrafo, HASH) <> 0 Then

CorteTipoHash = Split(parrafo, " ", Null, True)

QueTipoDeHashEs(Trim(CorteTipoHash[1]))

Endif

If InStr(parrafo, COMIENZO) = 0 And If InStr(parrafo, HASH) = 0 And If Not IsNull(parrafo) Then

CorteHash = Split(parrafo, " ", Null, True)

$HashDistro.Add(Trim(CorteHash[0]), Trim(CorteHash[1]))

Endif

Wend

Close #archivo

HashDistro_Write($HashDistro)

End

Private Function TipoHash_Read() As String
Return $TipoHash
End

Private Sub TipoHash_Write(Value As String)
$TipoHash = Value
End

Private Function HashDistro_Read() As Collection
Return $HashDistro
End

Private Sub HashDistro_Write(Value As Collection)
$HashDistro = Value
End

Private Sub QueTipoDeHashEs(texto As String)

Select Case texto
Case SHA1
$TipoHash = SHA1
Case SHA256
$TipoHash = SHA256
Case SHA512
$TipoHash = SHA512
Case Else
$TipoHash = ""
End Select

TipoHash_Write($TipoHash)

End





lunes, 21 de septiembre de 2015

Mostrar lista de coincidencias de nombres


Esto trata de presentar una lista de nombres que coincidan con lo que vamos tipeando en el txt, la lista la presentamos en un combox que esta oculto solo se ve cuando encuentra al menos una coincidencia.

Tuve que hacer así, pues lo tenia hecho solo en un combobox pero después de una actualización de gambas ningún combobox funcionaba bien, además de mis limitaciones como programador novato que soy, pero esta solución esta prolija y funciona bien, se las dejo para que experimenten.

Cuando disponga de tiempo comentare el código, saludos.



' gambas class file

' by Postapase

Public EstosNombres As New String[]

Public Sub Form_Open()

Me.Center

EstosNombres.Add("JOSE")
EstosNombres.Add("JUAN")
EstosNombres.Add("JOSELO")
EstosNombres.Add("MARIA")
EstosNombres.Add("MARCELO")
EstosNombres.Add("MARCOS")

End

Public Sub txtNombre_KeyRelease()
Dim nombre As String

If Len(txtNombre.Text) = 0 Then
cbxNombre.Visible = False
Return
Endif

cbxNombre.Clear

For Each nombre In EstosNombres
If InStr(Left(UCase(nombre), Len(txtNombre.Text)), UCase(txtNombre.Text)) = 1 Then
cbxNombre.Add(nombre)
cbxNombre.Visible = True
Endif
Next

End

Public Sub cbxNombre_Click()

txtNombre.Text = cbxNombre.Text
cbxNombre.Visible = False

End


ListaComboBox-0.0.1.tar.gz

sábado, 22 de noviembre de 2014

Guardar/Cargar configuraciones en un txt




El Tanteador de tenis de mesa tiene una ventana donde se puede configurar los distintos colores del la interfaz clásica, y también se puede guardar y cargar configuraciones, pero... no esta bien programado ni es cómodo para el usuario.
Por ese motivo me puse a buscar un método mas conveniente para crear archivos de configuraciones de colores que se les puede poner el nombre de la persona que eligió esos colores con lo cual es fácil de identificar cuales son los colores que cada persona eligió, con una extencion a nuestro gusto en este caso yo le asigne la extencion .ConfigColor pero puede ser cualquiera a su elección

 Así se ve el archivo de configuración de colores con dos valores: Letra y Fondo,
pero puede tener cientos de valores según la necesidad de nuestro programa.





' gambas class file

' by postapase
Public JuegoColores As String
Public Fondo As String
Public Letra As String

Public Sub Form_Open()
Me.Center
Me.Caption = "Configuracion de colores"
End

Public Sub btnGuardar_Click()
Dim sPath As String

If Dialog.SaveFile() Then Return
sPath = Dialog.Path
File.Save(sPath & ".ConfigColor", JuegoColores)

End

Public Sub ColorButton1_Change()
Actualizar
End

Public Sub ColorButton2_Change()
Actualizar
End

Public Sub Actualizar()
Letra = "Letra=" & ColorButton1.Value
Fondo = "Fondo=" & ColorButton2.Value
LabPostapase.Foreground = ColorButton1.Value
LabPostapase.Background = ColorButton2.Value
JuegoColores = Letra & gb.NewLine
JuegoColores &= Fondo
End

Public Sub btnCargar_Click()
Dim sPath As String
Dim dato As String
Dim ArchivoX As File
Dim LineaX As String
Dim DatoX As String[]

Dialog.Filter = ["*.ConfigColor", ("Configuración de colores")]

If Dialog.OpenFile() Then Return
sPath = Dialog.Path

ArchivoX = Open sPath For Read

While Not Eof(ArchivoX)

Line Input #ArchivoX, LineaX

If InStr(LineaX, "Letra") <> 0 Then
DatoX = Split(LineaX, "=")
ColorButton1.Value = Val(Trim(DatoX[1]))
Continue
Endif

If InStr(LineaX, "Fondo") <> 0 Then
DatoX = Split(LineaX, "=")
ColorButton2.Value = Val(Trim(DatoX[1]))
Continue
Endif

Wend

Close ArchivoX
Actualizar()

End

Public Sub btnPredeterminados_Click()
ColorButton1.Value = &H000000
ColorButton2.Value = &HFFFFFF
Actualizar()
End



Código fuente:  ConfigColor-0.0.1.tar.gz

domingo, 19 de octubre de 2014

Solución a reto Solveet (MayorSinDigito)



Se tiene un número X y se indica un dígito Y. Devolver un número Z que sea menor a X y que no posea el dígito Y.
La función/método puede aceptar dos argumentos: el número X y el dígito Y. No es necesario agregar ninguna validación para Y.
Ejemplos:
mayorSinDigito(123, 2) => 119
mayorSinDigito(113, 2) => 111
mayorSinDigito(113, 1) => 99


' gambas class file

' by postapase

Public Sub Form_Open()
Dim Num As Integer

Repeat
cbxDigitos.Add(Num)
Inc Num
Until Num > 9
cbxDigitos.Index = 0

End

Public Sub btnBuscar_Click()
MayorSinDigito(txtMayor.Text, cbxDigitos.Text)
End

Public Sub MayorSinDigito(Mayor As String, Digito As Integer)
Dim a, Resta1 As Integer

Resta1 = Mayor - 1

For a = Resta1 To 1 Step -1
If InStr(CString(a), CString(Digito)) = 0 Then
LabResultado.Text = "Número mayor es:" & a & " , sin digito " & Digito
Break
Endif
Next

End

jueves, 21 de agosto de 2014

Listado de recientes



' gambas class file

'por postapase

Private ArbitroRepetido As Boolean
Public AgregandoJueces As New String[]
Public listajueces As ListBox
Public lista As String[]

Public Sub Form_Open()
    listajueces = New ListBox(Me) As "listajueces"
    Me.Center
    With listajueces
       .ScrollBar = 3
       .Enabled = True
       .Visible = False
       .Width = txtArbitro.Width
       .Height = 100
       .x = txtArbitro.X
       .y = txtArbitro.y + txtArbitro.Height
    End With

    CargarArbitros()
End

Public Sub txtArbitro_Change()
  If Len(txtArbitro.Text) <0> 0 Then
     For x = 0 To AgregandoJueces.Count - 1
        If InStr(Left(UCase(AgregandoJueces[x]), Len(txtArbitro.Text)), UCase(txtArbitro.Text)) <> 0 Then
          listajueces.Visible = True
         Endif
      Next
 Endif

 For x = 0 To AgregandoJueces.Count - 1
     If InStr(Left(UCase(AgregandoJueces[x]), Len(txtArbitro.Text)), UCase(txtArbitro.Text)) <> 0 Then
        listajueces.Add(AgregandoJueces[x])
      Endif
 Next

End

Public Sub btnAgregarArbitro_Click()
  SErepiteArbitro(Trim$(txtArbitro.Text))
  If ArbitroRepetido = False Then
    AgregandoJueces.Add(Trim$(txtArbitro.Text))
    GuardarArbitros()
  Endif
  txtArbitro.Clear
  txtArbitro.SetFocus
End

Public Sub SErepiteArbitro(nombre As String)
  Dim itemArray As String

  If AgregandoJueces.Count <> 0 Then
      For Each itemArray In AgregandoJueces
         If itemArray = nombre Then
            ArbitroRepetido = True
         Else
            ArbitroRepetido = False
         Endif
      Next
  Else
    ArbitroRepetido = False
  Endif

End

Public Sub GuardarArbitros()
 Dim arbitro, ConjuntoArbitros As String
 For Each arbitro In AgregandoJueces
     ConjuntoArbitros &= arbitro & ","
 Next
 ConjuntoArbitros = Left(ConjuntoArbitros, Len(ConjuntoArbitros) - 1)
 Settings["ArbitrosRecientes/Lista"] = ConjuntoArbitros
 Settings.Save
End

Public Sub CargarArbitros()
  Dim lista As String
  lista = Settings["ArbitrosRecientes/Lista", ""]
  AgregandoJueces = Split(lista, ",")
 End

Código fuente:ListaJueces-0.0.1.tar.gz
                       ListaArbitros 0.0.2