Esta página aún no se ha traducido para esta versión. Puede ver la versión más reciente de esta página en inglés.

Importar bloque de datos numéricos desde archivo de texto

Este ejemplo muestra cómo leer datos numéricos organizados en bloques en un archivo de texto. Cada bloque dentro del archivo puede tener un formato diferente. Puede leer todos los bloques como matrices de celdas, un bloque a la vez, utilizando.textscan

Descripción del formato de archivo

La información del archivo de texto de ejemplo, es el resultado de una prueba de calidad de comunicación de red inalámbrica.test80211.txt El archivo de ejemplo consta de cuatro líneas de introducción seguidas de varios bloques de datos. Cada bloque representa un entorno diferente (por ejemplo, móvil, interior, exterior) y tiene el siguiente formato:

  • Dos líneas de cabecera de Descripción

  • El texto, seguido de un valor numérico,Num SNR=m

  • Datos numéricos organizados en una tabla de columnas y un número arbitrario de filas (los datos están delimitados por comas.)m

  • El texto, que denota el final del bloque*EOB

Por ejemplo, un bloque de datos tiene un formato como este:

* Indoor2

* Prueba SNR vs no

Num SNR = 3

,-5.00 E + 00,-4.00 E + 00,

1.00 E + 00, 3.32 E-07, 9.12 E-07

2.00 E + 00, 1.49 E-07, 2.44 E-07

3.00 E + 00, 6.04 E-07, 2,53 E-07

4.00 E + 00, 1.53 E-07, 4.25 E-07

5.00 E + 00, 1.82 E-07, 1,83 E-07

6.00 E + 00, 6.27 E-07, 8.21 E-07

7.00 E + 00, 9.10 E-08, 1.53 E-08

8.00 E + 00, 8.73 E-07, 6.45 E-07

9.00 E + 00, 4.40 E-07, 1.33 E-07

* EOB

Los datos numéricos representan tasas de error en un rango de niveles de ruido para una serie de pruebas independientes. La primera columna indica el número de prueba. Para ver todo el archivo de muestra, escriba en la línea de comandos:

open test80211.txt

Abrir archivo de texto para leer

Abra el archivo y cree un identificador de archivo.

fileID = fopen('test80211.txt','r');

Lea las líneas de introducción

Lea las cuatro líneas introductorias, que contienen texto delimitado por un carácter de nueva línea. Devuelve una matriz de celdas de 1 por 1 que contiene una matriz de 4 por 1 de vectores de caracteres.textscan

Intro = textscan(fileID,'%s',4,'Delimiter','\n')
Intro = 1x1 cell array
    {4x1 cell}

Ver el contenido de la primera celda.

disp(Intro{1})
    '*CCX'     '*CCX WiFi conformance test'     '*CCX BER Results'     '*CCX' 

Lea cada bloque

Para cada bloque, queremos leer un encabezado, el valor numérico, los encabezados de columna para los datos y luego los propios datos.m En primer lugar, inicializar el índice de bloque.

Block = 1;

Lea cada bloque de datos en un bucle.while El bucle se ejecuta hasta que se alcanza el final del archivo y se devuelve.~feoffalse La función devuelve los datos de cada bloque como una matriz de celdas denominada.textscanInputText Convierta cada matriz de celdas en una matriz numérica utilizando y almacene la matriz numérica en una matriz de celdas denominada.cell2matDatos Una matriz de celdas permite el almacenamiento de diferentes bloques de tamaño.

while (~feof(fileID))                               % For each block:                                 fprintf('Block: %s\n', num2str(Block))           % Print block number to the screen    InputText = textscan(fileID,'%s',2,'delimiter','\n');  % Read 2 header lines    HeaderLines{Block,1} = InputText{1};    disp(HeaderLines{Block});                        % Display header lines        InputText = textscan(fileID,'Num SNR = %f');     % Read the numeric value                                                      % following the text, Num SNR =    NumCols = InputText{1};                          % Specify that this is the                                                      % number of data columns        FormatString = repmat('%f',1,NumCols);           % Create format string                                                     % based on the number                                                     % of columns    InputText = textscan(fileID,FormatString, ...    % Read data block       'delimiter',',');        Data{Block,1} = cell2mat(InputText);                  [NumRows,NumCols] = size(Data{Block});           % Determine size of table    disp(cellstr(['Table data size: ' ...       num2str(NumRows) ' x ' num2str(NumCols)]));    disp(' ');                                       % New line        eob = textscan(fileID,'%s',1,'delimiter','\n');  % Read and discard end-of-block marker     Block = Block+1;                                 % Increment block index end
Block: 1     '*       Mobile1'     '*       SNR Vs test No'      'Table data size: 30 x 19'    Block: 2     '*       Mobile2'     '*       SNR Vs test No'      'Table data size: 30 x 9'    Block: 3     '*       Mobile3'     '*       SNR Vs test No'      'Table data size: 31 x 15'    Block: 4     '*       Mobile4'     '*       SNR Vs test No'      'Table data size: 28 x 19'    Block: 5     '*       Mobile5'     '*       SNR Vs test No'      'Table data size: 32 x 18'    Block: 6     '*       Mobile6'     '*       SNR Vs test No'      'Table data size: 30 x 19'    Block: 7     '*       Mobile7'     '*       SNR Vs test No'      'Table data size: 30 x 11'    Block: 8     '*       Mobile8'     '*       SNR Vs test No'      'Table data size: 20 x 18'    Block: 9     '*       Indoor0'     '*       SNR Vs test No'      'Table data size: 9 x 3'    Block: 10     '*       Indoor1'     '*       SNR Vs test No'      'Table data size: 22 x 6'    Block: 11     '*       Indoor2'     '*       SNR Vs test No'      'Table data size: 25 x 3'    Block: 12     '*       Indoor3'     '*       SNR Vs test No'      'Table data size: 21 x 18'    Block: 13     '*       Outdoor1'     '*       SNR Vs test No'      'Table data size: 20 x 18'    Block: 14     '*       Outdoor2'     '*       SNR Vs test No'      'Table data size: 23 x 3'    Block: 15     '*       Outdoor3'     '*       SNR Vs test No'      'Table data size: 22 x 18'    Block: 16     '*       Outdoor4'     '*       SNR Vs test No'      'Table data size: 21 x 18'    Block: 17     '*       Outdoor5'     '*       SNR Vs test No'      'Table data size: 18 x 5'    

Cerrar archivo de texto

fclose(fileID);

Número total de bloques

Determine el número de bloques en el archivo.

NumBlocks = Block-1
NumBlocks = 17 

Ver datos numéricos

Visualice los datos numéricos en uno de los bloques utilizando la notación científica corta.

Primero, almacene el formato de visualización de salida actual de la ventana de comandos.

user_format = get(0, 'format');

Cambie el formato de visualización a notación científica corta.

format shortE

Visualice las líneas de cabecera para el noveno bloque y los datos numéricos.

Block = 9; disp(HeaderLines{Block});
    '*       Indoor0'     '*       SNR Vs test No' 
fprintf('SNR        %d        %d\n',Data{Block,1}(1,2:end))
SNR        -7        -6 
disp(Data{Block,1}(2:end,2:end));
   9.0600e-07   6.7100e-07    3.1700e-07   3.5400e-07    2.8600e-07   1.9600e-07    1.4800e-07   7.3400e-07    3.9500e-08   9.6600e-07    7.9600e-07   7.8300e-07    4.0000e-07   8.8100e-07    3.0100e-07   2.9700e-07 

Restaure el formato de visualización de salida original de la ventana de comandos.

set(0, 'format', user_format);

Consulte también

Temas relacionados