Импорт нескольких файлов одновременно в Matlab - PullRequest
0 голосов
/ 07 октября 2019

большое спасибо за прочтение;

Проблема : У меня есть вопрос относительно импорта в Matlab. Я пытаюсь создать ветряную турбину. Для этого мне нужно прочитать много разных текстовых файлов, содержащих координаты x и y, определяющие форму профиля (все текстовые файлы находятся в папке), и проанализировать каждый из них по очереди.

Моя первая попытка была

%% Reading the datafile 
%Opening the filename in the format given to us by UIUC 
fid=fopen('Filename',r);

%Skipping over the first lines (asterisk)
fscanf(fid,'%*s %*s %*s \n %*s %*s ',[1,5]);

%Reading over the Values of the columns
data=fscanf(fid,'%f %f  \n',[2, inf]);

%Extracting the different types of data from the datafile
x=data(1,:);
y=data(2,:); 

У такого кода есть две проблемы:

Первая проблема заключается в том, что в первом столбце есть переменное количество слов, которые мне нужно удалить

Вопрос1: Есть ли способ удалить только первый столбец данных из базы данных или мне нужно удалить все значения?

Вторая проблема заключается в том, что у меня есть 1550 таблиц для просмотра и изменения имени файла 1550время будет очень утомительным и отнимает много времени.

Вопрос 2: Есть ли способ открывать все файлы из папки, по одному, за один раз?

1 Ответ

0 голосов
/ 07 октября 2019

Простой способ чтения табличных файлов - использовать readtable. Например, если вы знаете, что в вашем файле есть 2 строки заголовка, которые вы хотите пропустить, вы можете просто запустить

t = readtable('my_file', 'HeaderLines', 2);

Это, однако, означает, что вы работаете с таблицей, а не с массивом MATLAB,Если вы предпочитаете хранить массив, вы можете просто пропустить таблицу через table2array (пример ниже).

С точки зрения работы с большим количеством файлов, предположим, что в вашем рабочем каталоге есть следующие файлы:

a1.txt   a3.txt   b1.txt   ...
a2.txt   a4.txt   b2.txt

Сначала вы должны получить массив, содержащий все имена файлов, а затем выполнить итерацию по этому массиву. Один из способов сделать это был бы следующим:

all_files = dir('*.txt') % Use a suitable glob to match your filenames
for i = 1:length(all_files)
    data = table2array(readtable(all_files(i).name, 'HeaderLines', 2);
    % do stuff
end

В качестве альтернативы, если вы хотите прочитать файлы вручную:

all_files = dir('*.txt') % Use a suitable glob to match your filenames
for i = 1:length(all_files)
    fid = fopen(all_files(i).name, 'r');
    % do stuff
    fclose(fid);
end

Обратите внимание, что код предполагает, что все файлы данных имеюттот же формат.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...