Fichero
Hola rafart,
necesito saber como localizar en un archivo de texto cierta cadena de caracteres y que me devuelva la posición o algo para poder trabajar a partir de ese dato.
Los inconvenientes que le veo son que el archivo de texto es de unos 4Mb y tiene una sola linea.
Gracias y un saludo
necesito saber como localizar en un archivo de texto cierta cadena de caracteres y que me devuelva la posición o algo para poder trabajar a partir de ese dato.
Los inconvenientes que le veo son que el archivo de texto es de unos 4Mb y tiene una sola linea.
Gracias y un saludo
1 Respuesta
Respuesta de rafart
1
1
Tendrías que usar la instrucción Open, para leer datos del archivo byte a byte o por bloques de bytes, para ello tendrás que ejecutar Open con la opción binary, y después usar la función GET, para ir obteniendo los bloques de datos, para cada bloque de datos deberás usar InStr(Bloque, ValorBusco), que te devuelve la posición donde ha encontrado ValorBusco dentro de Bloque, ves calculando los bloques y la posición de lo que ha encontrado, a continuación te paso documentación sobre las instrucciones:
Open (Instrucción)
Activa operaciones de entrada/salida (E/S) con un archivo.
Sintaxis
Open rutaacceso [For modo] [Access acceso] [bloquear] As [#]númeroarchivo [Len=longitudregistro]
La sintaxis de la instrucción Open consta las siguientes partes:
Parte Descripción
Rutaacceso Requerido. Expresión de cadena que especifica un nombre de archivo; puede incluir el directorio o carpeta y la unidad de disco.
Modo Requerido. Palabra clave que especifica el modo de archivo: Append, Binary, Input, Output o Random. Si no se especifica, el archivo se abre con acceso Random.
acceso Opcional. Palabra clave que especifica las operaciones permitidas en el archivo abierto: Read, Write o Read Write.
bloquear Opcional. Palabra clave que especifica las operaciones permitidas en el archivo abierto por otros procesos: Shared, Lock Read, Lock Write y Lock Read Write.
Númeroarchivo Requerido. Unnúmero de archivo válido entre 1 y 511 inclusive. Para obtener el número del siguiente archivo disponible se utiliza la función FreeFile.
Longitudregistro Opcional. Número igual o inferior a 32.767 bytes. En archivos abiertos para acceso aleatorio, este valor es la longitud del registro. Para archivos secuenciales, este valor es el número de caracteres almacenados en búfer.
*****************************************************
Get (Instrucción)
Lee datos de un archivo de disco abierto y coloca la información en unavariable.
Sintaxis
Get [#]númeroarchivo, [númeroregistro], nombrevariable
La sintaxis de la instrucción Get consta de las siguientes partes:
Parte Descripción
Númeroarchivo Requerido. Cualquiernúmero de archivo válido.
Númeroregistro Opcional. Un tipo Variant (Long). Número de registro (archivos en modo Random) o número de byte (archivos en modo Binary) desde el que comienza la lectura.
Nombrevariable Requerido. Nombre de una variable válida en la que se colocan los datos.
Comentarios
Los datos que se leen con Get se escriben habitualmente en un archivo con Put.
El primer registro o byte de un archivo se encuentra en la posición 1, el segundo en la posición 2 y así sucesivamente. Si omite númeroregistro, se lee el siguiente registro o byte que se encuentra después de la últimainstrucción Get o Put (o al que señala la última función Seek). Debe incluir las comas de delimitación, por ejemplo:
Get #4,,BúferArchivo
En los archivos abiertos en modo Random se aplican las siguientes reglas:
Aunque la longitud de la información que se lee sea menor que la especificada en la cláusula Len de la instrucción Open, Get lee los registros siguientes según los límites de longitud de registro. El espacio comprendido entre el final de un registro y el principio del siguiente se llena con el contenido del búfer del archivo. Puesto que la cantidad de la información de relleno no se puede determinar con certeza, es conveniente hacer que el registro tenga la misma longitud que la información que se lee.
Si la variable en la que se lee la información es una cadena de caracteres de longitud variable, Get lee un descriptor de 2 bytes que contiene la longitud de la cadena de caracteres y a continuación los datos que van en la variable. Por lo tanto, la longitud del registro especificada por la cláusula Len de la instrucción Open debe ser por lo menos 2 bytes mayor que la longitud real de la cadena de caracteres.
Si la variable que se va a leer es una variableVariant detipo numérico, Get lee 2 bytes que identifican el VarType del tipo Variant y luego los datos que van en la variable. Por ejemplo, cuando se lee un tipo Variant de VarType 3, Get lee 6 bytes: 2 bytes identifican el tipo Variant como VarType 3 (Long) y 4 bytes contienen el dato tipoLong. La longitud del registro, especificada por la cláusula Len de la instrucción Open, debe ser por lo menos 2 bytes mayor que el número real de bytes necesario para almacenar la variable.
Nota Puede utilizar la instrucción Get para leer unamatriz Variant del disco, pero no puede emplear Get para leer una Variant escalar que contenga una matriz Tampoco podrá utilizar Get para leer objetos del disco.
Si la variable que se va a leer es una Variant de tipo VarType 8 (String), Get lee 2 bytes que identifican el VarType, 2 bytes que indican la longitud de la cadena de caracteres y luego la propia cadena. La longitud del registro especificada por la cláusula Len de la instrucción Open debe ser por lo menos 4 bytes mayor que la longitud real de la cadena.
Si la variante que va a leer es una matriz dinámica, Get lee un descriptor cuya longitud equivale a 2 más 8 veces el número de dimensiones, es decir, 2 + 8 * NumberOfDimensions. La longitud del registro especificada por la cláusula Len de la instrucción Open debe ser mayor o igual que la suma de todos los bytes necesarios para leer los datos y el descriptor de la matriz. Por ejemplo, la siguiente declaración de matriz requiere 118 bytes cuando la matriz se escribe en disco.
Dim MiMatriz(1 To 5,1 To 10) As Integer
Los 118 bytes se distribuyen de la siguiente forma: 18 bytes para el descriptor (2 + 8 * 2) y 100 bytes para los datos (5 * 10 * 2).
Si la variable que va a leer es una matriz de tamaño fijo, Get lee solamente los datos. No lee ningún descriptor.
Si la variable que va a leer es cualquier otro tipo de variable (no una cadena de longitud variable ni un tipo Variant), Get lee solamente los datos variables. La longitud del registro especificada por la cláusula Len de la instrucción Open debe ser mayor o igual que la longitud de los datos que está leyendo.
Get lee elementos detipos definidos por el usuario como si cada uno de ellos se leyera individualmente, excepto en que no hay relleno entre los elementos. En disco, una matriz dinámica de un tipo definido por el usuario (escrito con Put) tiene como prefijo un descriptor cuya longitud es igual a 2 más 8 veces el número de dimensiones, es decir, 2 + 8 * NumberOfDimensions. La longitud del registro especificada por la cláusula Len de la instrucción Open debe ser mayor o igual que la suma de todos los bytes necesarios para leer cada uno de los elementos, incluyendo las matrices y sus descriptores.
En los archivos abiertos en modo Binary tienen vigencia todas las reglas del modo Random, con las siguientes excepciones:
La cláusula Len de la instrucción Open no tiene efecto. Get lee del disco todas las variables en forma contigua, es decir, sin relleno entre registros.
Para cualquier matriz distinta de las utilizadas en un tipo definido por el usuario, Get lee solamente los datos. No lee ningún descriptor.
Get lee las cadenas de caracteres de longitud variable que no son elementos de tipos definidos por el usuario, sin esperar el descriptor de longitud de 2 bytes. El número de bytes leídos es igual al número de caracteres existentes en la cadena. Por ejemplo, las siguientes instrucciones leen 10 bytes delarchivo número 1:
VarCadena = String(10," ")
Get #1,,VarCadena
Open (Instrucción)
Activa operaciones de entrada/salida (E/S) con un archivo.
Sintaxis
Open rutaacceso [For modo] [Access acceso] [bloquear] As [#]númeroarchivo [Len=longitudregistro]
La sintaxis de la instrucción Open consta las siguientes partes:
Parte Descripción
Rutaacceso Requerido. Expresión de cadena que especifica un nombre de archivo; puede incluir el directorio o carpeta y la unidad de disco.
Modo Requerido. Palabra clave que especifica el modo de archivo: Append, Binary, Input, Output o Random. Si no se especifica, el archivo se abre con acceso Random.
acceso Opcional. Palabra clave que especifica las operaciones permitidas en el archivo abierto: Read, Write o Read Write.
bloquear Opcional. Palabra clave que especifica las operaciones permitidas en el archivo abierto por otros procesos: Shared, Lock Read, Lock Write y Lock Read Write.
Númeroarchivo Requerido. Unnúmero de archivo válido entre 1 y 511 inclusive. Para obtener el número del siguiente archivo disponible se utiliza la función FreeFile.
Longitudregistro Opcional. Número igual o inferior a 32.767 bytes. En archivos abiertos para acceso aleatorio, este valor es la longitud del registro. Para archivos secuenciales, este valor es el número de caracteres almacenados en búfer.
*****************************************************
Get (Instrucción)
Lee datos de un archivo de disco abierto y coloca la información en unavariable.
Sintaxis
Get [#]númeroarchivo, [númeroregistro], nombrevariable
La sintaxis de la instrucción Get consta de las siguientes partes:
Parte Descripción
Númeroarchivo Requerido. Cualquiernúmero de archivo válido.
Númeroregistro Opcional. Un tipo Variant (Long). Número de registro (archivos en modo Random) o número de byte (archivos en modo Binary) desde el que comienza la lectura.
Nombrevariable Requerido. Nombre de una variable válida en la que se colocan los datos.
Comentarios
Los datos que se leen con Get se escriben habitualmente en un archivo con Put.
El primer registro o byte de un archivo se encuentra en la posición 1, el segundo en la posición 2 y así sucesivamente. Si omite númeroregistro, se lee el siguiente registro o byte que se encuentra después de la últimainstrucción Get o Put (o al que señala la última función Seek). Debe incluir las comas de delimitación, por ejemplo:
Get #4,,BúferArchivo
En los archivos abiertos en modo Random se aplican las siguientes reglas:
Aunque la longitud de la información que se lee sea menor que la especificada en la cláusula Len de la instrucción Open, Get lee los registros siguientes según los límites de longitud de registro. El espacio comprendido entre el final de un registro y el principio del siguiente se llena con el contenido del búfer del archivo. Puesto que la cantidad de la información de relleno no se puede determinar con certeza, es conveniente hacer que el registro tenga la misma longitud que la información que se lee.
Si la variable en la que se lee la información es una cadena de caracteres de longitud variable, Get lee un descriptor de 2 bytes que contiene la longitud de la cadena de caracteres y a continuación los datos que van en la variable. Por lo tanto, la longitud del registro especificada por la cláusula Len de la instrucción Open debe ser por lo menos 2 bytes mayor que la longitud real de la cadena de caracteres.
Si la variable que se va a leer es una variableVariant detipo numérico, Get lee 2 bytes que identifican el VarType del tipo Variant y luego los datos que van en la variable. Por ejemplo, cuando se lee un tipo Variant de VarType 3, Get lee 6 bytes: 2 bytes identifican el tipo Variant como VarType 3 (Long) y 4 bytes contienen el dato tipoLong. La longitud del registro, especificada por la cláusula Len de la instrucción Open, debe ser por lo menos 2 bytes mayor que el número real de bytes necesario para almacenar la variable.
Nota Puede utilizar la instrucción Get para leer unamatriz Variant del disco, pero no puede emplear Get para leer una Variant escalar que contenga una matriz Tampoco podrá utilizar Get para leer objetos del disco.
Si la variable que se va a leer es una Variant de tipo VarType 8 (String), Get lee 2 bytes que identifican el VarType, 2 bytes que indican la longitud de la cadena de caracteres y luego la propia cadena. La longitud del registro especificada por la cláusula Len de la instrucción Open debe ser por lo menos 4 bytes mayor que la longitud real de la cadena.
Si la variante que va a leer es una matriz dinámica, Get lee un descriptor cuya longitud equivale a 2 más 8 veces el número de dimensiones, es decir, 2 + 8 * NumberOfDimensions. La longitud del registro especificada por la cláusula Len de la instrucción Open debe ser mayor o igual que la suma de todos los bytes necesarios para leer los datos y el descriptor de la matriz. Por ejemplo, la siguiente declaración de matriz requiere 118 bytes cuando la matriz se escribe en disco.
Dim MiMatriz(1 To 5,1 To 10) As Integer
Los 118 bytes se distribuyen de la siguiente forma: 18 bytes para el descriptor (2 + 8 * 2) y 100 bytes para los datos (5 * 10 * 2).
Si la variable que va a leer es una matriz de tamaño fijo, Get lee solamente los datos. No lee ningún descriptor.
Si la variable que va a leer es cualquier otro tipo de variable (no una cadena de longitud variable ni un tipo Variant), Get lee solamente los datos variables. La longitud del registro especificada por la cláusula Len de la instrucción Open debe ser mayor o igual que la longitud de los datos que está leyendo.
Get lee elementos detipos definidos por el usuario como si cada uno de ellos se leyera individualmente, excepto en que no hay relleno entre los elementos. En disco, una matriz dinámica de un tipo definido por el usuario (escrito con Put) tiene como prefijo un descriptor cuya longitud es igual a 2 más 8 veces el número de dimensiones, es decir, 2 + 8 * NumberOfDimensions. La longitud del registro especificada por la cláusula Len de la instrucción Open debe ser mayor o igual que la suma de todos los bytes necesarios para leer cada uno de los elementos, incluyendo las matrices y sus descriptores.
En los archivos abiertos en modo Binary tienen vigencia todas las reglas del modo Random, con las siguientes excepciones:
La cláusula Len de la instrucción Open no tiene efecto. Get lee del disco todas las variables en forma contigua, es decir, sin relleno entre registros.
Para cualquier matriz distinta de las utilizadas en un tipo definido por el usuario, Get lee solamente los datos. No lee ningún descriptor.
Get lee las cadenas de caracteres de longitud variable que no son elementos de tipos definidos por el usuario, sin esperar el descriptor de longitud de 2 bytes. El número de bytes leídos es igual al número de caracteres existentes en la cadena. Por ejemplo, las siguientes instrucciones leen 10 bytes delarchivo número 1:
VarCadena = String(10," ")
Get #1,,VarCadena
- Compartir respuesta
- Anónimo
ahora mismo