Как я могу превратить этот текстовый файл в список в MATLAB?
У меня есть текстовый файл, и я хотел бы импортировать его в MATLAB и сделать его списком:
Person1
name = steven
grade = 11
age= 17
Person2
name = mike
grade = 9
age= 15
Person3
name = taylor
grade = 11
age= 17
Есть несколько сотен записей, подобных этим выше. Каждый разделен пустой строкой. Я думал, что смогу отсканировать текст и превратить информацию между каждой пустой строкой в элемент списка. Я также хотел бы иметь возможность искать каждого человека по имени, когда у меня есть список, подобный приведенному ниже.
Я хочу что-то вроде:
x = [Person1 Person2 Person3
name = steven name = mike name = taylor
grade = 11 grade = 9 grade = 11
age = 17 age = 15 age = 17]
Это кажется очень прямым, но у меня были проблемы с этим до сих пор. Я могу что-то упустить. У кого-нибудь есть идеи или советы?
2 ответа
Есть много способов, которыми вы могли бы потенциально сделать это. Предполагая, что между age
а также =
в файле данных (как и в других полях) вы можете использовать TEXTSCAN:
fid = fopen('people.txt','r'); %# Open the data file
peopleData = textscan(fid,'%s %*s %s'); %# Read 3 columns of strings per row,
%# ignoring the middle column
fclose(fid); %# Close the data file
Затем вы можете обработать данные следующим образом, чтобы создать структурный массив размером 3 на 1 с полями. 'name'
, 'grade'
, а также 'age'
:
nFields = 3; %# Number of fields/person
fields = peopleData{1}(2:nFields+1); %# Get the field names
peopleData = reshape(peopleData{2},nFields+1,[]); %# Reshape the data
peopleData(1,:) = []; %# Remove the top row
peopleData(2:nFields,:) = cellfun(@str2double,... %# Convert strings to numbers
peopleData(2:nFields,:),...
'UniformOutput',false);
x = cell2struct(peopleData,fields,1); %# Put data in a structure
Выше используются функции RESHAPE, CELLFUN, STR2DOUBLE и CELL2STRUCT.
Создайте структуру 'person' с полями 'name', 'grade' и 'age'
Тогда используйте fgetl
в комбинации с regexp
почти так же, как ваш предыдущий вопрос о генах.