Matlab - Gestión datos y encabezados en Matlab archivos .txt

 
Vista:
sin imagen de perfil
Val: 12
Ha aumentado su posición en 3 puestos en Matlab (en relación al último mes)
Gráfica de Matlab

Gestión datos y encabezados en Matlab archivos .txt

Publicado por Jaime (9 intervenciones) el 17/11/2018 16:40:07
Hola buenas! Estoy teniendo un problema con un archivo .txt un poco complicado para poder extraer de él ciertos datos.

El archivo tiene 82 lineas iniciales que no me sirven (comenzando por caracteres), y a continuación una tabla como la siguiente:

**********************************************************************************************************
Date__(UT)__HR:MN R.A._(ICRF/J2K)_DEC APmag S-brt delta deldot S-O-T /r S-T-O
**********************************************************************************************************
$$SOE
1979-Aug-31 00:00 338.62879 2.09528 n.a. n.a. 0.01240732271739 -10.4317135 13.7075 /L 166.2738
1979-Aug-31 00:01 338.63132 -2.09484 n.a. n.a. 0.01240313855809 -10.4323120 13.7054 /L 166.2760
...
Mi idea es eliminar las 82 lineas anteriores (fget me imagino, pero no me termina de funcionar el bucle), y a continuación guardar la tabla en una matriz para poder utilizar los datos. (fscan, str2num...). Creo que no termino de entender bien la lógica de Matlab y por ello tengo estos problemas. Si se le ocurre alguna solución a alguien le estaría muy agradecido!

Un saludo y 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
sin imagen de perfil
Val: 12
Ha aumentado su posición en 3 puestos en Matlab (en relación al último mes)
Gráfica de Matlab

Gestión datos y encabezados en Matlab archivos .txt

Publicado por Jaime (9 intervenciones) el 18/11/2018 11:58:00
Buenas Jose, te adjunto el archivo txt y te escribo el código simplón que tengo hasta ahora.

El código que tengo hasta ahora es este :
clc;
clear all;

Enc = 82; % Número de encabezado que no me interesa

File=fopen('Test.txt','r'); %Abro archivo

for i=1:Enc
A=fgetl(File); %elimino encabezado
end

M = fscanf(File,'%10c %d:%d %f %f',[5,inf]); % Columnas que me interesan

M = M';
display (M)

fclose(File)

Creo que el problema está en el fscanf, me gustaría poder utilizar las columnas de la 1-4 y 7-8, realizando el cambio después a numérico para utilizar los datos.

Un saludo y gracias!
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

Gestión datos y encabezados en Matlab archivos .txt

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 19/11/2018 00:28:44
1
2
3
4
5
6
7
8
9
10
11
12
clear all
fid=fopen('Test.txt','r');
i=1;
while ~feof(fid)
linea = fgetl(fid);
    if strfind(linea,'1979')
        GRI{i,1}=linea;
        i=i+1;
    end
end
fclose(fid);
GRI

¿Exactamente que desea extraer? Podría aclarar ese punto.

Saludos
JOSE JEREMIAS CABALLERO
Asesor de Proyectos con Matlab
Servicios de programación matlab


http://matlabcaballero.blogspot.com
https://www.facebook.com/matlabcaballero
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
sin imagen de perfil
Val: 12
Ha aumentado su posición en 3 puestos en Matlab (en relación al último mes)
Gráfica de Matlab

Gestión datos y encabezados en Matlab archivos .txt

Publicado por Jaime (9 intervenciones) el 19/11/2018 01:04:48
Necesitaría las columnas de fecha ( 1 columna ,1979-Aug-31...), tiempos ( 2 columna, 00:00...), ángulos ( 3 y 4 columna, 338.62879 y 2.09528 ) y velocidades ( Columnas 7 y 8, 0.01240732271739 y -10.4317135 ). La idea que tenía era pasar las columnas numéricas a una matriz para poder operar con ellas más adelante, únicamente la columna de fechas podría quedar como un string de caracteres.

Muchas gracias!
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

Gestión datos y encabezados en Matlab archivos .txt

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 19/11/2018 01:31:03
¿como quedaría la matriz que desea?.Podría dar una muestra con los datos de las primeras linea.
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
sin imagen de perfil
Val: 12
Ha aumentado su posición en 3 puestos en Matlab (en relación al último mes)
Gráfica de Matlab

Gestión datos y encabezados en Matlab archivos .txt

Publicado por Jaime (9 intervenciones) el 19/11/2018 11:52:12
Claro! La idea que tengo es la siguiente, tras eliminar las columnas que no me interesan:

A =

1979-Aug-31 00:00 338.62879 2.09528 0.01240732271739 -10.4317135
1979-Aug-31 00:01 338.63132 2.09484 0.01240313855809 -10.4323120
1979-Aug-31 00:02 338.63385 2.09440 0.01239895415865 -10.4329109
1979-Aug-31 00:03 338.63638 2.09397 0.01239476951890 -10.4335102

de la forma que:

A(1,1) = '1979-Aug-31 ' ( variable tipo caracter)
A(1,2) = 0 (variable tipo numérica)
A (1,3) = 338.62879 (variable tipo numérica)
A(2,6) = -10.4323120 (variable tipo numérica)

y así sucesivamente
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

Gestión datos y encabezados en Matlab archivos .txt

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 19/11/2018 13:23:21
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
clear all
fid=fopen('Test.txt','r');
i=1;
while ~feof(fid)
linea = fgetl(fid);
    if strfind(linea,'1979')
        GRI{i,1}=linea;
        i=i+1;
        end
end
fclose(fid);
 a=strfind(GRI{4,1},' ');
 
for i=4: size(GRI,1)
       A{i-3,1}=GRI{i,1}(a(1)+1:a(2)-1);
     A{i-3,2}=GRI{i,1}(a(2)+1:a(3)-1);
     A{i-3,3}=GRI{i,1}(a(7)+1:a(8)-1);
    A{i-3,4}=GRI{i,1}(a(10)+1:a(11)-1);
     A{i-3,5}=GRI{i,1}(a(17)+1:a(18)-1);
     A{i-3,6}=GRI{i,1}(a(18)+1:a(19)-1);
     A{i-3,7}=GRI{i,1}(a(20)+1:a(21)-1);
      A{i-3,8}=GRI{i,1}(a(21)+1:a(22)-1);
    A{i-3,9}=GRI{i,1}(a(22)+1:end);
 end
 
 
GRI
  A


1
>> importar_datos_desde_txt

Con el avance del código ya puede llegar hacer lo que desea.

Saludos
JOSE JEREMIAS CABALLERO
Asesor de Proyectos con Matlab
Servicios de programación matlab


http://matlabcaballero.blogspot.com
https://www.facebook.com/matlabcaballero
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
sin imagen de perfil
Val: 12
Ha aumentado su posición en 3 puestos en Matlab (en relación al último mes)
Gráfica de Matlab

Gestión datos y encabezados en Matlab archivos .txt

Publicado por Jaime (9 intervenciones) el 19/11/2018 13:32:43
Muchas gracias por tu tiempo Jose! me pongo con ello
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
sin imagen de perfil
Val: 12
Ha aumentado su posición en 3 puestos en Matlab (en relación al último mes)
Gráfica de Matlab

Gestión datos y encabezados en Matlab archivos .txt

Publicado por Jaime (9 intervenciones) el 19/11/2018 16:22:56
Ya lo tengo programado! muchas gracias por la ayuda.

Por si le sirve de ayuda a alguien, para realizar el cambio final a datos que pueda manejar numéricamente he utilizado

1
2
3
4
5
for i = 1:length(A)
    for j=3:6
    B(i,j) = str2double(cell2mat(A(i,j)));
    end
end

y posteriormente guardado cada columna en vectores independientes.

De nuevo muchas gracias por la ayuda Jose, ahora comprendo bastante mejor el manejo de lectura y manipulación de datos externos con Matlab.
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