es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo puedo importar una tabla en MATLAB con filas de pie de página?

Tengo un archivo de texto con líneas de encabezado encima de la tabla y debajo de la tabla hay una línea en blanco y luego una tabla con estadísticas resumidas de la tabla. Manejar las líneas de encabezado es fácil ya que la mayoría de las funciones estándar tienen una opción para eso (es decir, readtable). La longitud del archivo no siempre es la misma. El problema con readtable es que la tabla del pie tiene menos columnas que la tabla principal, por lo que la función no puede leer esas líneas y devuelve un error.

Este es el error que obtengo con readtable:

Error usando readtable (línea 216)
La lectura falló en la línea 2285. Todas las líneas de un archivo de texto deben tener el mismo número de delimitadores. La línea 2285 no tiene delimitadores, mientras que las líneas anteriores tienen 24.

Nota: readtable detectó los siguientes parámetros:
‘Delimiter’, ‘\t’, ‘HeaderLines’, 21, ‘ReadVariableNames’, true, ‘Format’, ‘%T%f%f%f%q%f%f%f%f%f%f%q%f%f%f%f%f%f%f%f%f%f%f%f%f’

Aquí está la solución alternativa que se me ocurrió:

dataStartRow = 23;
numRows = length(readmatrix(filePath, 'NumHeaderLines', 0));
dataEndRow = numRows - 8;

opts = detectImportOptions(filePath);
opts.DataLines = [dataStartRow, dataEndRow];
dataTable = readtable(filePath, opts);

Esto funciona, pero tengo otro archivo con un número diferente de filas de pie y no sé cómo manejar esto sin codificar el número de líneas de pie.

He considerado usar fgetl y leer líneas una por una para determinar cuándo dejar de agregar a la tabla, pero eso parece muy ineficiente. ¿Cómo puedo importar esta tabla con un número desconocido de líneas de tabla y un número desconocido de líneas de pie?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Una posible solución podría ser utilizar la función importdata en lugar de readtable para importar el archivo de texto. Esta función lee el archivo en una estructura con campos para el encabezado del archivo, los datos y el pie de página. Luego podemos extraer los datos requeridos utilizando los índices de campo.

    Aquí hay un ejemplo de código:

    % Definir la ruta del archivo
    filePath = 'mydata.txt';
    
    % Importar el archivo utilizando importdata
    fileData = importdata(filePath);
    
    % Extraer la tabla de datos del archivo
    dataTable = fileData.data;
    
    % Extraer los nombres de columna del encabezado
    headerRows = fileData.textdata(1:22,:); % asumiendo 22 filas de encabezado
    columnNames = strsplit(headerRows{end}, '\t');
    
    % Establecer los nombres de columna para la tabla de datos
    dataTable = array2table(dataTable, 'VariableNames', columnNames);
    
    % Extraer la tabla de estadísticas resumen del pie de página
    footerRows = fileData.textdata(end-7:end,:);
    footerTable = cell2table(footerRows, 'VariableNames', columnNames(1:end-6));
    
    % Mostrar las tablas de datos y pie de página
    disp(dataTable);
    disp(footerTable);
    

    En este código, utilizamos la función importdata para leer el archivo en la estructura fileData. Extraemos la tabla de datos de la estructura utilizando el campo .data y establecemos los nombres de columna utilizando la última fila del encabezado (asumiendo 22 filas de encabezado en este ejemplo). Luego, extraemos la tabla de estadísticas resumen del pie de página utilizando las últimas 8 filas del campo .textdata y creamos una tabla utilizando la función cell2table. Finalmente, mostramos tanto la tabla de datos como la tabla del pie de página para verificar.

    Este enfoque debería funcionar incluso si el número de filas del pie de página varía entre archivos. El código asume que el número de filas del encabezado es fijo (22 en este ejemplo), pero esto puede ajustarse según sea necesario.

Comments are closed.