Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - Serapis

#1831
Programación General / Re: programa java
28 Febrero 2019, 15:18 PM
srWhiteSkull, nota que no pide cifrar nada, tan solo 'tapar' la clave con asteriscos, lo cual es trivial.
Citar...al introducir una palabra se devuelve esta con la misma longitud pero con asteriscos...
#1832
Programación General / Re: programa java
27 Febrero 2019, 18:37 PM
Hay varias formas de acometerlo...

- Una muy sencilla es conociendo la cantidad de caracteres que tiene la palabra, crear otra del mismo tamaño formado solo por asteriscos. La palabra original no se ve así alterada.
- Si el tamaño de las palabras está limitado a un máximo (pongamos 16-20 caracteres), por velocidad puede crearse un array cuyo contenido sean precisamente strings de 1,2,3,4...hasta 16 asteriscos, cuando se reciba la palabra, se devuelve el string contenido en la posición cuyo índice coincide con el tamaño de caracteres de la palabra recibida. La palabra original no se ve así alterada.
- Otro modo... inicias un bucle y remplazas cada carácter aparecido por un asterisco. La palabra original si queda alterada en este otro caso.

...y ahora es tu turno de escribir código...
#1833
Con una descripción tan vaga como esta:
Citar...problema a la hora de pasar informacion de un archivo de texto de list1, y que vaya leyendo cada dia en list2. en list1...
Es dífícil entender que rayos quieres. Los nombres de los controles, expresan con claridad su cometido: command1, List1, list2, perfecto... El código tampoco ayuda es enrevesado y faltan descripciones... como... dónde está declarado 'file', que tipo de objeto es... tal vez una imagen de la interfaz, como apoyo al código dejara más claro las cosas.

Intentaré jugar al maldito juego de adivinar que intenta uno decir, con el omnipresente riesgo de equivocarse al interpretar y simplemente estar perdiendo el tiempo.

Se supone que tienes un fichero de texto que guarda no se qué cosas (parecen registros de fechas)... que al iniciarse el programa se cargan en un listado (list1), y hasta aquí puedo entender... ahora me toca copiar el código y pegarlo en el editor de vb6, a ver si con el coloreado y resaltado de la sintaxis, se ve más claro y que controles utiliza y deducir el resto de objetos que no aparecen declarados en parte alguna en el código...

(por cierto siempre que peques código de un lenguaje específico en un foro de programación usa las etiquetas BBcode de código Geshi (es un combobox arriba a la derecha en la ventana de edición), para resaltar la sintaxis imperfecta pero más asequible que texto plano y sin indentar procedente de un copy-paste. Creas la eqiqueta y pegas el código, o si ya pegaste el código, lo seleccionas y luego eliges la etiqueta, (el volverá a todo lo seleccionado).

Mal vamos... file parece ser una estructura, pero nada se sabe acerca de sus campos donde se crea la instancia, ni qué datos se le asigna...
En fin, todo lo que puedo hacer sin tener claro el objetivo es refactorizar lo que se supone que hace el código:

Primero lo que puede deducirse del código, sobre lo que es 'file'
Código (vb) [Seleccionar]

Private Type FileData
   Id              As Integer          ' o quizás un string
   Date            As Date
   Name            As String * 20      '  longitud desconocida suponemos 20 como ejemplo.
   '... otros campos que pudiere haber.
End Type

Private file        As FileData
Private Ruta        As String
Private f_Canal     As Integer      ' canal del fichero.



Añade un módulo, se coloca la siguiente función Main, y en el menú Proyecto --> "propiedades de proyecto" ---> Objeto inicial: SE DEBE SEÑALAR que el proyecto comienza en "sub Main", no en "form1"
Código (vb) [Seleccionar]
public Cerrar as boolean

private sub Main
  dim f as form
 
   do
       set f= new Form1
       f.show 1  ' se abre un modo diálogo... (el código no continúa en la siguiente línea mientras no acabe (se cierre), el proceso iniciado.
   loop while Cerrar = false
end sub


Ahora el botón reset (llamado como la función que realiza)
Código (vb) [Seleccionar]

Private Sub ComReset_click    'Command1_Click()
   Unload Me
End Sub


Y un botón para cerrar definitivamente la aplicación (también con un nombre descriptivo):
Código (vb) [Seleccionar]

Private Sub ComTerminar_click  
   Cerrar = true
   Unload Me
End Sub


Lo que seguía en la carga de la aplicación era tremendo, al margen de lo farragoso del código. Y la eliminación de duplicados exige un tiempo O n²...
Esto queda mucho mejor así:
Código (vb) [Seleccionar]

Private Sub Form_Load()
   ' no cambia durante la ejecución del programa, luego procede asignarla una sola vez.
   ' el fichero también se abrirá una sola vez y se cerrará cuando lo haga la ventana (una sola vez durante la vida de la ventana).
   Ruta = App.Path & "\database.txt"  
   Call CargarYFiltrarRegistros(Ruta)
End Sub

' Carga el campo fecha de los registros en el listado de fechas (sin repticiones).
Private Sub CargarYFiltrarRegistros(ByRef Ruta As String)
   Dim k As Long, d As String
 
   ' Abrir fichero y cargar datos
   f_Canal = FreeFile
   Open Ruta For Binary As #f_Canal
   Do
       Get #f_Canal, , file                 ' file es una estructura de tamaño fijo, no es preciso complicalro más...
       lisFechas.AddItem cstr(file.Date)
   Loop While Not EOF(f_Canal)
   'Close #f_Canal   ' no lo cerramos si luego se va a brir contínuamente desde list1_click
 
   '   OJO: La lista debe estar ordenada en tiempo de diseño, pués la propiedad 'SORTED'
   '    es de solo lectura en tiempo de ejecución...
   '    ES DECIR: en tiempo de diseño hay que poner: Sorted = True, para dicho listado.
   ' filtrar repes (empezamos desde el último hacia abajo)
   k = lisFechas.ListCount - 1
   Do While (k > 0)
       d = lisFechas.List(k)
       k = (k - 1)
        ' mientras sean iguales indistintamente de su capitalización.
       Do While (StrComp(d, lisFechas.List(k), vbTextCompare) = 0)
           lisFechas.RemoveItem (k)
           If (k = 0) Then Exit Do
           k = (k - 1)
       Loop
   Loop
End Sub


Ahora la gran duda de todo, que es lo que no has explicado ni siquiera meridianamente bien: qué C0Ñ0 se supone que debe hacer cuando se pulsa un ítem en list1?????  (al list1, yo lo llamo lisFechas)
Yo he pretendido entender que el dato que aloja sirve para buscar otros con el mismo dato (para el mismo campo, a la sazón 'fecha') y carga todos los ítems así coincidentes en el listado2, procedentes del fichero...

Y eso es lo que hace el siguiente código, si debe hacerse otra cosa, lo siento pero jugando a divinar, es lo que pasa... perder el tiempo, porque no sirve lo que uno hizo...
Código (vb) [Seleccionar]

Private Sub List1_Click()
   Call BuscarItems(lisFechas.List(lisFechas.ListIndex))
End Sub

' Qué buscamos?: El dato (fecha), que se ha pulsado en list1...
'  y lo buscamos en todos los registros del fichero.
Private Sub BuscarItems(ByVal strFecha As String)
   Dim item As String
   
   List2.Clear
   ' a falta de código no expuesto, 'FILE' tendrá el contenido del último regsitro leído...
   '  Seguro que es eso lo que se pretende???.
'    With file
'        Text1.Text = CStr(.Id)
'        Text2.Text = CStr(.Date)
'        Text3.Text = CStr(.Name)
'    End With
   
   Seek (f_Canal), 1     ' posicionar el puntero de lectura al comienzo del fichero (en vb6 es la dirección 1).
   Do While Not EOF(f_Canal)
       Get f_Canal, , file
       With file
           If (StrComp(strFecha, CStr(.Date), vbTextCompare) = 0) Then
               item = FormatStr(CStr(.Id), 6, True)
               item = FormatStr(item, 12) & _
                      FormatStr(CStr(.Date), 16) & _
                      FormatStr(.Name, 24)
               Call List2.AddItem(item)  ' list2, probablemente no precise estar ordenado...
           End If
       End With
   Loop
End Sub


Finalmente faltan algunas funciones que mejoren la presentación y simplifique la llamada:
Estas 3 funciones se pueden simplificar en la primera... yo te lo dejo fácil de entender, luego readaptarlo por eficiencia es cosa tuya.
Código (vb) [Seleccionar]

' Asegura que el texto tenga por tamaño exactamente el valor de límite
Private Function FormatStr(ByRef Txt As String, ByVal Limite As Integer, Optional ByVal EsNumero As Boolean = False)
   If EsNumero Then
       FormatStr = FormatNumber(Txt, Limite)
   Else
       FormatStr = FormatString(Txt, Limite)
   End If
End Function

' Asegura que el texto tenga por tamaño exactamente el valor de límite
' Si es más corto añade espacios a la derecha.
Private Function FormatString(ByRef Txt As String, ByVal Limite As Integer) As String
   Dim k As Integer
   
   k = Len(Txt)
   k = (Limite - k)
   If (k > 0) Then
       FormatString = Txt & Space$(k)
   ElseIf (k < 0) Then
       FormatString = Left$(Txt, Maximo)
   Else
       FormatString = Txt
   End If
End Function

' Asegura que el texto tenga por tamaño exactamente el valor de límite
' OJO: Si es más corto añade 'ceros' a la izquierda.
Private Function FormatNumber(ByRef Txt As String, ByVal Limite As Integer) As String
   Dim k As Integer
   
   k = Len(Txt)
   k = (Limite - k)
   If (k > 0) Then
       FormatNumber = String$(k, "0") & Txt
   ElseIf (k < 0) Then
       FormatNumber = Left$(Txt, Limite)
   Else
       FormatNumber = Txt
   End If
End Function


Por supuesto, no he probado nada, ya que no quiero perder más tiempo en ello, estoy casi seguro que está todo bien o si hay algún gazapo que se me haya escapado, considero que debes ser capaz de resolverlo, ya que será allgo nimio.

Si no terminas de entenderlo y tampoco terminas de explicarte bien, quizás mejor si comprimes el proyecto y lo compartes para verlo y corregirlo in situ con el fichero de ejemplo que adjuntes.

p.d.: Se me olvidaba esta sección:
Código (vb) [Seleccionar]
Private Sub Form_Unload(Cancel As Integer)
   Close ' cierra todos los ficheros abertos.
End Sub
#1834
Es un garrafal fallo de diseño: El mismo cable y conector de energía se utilice para datos.

Es lo que se conoce como: "diseñado con fallos como requisito del diseño".
#1835
Estas cosas se resumen siempre entre la diferencia de: ¿Se puede o se permite?.

- Al hablar de "se puede", básicamente sentimos que si técnicamente es posible, lo podrán hacer (dentro o fuera de la ley), sin que nadie pueda tener ningún control de ello.
- Al hablar de "se permite", básicamente sentimos que técnicamente no es posible sin determinados recursos perfectamente controlados y supervisados (si luego sucede sin tales permisos entendemos que es a causa de corrupción en el sistema).
#1836
Esto es lo que siempre hemos estado diciendo... "ponedlo barato, a precio asequible y nadie tendrá motivos para piratear".

Es más resultará más cómodo y de mejor calidad pagar un precio asequible que piratear, y además donde antes eran solo 40, ahora serán 40.000 lo que implica que la cantidad suple el precio bajo.
#1837
bufffffff.... es lo mismo que decir que andando en el tiempo, cualquier mindundi se monta una web que exija registro y por narices podrá disponer de tu 'face' o tu 'finger'... al decir mindundi, lo digo más como cualquier desconocido al que en teoría le importa un carajo siquiera que existas.

Si insisten en 'registrarse/loguearse' con un dedo, que problemo existe en que uno se cree un 'dedo' artificial, esto es una huella inventada y que como si de un anillo se tratase, uno lo lleva siempre encima, con la enorme ventaja de que no corresponde a nada físico de ti, pero que igualmente gozaría de 'tonterías infinitas aleatorias' (esto es, está más que demostrado que contraseñas únicas no suponen ningún factor de fortaleza, la debilidad viene por otros lados). El sistema que propongo igualmente equivale a una huella dactilar única incluso con más resolución (si así se desea), que la del propio dedo, pero con la ventaja de que no puede ser asociada realmente a ninguna persona.

No faltará quien alegue que si lo pierdes (es lo mismo que si en tu dedo por accidente te lo amputas), te lo roban (es lo mismo que si te lo cortan), te lo olvidas (es lo mismo que si tienes el dedo con una herida x días)........

En fin, que parece que definitivamente las empresas quieren tener acceso absoluto e ilimitado a cada célula de tu ser, y para lograrlo, primero han de convencer empezando por algún punto, ...y al efecto, la seguridad es una excusa falsa, pero creíble para los cenutrios ignorantes.  

...a la Humanidad le quedan guerras por librar, que no tienen nada que ver con las fronteras ni con políticas, sino con la propia esencia del ser, de la libertad.
#1838
Cita de: simorg en 26 Febrero 2019, 14:00 PM
En definitiva, no hay soporte fisico alguno que te asegure la perdurabilidad de tus datos...... :-\
Yo también te cito, para demostrarte que no es cierto... :silbar: :silbar:
el soporte físico casi perfecto, ya lo conocemos desde hace años, lucros, siglos, milenios...  :rolleyes: :rolleyes:
Aquí un ejemplo: las piedras kudurru (algo así como las actuales actas notariales), esta data del 1120 antes de Cristo, luego tiene la friolera de 3140 años. :o :o :o



Hale todos a pasar vuestras pelis en HD, música, fotos, programas, a estos pedruscos...  :laugh: :laugh: :laugh: :laugh:
#1839
Es razonable, si bien la mayoría de lectores simplemente se limitan a leer documentos y a suponer (esto es, ceder en terceros esa tarea), que las firmas son válidas.
#1840
Bien... eso es lo deseable, que la gente que entiende a la perfección hasta el más mínimo detalle que al resto se nos pueden escapar, sean los que planten cara. ...que no les faltará quien les apoye.

No parece nada justo que quien crea las leyes, creen una para beneficio exclusivo de ellos, de entrada porque rompe el principio de igualdad ("todos somos iguales ante la ley"), no caben excepciones.