Как я могу превратить этот текстовый файл в список в MATLAB? - PullRequest
3 голосов
/ 15 июня 2010

У меня есть текстовый файл, и я хотел бы импортировать его в 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 ]

5 голосов
/ 15 июня 2010

Существует множество способов сделать это. Предполагая, что в файле данных должен быть пробел между 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 .

3 голосов
/ 15 июня 2010

Создайте структуру «персона» с полями «имя», «класс» и «возраст»

Затем используйте fgetl в сочетании с regexp почти так же, как ваш предыдущий вопрос о генах.

...