2016-02-09 4 views
1

Я использовал этот код для чтения данных из открытого текста файла:Cell на Чар в MATLAB не работает

[race sex age namef] = textread('Fusion.txt', '%s %s %d %s'); 

Я конвертировать race от cell к char с помощью: race = char(race); сделать сравнение строк (if(strcmp(race(k),'W')==1)) и работает, как ожидалось. Мне также необходимо, чтобы namef - char, но когда я это делаю, MATLAB возвращает 0 для каждого элемента namef.

Вот пример моего файла:

W M 50 00001_930831_fb_a.ppm 
W M 30 00002_930831_fa.ppm 
W M 30 00002_930831_fb.ppm 
W M 30 00002_931230_fa.ppm 
W M 30 00002_931230_fb.ppm 
W M 31 00002_940128_fa.ppm 
W M 31 00002_940128_fb.ppm 

Почему это происходит?

ответ

2

С вашего вопроса неясно, требуется ли преобразование в char. За то, что вы хотите сделать, это ОК, чтобы сравнить с отдельными элементами клеток race или namef:

strcmp(race{k}, 'W') 
strcmp(named{k}, '00002_930831_fa.ppm') 

Поскольку strcmp работает на cell массивов строк, а также, вы можете также сделать такие вещи, как strcmp(race, 'W').

+0

спасибо, теперь он работает !!! Мне нужно сделать это: imshow (strcat ('esame \ normalized \ normalized \', namef {1})); до того, как я использовал namef (1), а не namef {1} спасибо –

2

Поскольку все, что вы делаете, должно работать нормально, у вас, вероятно, отсутствует одно: последний столбец в вашем файле имеет несколько символов, поэтому вам нужно получить доступ ко всей строке получаемой строки матрицы, а не один элемент:

race = char(race); %// cell to character array of size [N,1] 
namef = char(namef); %// cell to character array of size [N,M], padding added 
for k=1:size(race,1) 
    condition_col1 = strcmp(race(k),'W')==1; 
    condition_col4 = strcmp(strtrim(namef(k,:)),'00002_930831_fa.ppm'); 
    %// ... code goes here 
end 

Если вы используете namef(k), вы получите первый символ каждой строки, т.е. '0'. Итак, namef(k,:) - мое главное.

Также обратите внимание, что я добавил strtrim к условию: обращение к массиву символов приведет к посылке полей к длине самого длинного элемента (так как матрицы должны быть прямоугольными).