2017-02-01 2 views
2

У меня есть файл, как это:прочитать файл ASCII на основе своих заголовков Matlab

ID LHW dms 
1 105.28 1 
2 357.01 0 
3 150.23 3 

Мой вопрос, если это возможно, чтобы получить одно значение столбца в заголовке? Я могу, конечно, получить LHW по его позиции в столбце, 2, но я хотел бы получить его, просто прочитав LHW.

Причина в том, что у меня есть два больших набора данных (около 50 000 rows x 80 columns) с одинаковыми переменными, но в разных положениях. Если бы я мог получить правильное значение столбца на основе его заголовка, это сэкономит много времени программирования.

Заранее благодарен!

ответ

2

Я не знаю о существовании какой-либо встроенной функции для ваших целей. Но мы можем создать его вручную. Например:

function [result] = readByName(A, filename) 
if ~ischar(A) % check input parameter (you can delete this sectionif you want) 
    display('Error: First argument must be a char array!'); 
    massiv = -1; 
    return 
end 

fileID = fopen(filename);      % open file 
title = textscan(fileID, '%s',3);    % read title 
number = cellfun(@(x) strcmp(x,A), title{1}); % find wanted column 

if ~any(number) % one more check 
    display('Error: wrong name of the first argument'); 
    massiv = -1; 
    return 
end 

data = textscan(fileID, '%f %f %f');  % read data 
result = data{ number==1 };    % get wanted column 
end 

Пример его реализации:

readByName('ID', 'yourdata.txt') 

Ответ:

ans = 

1 
2 
3 

Теперь вы можете загружать данные только по имени. Теперь вам нужно немного изменить его, если у вас будут столбцы с одинаковым именем.

Надеюсь, это поможет!

+0

Большое спасибо! Однако я просто получаю «Пустую матрицу: 0-на-1». Может быть, я неверно истолковал файл данных форматирования? – KGB91

+0

Я думаю, проблема в том, что ваш реальный файл немного отличается: мой алгоритм работает (я проверил его на примере данных). Вам просто нужно адаптировать его к вашим данным: 1. Если вы используете другое количество столбцов, верните строку 'data = textscan (...)' string. 2. попробуйте использовать отладчик и найдите, где именно он пойдет не так. 3. Если все еще есть ошибка, поместите здесь свой код, я постараюсь вам помочь –

+0

Я решил его, заменив последнюю строку в вашей функции (reslut = data ...) на [DataColumn] = find (number == 1) – KGB91

Смежные вопросы