elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


  Mostrar Mensajes
Páginas: 1 ... 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 [144] 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 ... 432
1431  Foros Generales / Foro Libre / Re: ¿Por que los Españoles se enojan tanto cuando los confunden con Arabes?? en: 21 Junio 2020, 23:02 pm
A mi me han confundido bastante con árabe y yo no soy español ni nada de eso... mi apellido Figueroa proviene de California en USA, y eso lo se porque en la serie de "El Zorro" salía un cabo de este apellido, y como todos sabemos, aquello sucedía en California...
USA compró California a España, "Por un puñado de dólares." :silbar: :silbar: :silbar:
1432  Foros Generales / Foro Libre / Re: ¿Por que los Españoles se enojan tanto cuando los confunden con Arabes?? en: 21 Junio 2020, 22:59 pm
Creo que hay dos cosas distintas entremezcladas...

- Una cosa es que te confundan con otra procedencia... lo cual no tiene ninguna importancia. Quién puede acertar a ojo sin confusión, si un tipo es chino, coreano, japonés, o noruego, finlandés, sueco... o gambiano, etíope, nigeriano... o... es razonable confundirse a menudo.
- Y otra cosa distinta es el desprecio con que te traten (producto o no, de dicha confusión).

Supongo que es esto último  y no la 'mera confusión', lo que molesta a cualquiera.
Por lo demás como dice #!drvy, generalizar en cosas como 'por qué los españoles se enojan...' es absurdo...
1433  Programación / Programación General / Re: Manejo de Strings en: 21 Junio 2020, 22:26 pm
No es tan complicado...

En primer lugar puesto que se quiere devolver en un array hay que precalcular el tamaño que él mismo tendrá.

Dado que cada carácter tiene 2 variaciones (mayúscula minúscula), que no hay permutaciones de lugar y el tamaño del string...
cantidad = 2^size(delString)
Siendo la cadena: 'string' size=6; 2^6=64. Luego el array tendrá 64 ítems.

La segunda parte, se resuelve en un bucle recursivo... usando grafos. Básicamente es un árbol binario. Nota que no es preciso usar ni construir ninguna estructura especial, más allá del array. Aunque tirando por un árbol binario, te sería más sencillo.

La palabra tendrá un nodo raíz (pongamos '*'), que accede a la primera letra, es decir 's' y 'S' son sus dos nodos hijo.
A su vez cada una de ellas tiene como nodos hijos a la siguiente letra en las dos versiones (mayúscula y minúscula).
Te pongo la jerarquía, de nodos, el de la izquierda es un nodo ya añadido al árbol, los de la derecha son los hijos que se le añaden como hijos:
Código:
*= s|S    <--- hijo izquierdo y derecho del nodo raíz.
s= t|T    <--- hijo izquierdo y derecho del nodo izquierdo de raíz
S= t|T    <--- hijo izquierdo y derecho del nodo derecho de raíz
t= r|R     // etc...
T= r|R
r= i|I
R= i|I
i= n|N
I= n|N
n= g|G
N= g|G
g=
G=

Nota que los dos últimos nodos no tienen hijos...

Ahora si se recorre todas las posibilidades del árbol obtendrás las 64 combinaciones distintas (desprecia el nodo raíz para formar la combinación a la hora de pasarlo al array de destino).
El problema de usar una estructura de árbol, es que empleará más espacio del strictamente necesario, ya que por ejemplo, al llegar al último nodo, n y N, cada uno de ellos tendrán por nodos finales 'g' y 'G', es decir se habrá añadido 32 nodos 'g' y 32 nodos 'G'.
Estrictamente basta un array de una estructura simple con cada uno de esos nodos:
Código:
Estructura Nodo
    char Nombre
    byte NumHijos
    arrayde Nodo Hijos()   // 2
    boleano Terminal
    entero Indice
Fin estructura

Array de nodo Nodos()

Luego se puede pasar como una cadena de texto, o un array de texto, el contenido de más arriba '*= s|S, s= t|T, S= t|T ..." , el caso es una función recibe y parsea dicho contenido al array Nodos() que se compone de la estructura nodo.
Rellenando dicho array quedaría así:
Código:
nodos(0).Nombre = "*"
nodos(0).NumHijos = 2
nodos(0).Hijos(0) =  nodos(1) // 's'
nodos(0).Hijos(1) =  nodos(2) // 'S'
nodos(0).Indice = 0
nodos(0).Terminal = FALSE

nodos(1).Nombre = "s"
nodos(1).NumHijos = 2
nodos(1).Hijos(0) =  nodos(3)  // 't'
nodos(1).Hijos(1) =  nodos(4)  // 'T'
nodos(1).Indice = 1
nodos(1).Terminal = FALSE

nodos(2).Nombre = "S"
nodos(2).NumHijos = 2
nodos(2).Hijos(0) =  nodos(3)  // 't'
nodos(2).Hijos(1) =  nodos(4)  // 'T'
nodos(2).Indice = 2
nodos(2).Terminal = FALSE
...
...
...

nodos(10).Nombre = "N"
nodos(10).NumHijos = 2
nodos(10).Hijos(0) =  nodos(11)  // 'g'
nodos(10).Hijos(1) =  nodos(12)  // 'G'
nodos(10).Indice = 10
nodos(10).Terminal = FALSE

nodos(11).Nombre = "g"
nodos(11).NumHijos = 0
nodos(11).Hijos // no dimensionado.
nodos(11).Indice = 11
nodos(11).Terminal = TRUE

nodos(12).Nombre = "G"
nodos(12).NumHijos = 0
nodos(12).Hijos // no dimensionado.
nodos(12).Indice = 12
nodos(12).Terminal = TRUE

Ahora con dciho array una función recorre recursivamente, tomando en cada ciclo el 'nombre' del nodo visitado, que se usa para ir concatenando la variación adecuada. La recursión finaliza cuando el nodo es terminal...
Como cada nodo tiene 2 hijos (podrían tener 1 o más), se precisa tambén un bucle interno para dicho recorrido de hijos.

La función de recorrido se invoca desde la que parsea la entrada,  sería más o menos así:

Código:
Funcion Recorrer(nodo n, entero i, entero xWord, string parcial, array string Salida() )
    entero j, k

    bucle para k desde 0 hasta n.NumHijos-1
        j = n.Hijos(k).Indice
        
        parcial.Add( nodos(j).Nombre, i)         //añade el char de 'nodos(j).Nombre' en la posición 'i' del string 'parcial'
        i +=1
        
        Si (nodos(j).Terminal = TRUE)
            Salida(xWord) = parcial
            xWord +=1
        Sino
            Recorrer(nodos(j), i, xWord, parcial, Salida)
        fin si

        i -=1
        // estrictament esto no es necesario, ya que 'i' permitirá sobrescribir sin borrar el previo.
        parcial.Remove( i)     // elimina de parcial el char en la posición 'i'
    Siguiente
Fin funcion
Esta función (así de simple), recorre todas las combinaciones posibles.

La función que parsea el texto de entrada, lo dejo a tu esfuezo, pués se trata de 'desguazar' dicha cadena en sus nodos, y cada nodos en sus elementos, para generar el array de nodos. Se requieren dos bucles, en el primero se crea el array con los 13 nodos (0 a 12, el 0 es el raíz), aplicando nombre, indice (el mismo del contador del bucle), número de hijos y si es o no terminal. Es terminal si no tiene hijos (caso de 'g' y 'G'). En el segundo bucle, se rellenan los datos que no se conocían , esto es, los hijos, requiere una búsqueda. Por ejemplo: Sabiendo que 't' tiene como hijos a 'r' y a 'R', precisa buscar que posicón ocupan esos nodos 'r' y 'R', para terminar de rellenar los datos (es decir busca rel índice de ?????:
Código:
nodos(3).Hijos(0) =  nodos(?????)  // 'r'
nodos(3).Hijos(1) =  nodos(?????)  // 'R'

La funcion principal, invoca a dos, una para generar los nodos y luego para realizar el recorrido.
Código:
Array de String() = funcion CombinatoriaMayusMinus(string Palabra)
    entero sizeArray = (2 ^ palabra.size)
    array de String Salida(0 a sizeArray -1)
    string s = Palabra
    entero indexChar =0, indexWord =0


    Llamada a ParseEntrada(Palabra)
    Llamada a Recorrer(nodos(0), indexChar, indexWord , s, Salida)
    Devolver  Salida
fin funcion


La función que construye el array de la estructura 'nodo'...
Nota que aquí tomamos la palabra entrada, sin generar las producciones comentadas al principio (dada la simplicidad de dichas producciones, es todo muy deducible).
Código:
Funcion ParseEntrada(string Palabra)
    entero k, j, i, n

    dimensionar nodos(0 a palabra.size * 2)    // esta declarado a nivel raiz (ver más arriba)
    
    nodo(0).Nombre = "*"    // <--- nodo raíz
    nodo(0).Indice = 0
    nodo(0).NumHijos = 2
    nodo(0).Terminal = False

    j = 0
    bucle para k desde 0 hasta palabra.Size -2  // la última letra es terminal y no tiene 'siguiente letra'
        j +=1
        nodo(j).Nombre = palabra.charAt(k).ToLower   //// <---- la minuscula
        nodo(j).Indice = j
        nodo(j).NumHijos = 2   ' porque es mayus y minus
        nodo(j).Terminal = False
        
        j +=1
        nodo(j).Nombre = palabra.charAt(k).ToUpper    // <---- la mayuscula
        nodo(j).Indice = j
        nodo(j).NumHijos = 2   ' porque es mayus y minus
        nodo(j).Terminal = False
    Siguiente

    j +=1
    nodo(j).Nombre = palabra.charAt(k).ToLower   //// <---- la minuscula
    nodo(j).Indice = j
    nodo(j).NumHijos = 0  
    nodo(j).Terminal = TRUE
        
    j +=1
    nodo(j).Nombre = palabra.charAt(k).ToUpper    // <---- la mayuscula
    nodo(j).Indice = j
    nodo(j).NumHijos = 0
    nodo(j).Terminal = TRUE

// -------------------- fin primera fase ----------------
  
    // Ahora falta asociar los hijos a cada nodo.
    //    Siendo siempre solo 2 hijos es muy simple y no hace falta esta busqueda, es deducible
    //    pero en casos con diferente número de hijos, tocará buscar...
    n = (j-2)
    bucle para k desde 0 hasta n
        bucle para i desde 0 hasta nodos(k).NumHijos -1
            j = BuscarNodo(... )  // <--- esta función y los parámetros que deba recibir, los dejo a tu esfuerzo
            // pero para la palabra 'string', para '*' buscamos nodo(?).nombre, donde nombre son  's' y 'S' (en cada ciclo)
            //    para 'R' buscamos 'i' e 'I', etc...
            nodos(k).Hijos(i) = nodos(j)
        Siguiente
    Siguiente

// -------------------- fin segunda fase ----------------
fin funcion

Una captura:
(nota que yo he dejado el 'nombre' de la raíz  '*', con cada uno)




La salida completa sería:
Citar
*= s|S; s= t|T; S= t|T; t= r|R; T= r|R; r= i|I; R= i|I; i= n|N; I= n|N; n= g|G; N= g|G; g=; G=
Nodo Inicial: *
Nodos Finales: g, G


1 ---> *string   0
1 ---> *strinG   0
1 ---> *striNg   0
1 ---> *striNG   0
1 ---> *strIng   0
1 ---> *strInG   0
1 ---> *strINg   0
1 ---> *strING   0
1 ---> *stRing   0
1 ---> *stRinG   0
1 ---> *stRiNg   0
1 ---> *stRiNG   0
1 ---> *stRIng   0
1 ---> *stRInG   0
1 ---> *stRINg   0
1 ---> *stRING   0
1 ---> *sTring   0
1 ---> *sTrinG   0
1 ---> *sTriNg   0
1 ---> *sTriNG   0
1 ---> *sTrIng   0
1 ---> *sTrInG   0
1 ---> *sTrINg   0
1 ---> *sTrING   0
1 ---> *sTRing   0
1 ---> *sTRinG   0
1 ---> *sTRiNg   0
1 ---> *sTRiNG   0
1 ---> *sTRIng   0
1 ---> *sTRInG   0
1 ---> *sTRINg   0
1 ---> *sTRING   0
1 ---> *String   0
1 ---> *StrinG   0
1 ---> *StriNg   0
1 ---> *StriNG   0
1 ---> *StrIng   0
1 ---> *StrInG   0
1 ---> *StrINg   0
1 ---> *StrING   0
1 ---> *StRing   0
1 ---> *StRinG   0
1 ---> *StRiNg   0
1 ---> *StRiNG   0
1 ---> *StRIng   0
1 ---> *StRInG   0
1 ---> *StRINg   0
1 ---> *StRING   0
1 ---> *STring   0
1 ---> *STrinG   0
1 ---> *STriNg   0
1 ---> *STriNG   0
1 ---> *STrIng   0
1 ---> *STrInG   0
1 ---> *STrINg   0
1 ---> *STrING   0
1 ---> *STRing   0
1 ---> *STRinG   0
1 ---> *STRiNg   0
1 ---> *STRiNG   0
1 ---> *STRIng   0
1 ---> *STRInG   0
1 ---> *STRINg   0
1 ---> *STRING   0

Número de nodos: 13
Total de caminos: 126
Total de Salidas: 64

La opción de resolverlo con un árbol, es también adecuada, como te describí más arriba... pero elige el modelo que mejor veas factible de entender e implementar...
1434  Programación / Programación Visual Basic / Re: leer indice del archivo txt en: 19 Junio 2020, 01:21 am

Código
  1. Private Sub Command3_Click()
  2.    Open App.Path & "\Base1.txt" For Input As #1
  3.    Do While Not EOF(1)
  4.        Input #1, identificacion, azar, azar1, azar2, azar3, azar4
  5.        If Text1 = identificacion Then
  6.            Text2 = azar
  7.            Text3 = azar1
  8.            Text4 = azar2
  9.            Text5 = azar3
  10.            Text6 = azar4
  11.        End If
  12.    Loop
  13.    Close #1
  14. End Sub
  15.  
Esto es muy ineficiente...
Estás leyendo secuencialmente un fichero para localizar un valor...
Cuando es posible, es más óptimo el acceso aleatorio a la posición deseada del fichero.

Si el valor está ordenado, y por tanto 'identificación' es el enésimo registro, puedes calcular la posición y saltar directamente a ella.
Viendo que 'identificador' aumenta 1 a 1, es deducible que el contenido en el fichero está ordenado...

Si no está ordenado, todavía puedes ir saltando... y leer en cada ciclo, solo 'identificación' hasta que lo encuentras, y acto seguido lees lo que se precisa.




Código
  1. Private Sub Form_Load()
  2.    ' 1
  3.    If identificacion = 0 Then
  4.        Open App.Path & "\Base1.txt" For Append As #1
  5.        Close #1
  6.    End If
  7.  
  8.    ' 2
  9.    If identificacion = 0 Then identificacion = 0
  10.  
  11.    Open App.Path & "\Base1.txt" For Input As #1
  12.    Do While Not EOF(1)
  13.        Input #1, identificacion, azar, azar1, azar2, azar3, azar4
  14.    Loop
  15.  
  16.    ' 3
  17.    Text1 = identificacion + 1
  18.    Close #1
  19. End Sub
  20.  

1 - Abrir, para luego cerrar, qué sentido tiene????.
2 - Esa línea es redundante... sobra.
3 - Nuevamente es muy ineficiente... estás accediendo al último registro.... calcula: del tamaño del fichero, resta el tamaño de 1 regsto, posicionas el cursor ahí.. Basta leer solo el último registro.
En ficheros pequeños la ineficiencia no se aprecia, cuando operes con ficheros de muchos Mb... (pongamos 1Gb.... se hará intolerable la espera).


Y por favor, ya llevas tiempo en el foro, acostumbra a usar la etiquetas del 'código GESHI', ...las encuentras cuando editas el mensaje entre las opciones de edición de dicha ventana...
1435  Programación / Programación Visual Basic / Re: leer indice del archivo txt en: 18 Junio 2020, 17:21 pm
En primer lugar el código, siempre que sea posible y haya en el listado de etiquetas Geshi, el lenguaje para el mismo, procede colocarlo dentro de tales etiquetas... para que resulte cómodo leer y mantenga al menos el formato de la indentación.
O manualmente... (quitando los espacios se convierte en las etiquetas BBcode)
[ code = vb ] tu código aquí [ / code ]

Line input, lee una linea entera es decir hasta que encuentre un salto d elínea, sea la cantidad de bytes que sea. Por lo que solo resulta indicado en ciertas situaciones:
- Se pretende leer texto, por tanto leer cada vez una línes es adecuado, porque a priori, nos e conoce el tamaño de cada línea.
- Los datos están fuertemente formateados. En tal caso, el usuario se supone conocer correctamente la estructura y la forma de 'desguazar' (parse), dicha línea en las variables que proceda.
- Cualquier otra situación, pero solo cuando hay un único dato en cada línea (que no requiere un parsingm ás allá de la asignación).

Luego, Line input, lee 'string', cadenas de texto... de ahí el error que te arroja, puesto que tu (seguramente) intentas volcarlo en un tipo integer.

Antes de eso, con input es más procedente cuando se conoce muy bien el formato que compone el fichero y éste tiene (o puede tener) distintos tipos...
Así algo como:
Código
  1. Dim numVertices as byte
  2. Dim Vertices() as single
  3. dim canal as integer
  4. dim Ruta as string
  5.  
  6.    ' Abrir el fichero...
  7.    ruta = "tu ruta al fichero deseado..."
  8.    canal = Freefile
  9.    open ruta for input as #canal
  10.  
  11.    ' leer datos
  12.    input #canal,,numVertices
  13.    if (numVertices >0)
  14.        redim vertices(0 to numVertices-1)
  15.         input #canal,, vertices
  16.    else
  17.        '... algún mensaje de error si procede...
  18.    end if
  19.  
  20.   close #canal
  21.  
   
Que viene a decir... primero se lee la cantidad de vertices que es un byte (es decir un valor entre 1 y 255) y la siguiente lectura leerá, tantos valores de tipo single como indique...
Esto es porque hay un formato reconocido para el fichero que se conoce, y por tanto se aplicó al escribir y eél mismo es adecuado para leer.

No puedes escribir 10 bytes y luego pretender leer 12.
Las variables Azar, Azar1... y 'contador' están declarados como 'integer', luego por cada uno se leen 2 bytes.
EOF, detectará correctamente el final del fichero, siempre que una lectura cumpla una de estas dos condiciones:
A - se lee 1 único byte cada vez en el bucle.
B - Se leen los bytes que sean, pero congruentes al tamaño. Esto es, si se guardaron 60 bytes, puedo leer en cada ciclo, 2, o en cada ciclo 3, o en cada ciclo, 4 o en cada ciclo, 5, 10, 12, 15, 20, 30, 60... porque todos ellos son submúltiplos de 60
Si el fichero tiene 60 bytes y en cada ciclo se leen 7 bytes, al llegar al 8º ciclo, he leído 56 bytes (7*8), luego en el siguiente ciclo, al intentar leer 7 bytes, puésto que solo restan 60-56 = 4, saltará el error...

En el caso 'A', solo interesa cuando se sepa que es precisamente así como se quiere leer byte a byte, porque el tipo de datos de destino son bytes, o bien cuando es uno mismo quien procederá a componer el tipo que proceda. Ahora leer byte a byte es lento.
En el caso 'B', interesa cuando uno tiene que leer datos de forma más o menos compleja, aunque si hay un 'patrón' sería mejor crear una estrcutura (type), y leer con una sola variable todo el contenido d ela estructura, es decir 'record a record'...

Cierto problema con 'input' es que es 'exigente, es decir requiere que la lista de variables leída estén en el mismo orden y sean del mismo tipo que se escribieron, es decir si fueras a leer un entero donde se escribió una cadena, el entero devolvería 0.

Es más conveniente, para evitar ciertas complejidades para quienes no se leen nada de documentación leer y escribir en 'binary' mode... ya que lee y escribe bytes al tipo que lee, no guarda ninguna info del tipo que se guarda, luego es perfectamente sencillo guardar un tipo long (4 bytes) y luego leerlo como bytes, como integer como byte e integer, como long, incluso como cadena.

Código
  1. '....
  2.    dim k as long, j as integer, i as byte, b as boolean, s as string, ib() as byte  
  3.  
  4.    ' Escribimos un valor de tipo long = 4 bytes.
  5.    Open ruta for binary as #canal
  6.    k = 1145323841
  7.    put #canal,,k
  8.    debug.print "Escrito el tipo long con valor: " & cstr(k)
  9.    close #canal
  10.  
  11.    ' Leemos un tipo long = 4 bytes.
  12.    k= 0
  13.    canal = freefile
  14.    open ruta for binary as #canal
  15.    get #canal,, k
  16.    debug.print "Leido el tipo long con valor: " & cstr(k)
  17.    close #canal
  18.    debug.print
  19.  
  20.    ' Leemos un tipo integer 2 veces (2+2)=4 bytes.
  21.    canal = freefile
  22.    open ruta for binary as #canal
  23.    get #canal,, j
  24.    debug.print "Leido el tipo integer con valor: " & cstr(j)
  25.    get #canal,, j
  26.    debug.print "Leido otrol tipo integer con valor: " & cstr(j)
  27.    close #canal
  28.    debug.print
  29.  
  30.    ' Leemos un tipo integer y byte 2 veces (2+1+1)=4 bytes.
  31.    canal = freefile
  32.    open ruta for binary as #canal
  33.    get #canal,, j
  34.    debug.print "Leido el tipo integer con valor: " & cstr(j)
  35.    get #canal,, i
  36.    debug.print "Leido el tipo byte con valor: " & cstr(i)
  37.    get #canal,, i
  38.    debug.print "Leido otro tipo byte con valor: " & cstr(i)
  39.    close #canal
  40.    debug.print
  41.  
  42.    ' Leemos un tipo integer y byte 2 veces (2+1+1)=4 bytes.
  43.    canal = freefile
  44.    open ruta for binary as #canal
  45.    get #canal,, j
  46.    debug.print "Leido el tipo integer con valor: " & cstr(j)
  47.    get #canal,, i
  48.    debug.print "Leido el tipo byte con valor: " & cstr(i)
  49.    get #canal,, i
  50.    debug.print "Leido otro tipo byte con valor: " & cstr(i)
  51.    close #canal  
  52.    debug.print
  53.  
  54.    ' Leemos un tipo integer y boolean (2+2)=4 bytes.
  55.    canal = freefile
  56.    open ruta for binary as #canal
  57.    get #canal,, j
  58.    debug.print "Leido el tipo integer con valor: " & cstr(j)
  59.    get #canal,, b
  60.    debug.print "Leido el tipo boolean con valor: " & cstr(b)
  61.    close #canal
  62.    debug.print
  63.  
  64.    ' Leemos los mismos, al revés tipo boolean e integer (2+2)=4 bytes.
  65.    canal = freefile
  66.    open ruta for binary as #canal
  67.    get #canal,, b
  68.    debug.print "Leido el tipo boolean con valor: " & cstr(b)
  69.    get #canal,, j
  70.    debug.print "Leido el tipo integer con valor: " & cstr(j)
  71.    close #canal
  72.    debug.print
  73.  
  74.    ' Leemos un tipo byte a byte, 4 veces (1+1+1+1)=4 bytes.
  75.    canal = freefile
  76.    open ruta for binary as #canal
  77.    get #canal,, i
  78.    debug.print "Leido el tipo byte con valor: " & cstr(i)
  79.    get #canal,, i
  80.    debug.print "Leido otro byte con valor: " & cstr(i)
  81.    get #canal,, i
  82.    debug.print "Leido otro byte con valor: " & cstr(i)
  83.    get #canal,, i
  84.    debug.print "Leido otro byte con valor: " & cstr(i)
  85.    close #canal
  86.    debug.print
  87.  
  88.    ' Leemos un tipo byte y 3 más en un array (1+1+1+1)=4 bytes.
  89.    canal = freefile
  90.    open ruta for binary as #canal
  91.    get #canal,, i
  92.    debug.print "Leido el tipo byte con valor: " & cstr(i)
  93.    redim ib(0 to 2) ' dimensionar el array a un tamaño igual o menor a lo que reste en el fichero.
  94.    get #canal,, ib
  95.    debug.print "Leido un array de 3 bytes con valores: ",  cstr(ib(0)),  cstr(ib(1)),  cstr(ib(2))
  96.    close #canal
  97.    debug.print
  98.  
  99.    ' Leemos un tipo string de 3 caracteres (1+1+1+1)=4 bytes.
  100.    canal = freefile
  101.    open ruta for binary as #canal
  102.    s= space$(4)  ' dimensionar el string... si no es un string nulo ""
  103.    get #canal,, i
  104.    debug.print "Leido el tipo byte con valor: " & cstr(i)
  105.    redim ib(0 to 2)
  106.    get #canal,, ib
  107.    debug.print "Leido un array de 3 bytes con valores: ",  cstr(ib(0)),  cstr(ib(1)),  cstr(ib(2))
  108.    close #canal
  109.    debug.print
  110.  
Nota que cada vez hemos abierto y cerrado el fichero... no es estrictamente necesario, bastaría con reposicionar el curso de lectura al comienzo:

el acceso aleatorio a un fichero en modo binario, es reposicionando el cursor donde convenga
Código
  1.    Seek(canal), 1  ' reposiciona el curso al comienzo del fichero.
  2.  
  3.   Seek(canal),( lof(canal) -20) ' reposiciona el curso al final del fichero, -20 bytes, dará error si esa posición sale negativa (el fichero tiene menos de 20 bytes)
  4.  


También se puede preguntar por la posición actual... por ejemplo para guardarla, leer datos y volver a ese mismo punto por segunda vez.
Código
  1.    k = Seek(canal)
  2.  

Es posible tener más de un cursor apuntando al mismo fichero... uno podría estar leyendo de una cabecera de datos, mientras el otro canal apunta a los datos que el registor leído en la cebecera indicare (probablemente previo cálculo)
Código
  1.   canal1 = freefile
  2.   open ruta for binary as #canal1
  3.   canal2 = freefile
  4.   open ruta for binary as #canal2
  5.  

Nota también que es preferible usar la sentencia 'freefile' para obtener un canal libre, que usar una constante directamente... cuando peres con proyectos de cierta complejidad, no puedes tener control de 'números', Freefile devuelve siempre un canal no usado que se asigna a una variable, que identifica únivocamente al fichero concreto... si además la variable tiene un nombre más específico, mejor: canalPrecios (por ejemplo, para un fichero cuyo contenido son precios), canalClientes (por ejemplo para un fichero cuyo contenido son registros con los datos de clientes)

Nota que en modo binario, se lee un solo dato (variable) cada vez... input, permite leer una lista, es parte de lo que determina si usar un modo u otro, pero es muy dependiente del modo en que se escribió.

... en cualquier caso, acude a la documentación de VB6, que es muy completa, lleva el cursor al keyword del lenguaje de tu interés y pulsa 'F1', la ayuda aparece siempre pulsando la tecla de función: 'F1', pero si está encima de un keyword, busca el mismo... y la propia documentación suele contener ejemplos.

Hay que practicar, pero lo correcto es aprender documentándose. Practicar sin documentación, supone emplear 20 veces más de tiempo para aprender, algo que leyendo unos párrafos, se aprende en 15 minutos y se practca en 1 hora... con solo práctica puedes dedicarle días, y todavía surgirán errores y dudas que uno no termina de comprender y es seguro, que quedarán lagunas...(detalles que jamás se llega a conocer).
1436  Foros Generales / Foro Libre / Re: Enquesta Malwares en: 16 Junio 2020, 16:52 pm
Es probable que las estadísticas salgan un poco elevadas en ciertas preguntas... en un foro de programación, va a ser que todo el mundo que participa activamente del mismo, responda 'sí' a varias preguntas...

Para ser más neutral (o por lo menos tener otro horizonte comparativo), tendrías que insistir en un foro o red social completamente ajeno a la programación...
1437  Foros Generales / Foro Libre / Re: Corea del Norte destruye la oficina de relaciones con el Sur en: 16 Junio 2020, 16:45 pm
Yo creo que el gordito, ha muerto...
No se le ha vuelto a ver el pelo, en los últimos meses, algo imposible, inaceptable para cualquier 'líder' comunista, cuyos egos les llevan a estar en todos los noticieros del país y de cuando en cuando en los mundiales... (aunque solo sea para amenazar).

Que sea su hermana quien venga a dar respuesta, no hace sino refrendar la cuestión.
1438  Foros Generales / Foro Libre / Re: Decapitan y derriban varias estatuas de Cristóbal Colón en Estados Unidos en: 13 Junio 2020, 00:32 am
¿Había esclavitud o racismo en América antes de que llegara Colón?
La esclavitud y el racismo son dos conceptos distintos, no tienen porqué ir juntos.
Y sí, en América, tampoco había santos... Hay crónicas brutales y no solo de sacrificios humanos, muchas tribus, se la pasaban guerreando contra los vecinos. El hombre para bien o para mal, suele ser igual en todas partes.

Tal vez, dicen que los indígenas esclavizaban a los de otros pueblos, además de hacer sacrificios a sus dioses. Pero la esclavitud del negro por parte del blanco, no, porque no había blancos.
La esclavitud no entiende de colores... Un esclavo, es un esclavo.
Si se quiere afirmar que a causa del descubrimiento de América, la esclavitud de los negros se acentuó, la esclavitud en América del sur y otros horrores de America acabaron.
Aunque la Historia siempre guarda más capítulos trágicos...

Y los blancos llegaron en gran parte debido a Colón. Que dudo que fuese un inocente navegante.
No se sabe bien como era Colón en su día a día, supongo que ni mejor ni peor que tú o yo. Y mientras no haya pruebas o crónicas que digan lo contrario, en efecto era un inocente navegante.
Y... como sule decirse, si no hubiera sido Colón, con el tiempo habría sido otro...

Hay otros individuos (sobretodo en el norte de América), de los que si se sabe que eran C48R0N35 a más no poder... de los innumerables tratados que hicieorn con los nativos de norteamérica, los hoy habitantes de esa zona, no respetaron casi ninguno.  Persecuciones hasta la casi extinción, pero ahí siguen esas estatuas dedicados a tales generalillos... por poner alguno alguien que todo el mundo conoce de las películas: "el general Custer"... Para los norteamericanos es un 'héroe', pero exterminó a nativos, sin fin... todas las estatuas de esos, sí que podrían derribarlas, los muertos que cada uno asestó seguro que son miles... que se sepa, Colón no mató a nadie, ni persiguió, ni nada de nada a nadie...

...márcale a un bobo una silueta y ya tiene contra qué disparar, poco le importará el resto.
1439  Foros Generales / Foro Libre / Re: Decapitan y derriban varias estatuas de Cristóbal Colón en Estados Unidos en: 12 Junio 2020, 17:51 pm
No tiene mucho sentido.
...La esclavitud a los negros empezó cuando llegaron de Europa. Y no sé si Cristobal fue el 1ero pero muchos creen que sí de modo que lo consideran "malo". Pero no se dan cuenta de que él como todos somos una especie de marioneta de nuestras épocas. Si Cristobal hubiera nacido en nuestra época no creo que fuera racista.
No. La esclavitud (moderna, porque siempre existió), nace curiosamente de un capítulo de bondad...

América fue descubierta por Colón en 1492, arribando a las islas de Cuba, ya en 1503 (solo 11 años después, cuando apenas había penetración en el continente). creo recordar que fue fray Antonio Montesinos, quien escribía una carta al Rey de España entonces Carlos I, para acusar a los terratenientes que se habían establecido en la isla por el maltrato dado a los nativos. El rey exigió pesquisas y se excusaron así como: "...claro como vamos a cultivar la tierra si no hay mano de obra y ..." y ahí quedó la cosa de momento.

Luego en 1520, el fraile tuvo que viajar a España, pidió audiencia con el rey y expuso nuevamente el problema de forma más explícita. El rey por supuesto escuchó otras voces, la máxima contradicción era: cómo o quién atendería los trabajos... en algún momento (según narra la Historia) el fraile atinó a decir que los africanos como ya lo venían siendo. Es de constatar que ya la reina Isabel había prohibido la esclavitud en las tierras conquistadas (15 años antes siquiera del descubrimiento de América), pués los conquistados debían ser súbditos, no esclavos.
Tanto es así, después de algunos años en 1528 (creo) se logró que el rey promulgara un edicto prohibiendo todo tipo de esclavitud y trabajos forzados, es decir todo trabajo debía estar remunerado.
Fray Bartolomé de las Casas, se hizo eco y encabezó la misma lucha llegando finalmente al Papa, quien acabó declarando para todo el Imperio Cristiano que: "Se considera a los nativos americanos son también hijos de dios y por tanto hermanos de sangre", lo que a efectos legales quería decir que tenían los mismos derechos que cualquier otro.

Esa imprudente frase de de fray Antonio de Montesinos, cuya única intención era liberar a los nativo americanos de ser maltratados, es la que se considera y atribuye al inicio de la esclavitud moderna de los negros. Aunque Carlos I, prohibiera la esclavitud, muchos ávidos terratenientes a sabiendas de la dificultad de verificar, exigir y obligar a cumplir edictos promulgados en España en tierras perdidas de América, inicialmente hicieron caso omiiso y utilizaban a los nativo americanos como mano de obra barata, como si fueran ganado.

Aunque la esclavitud 'renaciera' en esas circunstancias es de aclarar que los negociantes de los barcos negreros, fueron masivamente los holandeses. De hecho hasta Portugal fue masivamente más traficante de esclavos de lo que nunca fue España.

También hay que aclarar que la esclavitud ya existía en América antes de que Colón llegara. Y la esclavitud de los negros, también existía previamente, pero no era tan masivo. Prácticamente ha existido la esclavitud a lo largo de toda la historia humana, la diferencia crucial entre culturas (más bien entre períodos históricos) ha sido siempre el trato que se les daba y los derechos que tenían.

Es muy probable que si no hubiera existido la esclavitud de negros, la población de nativos en latino América se habría extinguido o languidecido como pasó con la población nativa de América del norte (ahí incluso a pesar de la masiva introducción de esclavos).

Y por último, leches, Colón era un navegante. No tiene nada que ver, con la esclavitud. es como culpar a los esposos Curie, de que USA lanzara 2 bombas atomícas en Japón...

Impreciso, y falto de documentación y detalles, pero puede leerse en wikipedia el artículo:
https://es.wikipedia.org/wiki/Esclavitud_en_Am%C3%A9rica


En efecto, 1492... se ha colado un 8.
1440  Foros Generales / Foro Libre / Re: Decapitan y derriban varias estatuas de Cristóbal Colón en Estados Unidos en: 12 Junio 2020, 17:03 pm
...Aquí en Latinoamerica muchos politicos estan hablando de si es necesario erradicar todo lo español de la memoria de estos paises, ya que lo ven como un pasado vergonzoso..  
El pasado es la Historia, guste a quien le guste, odie quien lo odie, es la que es. Borrarlo, no cambia ni un pelo de los hechos del pasado.
Así que me temo que la única intención es (intentar) cambiar el presente, para intereses partidarios en asuntos políticos.

Únicamente se hace un pequeña mención de como los Españoles llegaron al continente a robar, a matar y a violar mujeres nativas, y que por eso era tan necesaria la independencia.. para terminar con esa tirania.
Los actuales pobladores de latinoamérica, no son nativos de América al 100%, (sin mirar cifras), diría que entre el 90-99% son descendientes de españoles y nativos... "fifty-fifty". Es decir, los actuales pobladores de América son los descendientes directos de esos a los que desprecian, los que robaron o violaron...

En cambio, los actuales pobladores de España, tienen a esos como ancestros lejanos, no son descendientes directos. Se pierde en 15-20 generaciones arriba, para encontrar ese lazo de sangre y luego bajar en su descendencia... Los españoles que fueron a América, se quedaron allí a vivir, tuvieron descendencia allí y por supuesto murieron allí. Son vuestros antepasados tanto como lo son los nativo americanos.

Resulta torpe, que se culpe al resto de españoles que nunca fue a América a nada, de lo que hicieron los tata...rabuelos de esos que hoy se quejan de su pasado.

Es como si yo quisiera hoy culpar a los italianos actuales de lo que haya pasado o esté pasando en España, solo porque Roma invadió España hace 2.000 años...

Para colmo... los auténticos nativos (digamos así a aquellos que no tienen o apenas "tienen ADN español"), están siendo reducidos o eliminados... ahí vemos como Brasil, sigue sangrando el Amazonas y destruye todas esas aldeas de nativos, los insultan, desprecian, apalean... Bolivia... en fin, no hace falta poner más ejemplos... ya que no es ese el tema...

En cierta forma ese odio es necesario para justificar la existencia de nuestros jovenes países, de lo contrario los niños comenzarian a preguntar demasiado y eso no conviene.
Es tan sencillo de entender, que da pena que se dejen manipular de esa forma.

Entiendo que, hay movimientos políticos 8no importa el signo) que para afiliar a tontos e incultos en sus listas recurran a culpar a cualquiera de sus problemas actuales... en vez de asumir el 'es nuestra culpa' (j0d3r, que ya ha llovido alrededor de 200 años... desde que los países latinoamericanos lucharon por su independencia... lo que son hoy no tiene cabida ya acusar a nadie del pasado para pretender 'explicar' los problemas actuales).

Cuando Napoléon invadió Europa y se metió también en España, es cuando los pueblos de América aprovecharon para sus luchas de independencia... era la ocasión perfecta.

Pero... la Independencia lleva aparejado la responsabilidad de tu futuro, no procede desde entonces culpar a nadie.

Hay que asumir la responsabilidad en vez de estar quejándose de todo y culpar a los demás. Ahí estuvo Chávez su etapa de gobernante se resume en 2 frases:
- 1 Llevó al país a la ruina, y lejos de responsabilizarse, lo que siempre hizo fue
- 2 Culpar a los gringos, a Rajoy, a quien sea... de todo.
...y Maduro lo mismo. Mientras culpen a otros, los tontos, no se darán cuenta que la culpa real es de esos que no paran de acusar a los demás (y están en el poder).
Páginas: 1 ... 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 [144] 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 ... 432
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines