Matlab - Necesito Filtar un archivo .txt en Matlab

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

Necesito Filtar un archivo .txt en Matlab

Publicado por Pablo (2 intervenciones) el 25/03/2019 13:14:29
Buenos días,

Soy nuevo en el foro y hace poco empece a aprender Matlab, me gustaría realizar un programa que al pasarle un archivo .txt con logs del estilo:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16:01:49.207 [PHY] UL 0002 01 003e  92.1 PUCCH: format=2 n=0 cqi=1111
16:01:59.862 [PHY] DL 0005 01 0041 134.0 PDCCH: cce_index=4/12 L=4 dci=0
	hopping_flag=0
	riv=0x46
	mcs1=0
	new_data_indicator1=1
	tpc_command=2
	cyclic_shift=0
	csi_request=0
	rb_alloc_type=0
16:01:49.287 [PHY] UL 0002 01 003e 100.1 PUCCH: format=2 n=0 cqi=1110
16:01:59.863 [PHY] UL 0005 01 0041 133.7 PUSCH: harq=1 type=0 rb_start=2 l_crb=3 CW0: tb_len=7 mod=2 rv_idx=0 retx=0 crc=OK snr=-4.2 epre=-70.7
        0000:  03 98 13 45 00 00 48                              ...E..H
    Link: re@1101960
    Link: rs@1103700

Pero mucho más grande, me gustaría que el programa filtrará por ejemplo el valor de cqi, y se printará por pantalla: cqi=1111 (de todos los cqi que aparecen en el txt que son unos pocos..., el valor puede variar) con el valor correspondiente o si cambio cqi por snr me saque por pantalla snr=-4.2 y el resto de snr del documento txt.
ejemplo:
cqi=1111
cqi=1110
cqi=0000
...

Esto es lo que llevo de código pero me quede un poco atascado:

1
2
3
4
5
6
fdat=fopen('Nombre_Archivo.txt','rt');    % Abre el archivo con todos los logs
    Lineas = {};
    while ~feof(fdat)        % Recorre el archivo hasta el final
        linea=fgetl(fdat);       %Lee cada linea del archivo
       //AQUI NO SABRÍA COMO FILTRAR PARA QUE SOLO ME APAREZCA EL NOMBRE DEL VALOR Y SU VALOR NUMERICO.
    end

Espero que me puedan ayudar, muchisimas gracias por adelantado.

Un saludo.
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: 918
Bronce
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Necesito Filtar un archivo .txt en Matlab

Publicado por Daniel (354 intervenciones) el 25/03/2019 15:06:54
Hola,

El filtrado se tiene que hacer con strfind. Le pasas la línea y el código a buscar devolviendo un vector con las posiciones en las que se encuentra el valor. Luego solamente es necesario recuperar los valores cuando el resultado de strfind no es vacío.

1
2
3
4
5
6
7
linea = '16:01:49.207 [PHY] UL 0002 01 003e  92.1 PUCCH: format=2 n=0 cqi=1111';
key = 'cqI=';
 
pos = strfind(linea, key);
if ~isempty(pos)
    linea(pos + length(key):end)
end

Ten en cuenta que si la cadena que buscas aparece más de una vez en el resultado de strfind es un vector con todas las ocurrencias. En el ejemplo no lo he tenido este punto en cuenta.

Saludos,
Daniel Rodríguez.
Analytics Lane
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

Necesito Filtar un archivo .txt en Matlab

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 26/03/2019 00:59:44
1
2
3
4
5
6
7
8
9
10
11
12
13
clear all
fid=fopen('importacion_de_datos1.txt','r');
i=1;
while ~feof(fid)
linea = fgetl(fid);
    if strfind(linea,'cqi')
        pos=strfind(linea,'cqi');
        GRI{i,1}=linea(pos:end);
        i=i+1;
    end
end
fclose(fid);
GRI

1
2
3
4
> importacion_de_datos1
GRI =
    'cqi=1111'
    'cqi=1110'


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
1
Comentar

Necesito Filtar un archivo .txt en Matlab

Publicado por Pablo (1 intervención) el 29/03/2019 15:12:26
Buenas Jose,

Muchísimas gracias, he podido modificar el programa y ya puedo filtrar todos los valores que me interesan, pero a la hora de hacer gráficas con esos valores no me deja, ¿sabes alguna manera de hacer las gráficas? Uso el plot pero no me lo permite, creo que es porque lo capta como si fuera un string y un número.

Muchas gracias,

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

Necesito Filtar un archivo .txt en Matlab

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 29/03/2019 16:39:32
¿que es lo desea graficar exactamente?. Podria poner la parte de su codigo donde usa plot para poder hacer las modificaciones pertinentes.
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: 4
Ha disminuido su posición en 25 puestos en Matlab (en relación al último mes)
Gráfica de Matlab

Necesito Filtar un archivo .txt en Matlab

Publicado por Pablo (2 intervenciones) el 04/04/2019 16:50:45
Buenas Jose,

Mi código es el siguiente:
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
29
30
clear all
fid=fopen('prueba2moviles.txt','r');
i=1;
j=1;
while ~feof(fid)
linea = fgetl(fid);
    if strfind(linea,'40')
    if strfind(linea,'0064')
        CQI1{i,1}=linea(19:20);
        SNR1{i,1}=linea(45:49);
        BITRATE1{i,1}=linea(40:44);
        i=i+1;
    end
    end
    if strfind(linea,'38')
    if strfind(linea,'0062')
        CQI2{j,1}=linea(19:20);
        SNR2{j,1}=linea(45:49);
        BITRATE2{j,1}=linea(40:44);
        j=j+1;
    end
    end
end
fclose(fid);
CQI1
CQI2
SNR1
SNR2
BITRATE1
BITRATE2
abró el siguiente archivo:

1
2
3
4
5
6
7
8
9
10
11
UE_ID  CL RNTI C cqi ri  mcs retx txok brate  snr puc1  mcs rxko rxok brate    turbo phr  pl   ta
   40 001 0064 1  15  1 27.0    0  440  137k 16.7 12.8 14.5   24 1960 5.13M  1/1.4/6  33  40  0.0
   38 001 0062 1  15  1 26.8    0  241 1.70M 19.5 -8.6  8.5    0   63 37.0k  1/1.0/2  21  63  0.0
   40 001 0064 1  15  1 27.0    0  547  169k 15.1 14.3 16.9    6 1985 6.39M  1/1.2/6  35  40  0.0
   38 001 0062 1  15  1 27.0    0    4 1.23k 14.2 31.5  8.2    0   11 5.02k  1/1.0/1  24  61  0.0
   40 001 0064 1  15  1 27.0    0  350  111k 13.6  9.9 17.6   20 1204 4.13M  1/1.7/6  40  42  0.0
   38 001 0062 1  15  1 27.5    0    4 1.32k 17.0 44.9  7.3    0    7 3.26k  1/1.0/1  21  60  0.0
   40 001 0064 1  15  1 27.0    0  432  137k 15.9 10.8 15.1   16 1669 4.61M  1/1.4/6  38  41  0.0
   38 001 0062 1  15  1 27.3    0   11 5.42k  9.6 43.9  6.9    0   17 10.0k  1/1.0/1  22  61  0.0
   40 001 0064 1  15  1 27.0    0  491  154k 13.0  9.8 15.6   20 1962 5.63M  1/1.4/6  36  40  0.0
   38 001 0062 1  15  1 26.8    0  135  988k 20.3  7.4  7.5    0   44 27.9k  1/1.0/3  19  61  0.0

Se me guardan los valores en las variables:
CQI1
CQI2
SNR1
SNR2
BITRATE1
BITRATE2
pero si intento hacer algún plot o plot2 o plot3 etc... no me lo permite, y es que creo que al usar un string no me lo coge como número, ¿Habria alguna manera de poder pasar del formato cell a matrix o vector?
Ya que estas variables son 156x1 cell y 247x1 cell y para usar el plot solo me permite con matrices o vectores, o hay alguna función para plotear las cells? Me gustaría ver de manegra gráfica como varian estas variables en cada linea.

Muchas gracias,

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