Matlab - Duda lectura fichero formato

 
Vista:

Duda lectura fichero formato

Publicado por Nbb (10 intervenciones) el 25/03/2011 13:25:33
Hola:
Me gustaria almacenar los datos del siguiente fichero en una matriz:

Fichero:
30.000000 40.00 230.000000 40.00
230.000000 47.00 1000.000000 47.00


Cada linea consta : Numero /tabulador/ Numero /4 espacios/ Numero /tabulador/ Numero

Me gustaría almacenar los datos de la siguiente manera en la matriz:

M= (30.000000 40.00 ;
230.000000 40.00;
230.000000 47.00;
1000.000000 47.00)

Alguna sugerencia por favor, que todavía no encontré la forma de que quedara así.



Gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de JOSE JEREMIAS CABALLERO
Val: 6.975
Oro
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Duda lectura fichero formato

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 25/03/2011 15:52:13
Bueno aquí esta pedido , si hay dudas escribes:
esta información en un archivo de texto llamado data.txt

30.000000 40.00 230.000000 40.00
230.000000 47.00 1000.000000 47.00

%Ahora el programa en matlab es el siguiente la cual tiene el nombre de importandodatatxt.m
clear,
fid=fopen('data.txt','r');
M=fscanf(fid,'%f %f',[2,inf]);
fclose(fid);
M=M


%EJECUCION EN LA VENTANA DE COMANDOS ES:
>> importandodatatxt
M =

30 40
230 40
230 47
1000 47


Saludos: José Jeremías Caballero.
ASESOR EN PROYECTOS Y TESIS EN DONDE DE NECESITA MATLAB
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Duda lectura fichero formato

Publicado por Nbb (10 intervenciones) el 25/03/2011 17:12:02
Hola:

Es que mi problema se me olvido de especificarte, que antes de esas lineas de datos hay otras que quiero ignorar, y haciendolo de la forma de lo que me dices no funciona.

El fichero completo entonces tendria este formato:

linea a ignorar
linea a ignorar
linea a ignorar
linea a ignorar
linea a ignorar
linea a ignorar
[DATA]
30.000000 40.00 230.000000 40.00
230.000000 47.00 1000.000000 47.00

Las dos líneas del final constan de : Numero /tabulador/ Numero /4 espacios/ Numero /tabulador/ Numero

Yo lo voy leyendo linea a linea hasta que llego a la parte de los datos, y lo que no sé es como leyendolo línea a línea meterlo tal y como dije en el primer mensaje.

Mi código tiene la siguiente forma:


fich=fopen(ruta_completa_limites,'r');

if fich~=-1

datos=0; %Variable que permanecerá a cero mientras se
%estan leyendo las líneas que no me interesan,en
%el momento que empiecen a aparecer los datos que me interesan
%la variable se pondrá a 1

while ~feof(fich)

%Leo línea a línea
linea=fgets(fich);

if strncmp(linea,'[DATA]',6)==1
%A partir de esta línea empiezan los datos
%que me interesan para almacenar relacionados con los límites
datos=1;
end

%Almaceno datos que me interesan:

if datos==1
if strncmp(linea,'[DATA]',6)~=1
%%%%codigo necesario para almacenar datos en matriz de la forma del
%%%%del primer mensaje
end
end
end

fclose(fich);
end

Siento no haber sido precisa en mi pregunta.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de JOSE JEREMIAS CABALLERO
Val: 6.975
Oro
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Duda lectura fichero formato

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 25/03/2011 20:20:14
"Es que mi problema se me olvido de especificarte, que antes de esas lineas de datos hay otras que quiero ignorar, y haciendolo de la forma de lo que me dices no funciona.".

Por eso es que justamente debes plantear bien tu pregunta. El programa que hecho funciona bien para el problema que planteas en el foro. En programacion hay que ser muy especifico que es lo queremos exactamente, caso contrario no obtendremos lo que queremos. Si deseas mandame tu data a mi correo para ver exactamente como es tu data y poder ayudarte.
Saludos: JOSE JEREMIAS CABALLERO
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Duda lectura fichero formato

Publicado por Nbb (10 intervenciones) el 26/03/2011 00:04:14
Si, soy consciente que hay que ser precisa, por propia experiencia.Gracias por poner interés en la resolución de mi problema. Lo resolví saltándome las lineas que quería ignorar del principio, almacené las líneas que me interesaban del final en un string e hice un sscanf para extraer los datos y almacenarlos en una matriz.

Gracias y un saludo,
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de JOSE JEREMIAS CABALLERO
Val: 6.975
Oro
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Duda lectura fichero formato

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 26/03/2011 00:09:32
Serias tan amable de mostrarnos como lo hicistes, seria de muy util para los demas personas que tengan dudas sobre datas semenjantes al tuyo.
Saludos. Jose
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Duda lectura fichero formato

Publicado por Nbb (10 intervenciones) el 26/03/2011 14:42:19
El fcihero es como este:

linea a ignorar
linea a ignorar
linea a ignorar
linea a ignorar
linea a ignorar
linea a ignorar
[DATA]
30.000000 40.00 230.000000 40.00
230.000000 47.00 1000.000000 47.00

Y el código para almacenarlo tal y como preguntaba es el siguiente:

%Abrimos fichero .lim para la lectura
fich=fopen(ruta,'r');

%Si no hubo errores en la apertura del fichero:
if fich~=-1

datos=0; %Variable que permanecerá a cero mientras se
%esté leyendo la cabecera del fichero de límites,en
%el momento que empiecen a aparecer los datos de los
%límites(frecuencia, tensión)la variable se pondrá a 1
Datos=''; %Contendrá parte final del fichero con los datos de interes

while ~feof(fich)
%Leo línea a línea
linea=fgets(fich);
if strncmp(linea,'[DATA]',6)==1
%A partir de esta línea empiezan los datos de interes
datos=1;
end

%Almaceno datos de interes
if datos==1
if (strncmp(linea,'[DATA]',6)~=1)
Datos=[Datos,linea];
linea=fgets(fich);
Datos=[Datos,linea];
break;
end
end
end
fclose(fich);
D=sscanf(Datos,'%f %f',[2,inf]);
setappdata(0,'Limite',D);


end
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar