Título: leer indice del archivo txt Publicado por: corlo en 17 Junio 2020, 12:49 pm Hola soy corlo
estoy haciendo un codigo para leer el final del archivo del indice o sea text6.text text6.text=contador text1.text=azar text2.text=azar1 text3.text=azar2 text3.text=azar3 text4.text=azar4 a la hora de grabar la informacion me lo hace bien, pero cuando cierro el programa y lo ejecuto otra vez me dice el siguiente error en el form load Error '62' en tiempo de ejecucion: la entrada de datos se ha sobrepasado el final del archivo en la linea: Input #1, azar, azar1, azar2, azar3, azar4 y lo que yo quiero es leer la variable contador al final del archivo Código:
Gracias Título: Re: leer indice del archivo txt Publicado por: MCKSys Argentina en 17 Junio 2020, 18:47 pm Hola!
Si tu archivo tiene el formato parecido al de un archivo INI: Código: variable1=valor1 Puedes hacer la conversión al mismo: Código: [INFO] Y luego usar las APIs de Windows GetPrivateProfileString y WritePrivateProfileString para leer los valores de las variables. Busca sobre dichas APIs en la red (te dejo los declare por las dudas). Código
Por otro lado, si quieres implementar tu propio codigo, te recomiendo leer linea x linea en una matriz y luego porcesar la misma; o bien, procesar al leer. Saludos! Título: Re: leer indice del archivo txt Publicado por: corlo en 17 Junio 2020, 22:27 pm hola
gracias MCKSys Argentina por contestar pero lo que yo necesito es trabajar con archivos secuenciales Error '62' en tiempo de ejecucion: la entrada de datos se ha sobrepasado el final del archivo en la linea: Input #1, azar, azar1, azar2, azar3, azar4 y lo que yo quiero es leer la variable contador al final del archivo del formload gracias Título: Re: leer indice del archivo txt Publicado por: MCKSys Argentina en 17 Junio 2020, 23:21 pm pero lo que yo necesito es trabajar con archivos secuenciales y lo que yo quiero es leer la variable contador al final del archivo del formload OK, entonces necesitas ver que hay en el archivo antes de hacer el input, ya que es evidente que no hay data suficiente para llenar las variables. Por ello te escribí: Por otro lado, si quieres implementar tu propio codigo, te recomiendo leer linea x linea en una matriz y luego porcesar la misma; o bien, procesar al leer. En tu caso puedes hacer un line input de esa segunda linea y parsear de acuerdo a los valores que encuentres. Saludos! Título: Re: leer indice del archivo txt Publicado por: corlo en 18 Junio 2020, 00:22 am gracias por responder MCKSys Argentina
he probado con line input y me dice el siguiente error no coinciden los tipos en la variable azar me podrias poner un pequeño ejemplo sobre lo que dices gracias Título: Re: leer indice del archivo txt Publicado por: Serapis 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
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 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
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
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
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). Título: Re: leer indice del archivo txt Publicado por: corlo en 18 Junio 2020, 23:20 pm hola nebire gracias por contestar
al final lo he conseguido dejo el codigo por si alguien le interesa Código:
gracias Título: Re: leer indice del archivo txt Publicado por: Serapis en 19 Junio 2020, 01:21 am Código
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 - 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... Título: Re: leer indice del archivo txt Publicado por: corlo en 19 Junio 2020, 12:50 pm hola nebire
ya lo se que se puede mejorar la estructua del programa , pero por lo que necesito yo de momento ya vale , pero si lo quieres mejorar , lo puedes mejorar. trabajo con archivos secuenciales por poca informacion gracias por responder |