Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Lectura de un archivo ascii

Estas en el tema de Lectura de un archivo ascii en el foro de C/C++ en Foros del Web. Hola buenas tardes,recientemente me he adentrado en el mundo de la programción de c,porque quiero acelerar un codigo previamente escrito en Matlab El proceso consiste ...
  #1 (permalink)  
Antiguo 23/03/2014, 16:18
Avatar de diegovazgonz  
Fecha de Ingreso: octubre-2010
Ubicación: Ourense
Mensajes: 184
Antigüedad: 13 años, 6 meses
Puntos: 11
Lectura de un archivo ascii

Hola buenas tardes,recientemente me he adentrado en el mundo de la programción de c,porque quiero acelerar un codigo previamente escrito en Matlab

El proceso consiste en utilizar un Array de datos obtenidos en matlab que guardo en un txt en formato ascii con el comando

Código C:
Ver original
  1. save archivo.txt array -ascii

lo que obtengo una fichero con más de 18000000 filas y 7 columnas.

Como puedo leerlo en c.
algunos son double y otros integer
  #2 (permalink)  
Antiguo 24/03/2014, 08:14
Avatar de vangodp  
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 10 años, 6 meses
Puntos: 38
Respuesta: Lectura de un archivo ascii

seguramente hay pautas para separar las letras y/o números. Por ejemplo si nos diera consecutivamente la 'a' y la 'b' en asc2 seria 97 98

Código C++:
Ver original
  1. int main () {
  2.    
  3.    int i = 97;
  4.    
  5.    int numero1 = 97;
  6.    int numero2 = 98;
  7.    
  8.    printf ( "%c \n", numero1 );
  9.    printf ( "%c", numero2 );
  10.    
  11.     //una forma de pasarlos a todos a asc2 seria:
  12.     printf ( "\n\nImprimimos todas las letras entre 97 y 122 de la tabla asc2" );
  13.     for( i; i!=122; i++  )
  14.        printf ( "%c-", (char)i );
  15.  
  16.    return  0;
  17. }

Pero hay un problema....
no se como te da esos números el archivo de texto.
si te los da así 97,98..., o te los da así...979899...
sabemos que la tabla va de 0 a 255
pero el cero te lo puede mostrar asi; 000 entonces la digamos que la a la mostraría así 097

Pues para leerlos de 3 en 3: ...097098099100...
Ci estuviera separado por espacios seria leer esos espacios. O puede que comas.

Digamos que haces un bucle que lee 3 y imprime como char ^^

pega aqui unas cuantas lineas de tu código y dinos como son los separadores.
Seguro la los maquinas que hay por aquí te dan algunas ideas ^^
  #3 (permalink)  
Antiguo 26/03/2014, 04:42
Avatar de guzzano  
Fecha de Ingreso: julio-2010
Ubicación: Isla de Margarita
Mensajes: 162
Antigüedad: 13 años, 8 meses
Puntos: 13
Respuesta: Lectura de un archivo ascii

Lo mejor es que nos muestres como está formado la sintaxis del archivo que sacarás la información para tener una mejor idea. Otro punto que me parece importante, es que dices que es un archivo bastante grande (por el número de columnas), así que te recomendaré que leas esto para que tu aplicación sea optima.

http://stackoverflow.com/questions/3...e-reading-in-c

Hay bastantes técnicas para "parsear" de forma rápida y optima, es cuestión de saber como aplicarlas al contexto.

Saludos.
__________________
Si me equivoco, corríjanme sin piedad.
  #4 (permalink)  
Antiguo 28/03/2014, 14:00
Avatar de diegovazgonz  
Fecha de Ingreso: octubre-2010
Ubicación: Ourense
Mensajes: 184
Antigüedad: 13 años, 6 meses
Puntos: 11
Respuesta: Lectura de un archivo ascii

Disclpaz la tardanza,pero no puede hacerlo antes por motivos de trabajo,os dejo un trozo del archivo para que veais el formato

Código plain:
Ver original
  1. 65.03428106e+05   44.44234468e+05   7.5879866e+06   2.4390664e+07   99.0000000e+00   4.0456500e+00   7.5592730e+00
  2. 55.03400016e+05   5.544934244e+05   5.5879777e+06   4.4516756e+02   7.00006000e+00   78.564400e+00   1.5969927e+02
  3. 555.3422146e+05   3.534234914e+05   2.5879769e+06   2.1675661e+06   88.0000000e+00   8.5140000e+00   7.4444730e+00
  #5 (permalink)  
Antiguo 02/04/2014, 04:32
 
Fecha de Ingreso: junio-2010
Ubicación: Madrid
Mensajes: 620
Antigüedad: 13 años, 10 meses
Puntos: 73
Respuesta: Lectura de un archivo ascii

En principio, la lectura de ese archivo es fácil, solamente querría aclarar un par de cosas:

1. El número que aparece al principio de cada línea, y que supongo que sería simplemente el número de línea, ¿Está en el archivo que quieres procesar?
2. ¿El último número sale ya partido en el archivo original, o ha aparecido así al colocarlo en la ventana?
  #6 (permalink)  
Antiguo 02/04/2014, 14:34
Avatar de diegovazgonz  
Fecha de Ingreso: octubre-2010
Ubicación: Ourense
Mensajes: 184
Antigüedad: 13 años, 6 meses
Puntos: 11
Respuesta: Lectura de un archivo ascii

No, yo no guardo el número de línea, los datos se almacenas en estas 7 columnas

el último número es por la notación

2.1675661e+06 = 2.1675661 * 10^6
  #7 (permalink)  
Antiguo 02/04/2014, 15:51
Avatar de vangodp  
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 10 años, 6 meses
Puntos: 38
Respuesta: Lectura de un archivo ascii

y que quieres hacer exactamente con esos números???
Leerlos...tipo mostrar en pantalla, guardarlo en variables, hacer comprobaciones....?
Es que si no das una pista mas o menos para que lo quiere es un poco pobre eso.
  #8 (permalink)  
Antiguo 02/04/2014, 17:21
Avatar de diegovazgonz  
Fecha de Ingreso: octubre-2010
Ubicación: Ourense
Mensajes: 184
Antigüedad: 13 años, 6 meses
Puntos: 11
Respuesta: Lectura de un archivo ascii

Perdón pense que lo Había puesto en e inicio,los quiero en una matriz de tantas filascomo el nº de filas del archivo,y de 7 columnas, para un posterior procesado
  #9 (permalink)  
Antiguo 03/04/2014, 02:00
 
Fecha de Ingreso: junio-2010
Ubicación: Madrid
Mensajes: 620
Antigüedad: 13 años, 10 meses
Puntos: 73
Respuesta: Lectura de un archivo ascii

No me refiero a la notación, ya sé lo que significa, lo que digo es, por ejemplo, la primera línea termina con 7. y la siguiente es 5592730e+00, entonces 7. es la parte entera y el resto es la parte fraccionaria junto con el exponente. Lo que pregunto es si ese número aparece así partido en el archivo original, o está junto (como el resto de números) y en el post aparece partido por cuestión de formato. He trabajado poco con Matlab, pero sí recuerdo que puede ser un tanto peculiar a la hora de guardar matrices en formato ASCII.
  #10 (permalink)  
Antiguo 03/04/2014, 02:47
Avatar de vangodp  
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 10 años, 6 meses
Puntos: 38
Respuesta: Lectura de un archivo ascii

Como tenga que declarar 18 millones de variables multiplicado por 7 se le va caer el pelo XDD
Para eso se necesita un tipo de hardware especial XDDD
Lee aquí: http://www.ciencia-explicada.com/201...ntillas-c.html

has una prueba crea un array de 18 millones de int (y no decir de floats o dobles o peor aun..)y veras los fuegos artificiales del ordenador saltar XDD.
Desde luego va tener que ser en el heap y te puedes aburrir esperando a que cargue eso XDD
Si la tienes que convertir el E+ antes pues....

No se ni si eso entra en la memoria ><
Una cosa es declarar hasta 10 mil variables otra es lo que quieres hacer.
De todos modos no me haga caso y investiga hasta que llegues a una conclusión. Por que de matlab no tengo ni idea de este programa y nunca hice nada parecido. A ver si aprendo algo también :D
¡Suerte!
  #11 (permalink)  
Antiguo 03/04/2014, 04:43
 
Fecha de Ingreso: septiembre-2010
Mensajes: 494
Antigüedad: 13 años, 6 meses
Puntos: 10
Respuesta: Lectura de un archivo ascii

Cita:
Iniciado por Fw190 Ver Mensaje
No me refiero a la notación, ya sé lo que significa, lo que digo es, por ejemplo, la primera línea termina con 7. y la siguiente es 5592730e+00, entonces 7. es la parte entera y el resto es la parte fraccionaria junto con el exponente. Lo que pregunto es si ese número aparece así partido en el archivo original, o está junto (como el resto de números) y en el post aparece partido por cuestión de formato. He trabajado poco con Matlab, pero sí recuerdo que puede ser un tanto peculiar a la hora de guardar matrices en formato ASCII.
Hola Fw190, debe ser cosa del formateo de la salida en cada navegador, porque yo veo las 7 columnas enteras. Vamos, que el último valor no empieza en una línea y acaba en la siguiente.
Creo que el archivo de salida meterá todos los caracteres en la misma línea.

Etiquetas: ascii, matlab
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:37.