strfind для строкового массива в MATLAB - PullRequest
0 голосов
/ 08 ноября 2011

У меня есть массив ячеек x, и каждая строка которого является строковым массивом. Например,

>>ab = x{2};
>>ab
ans =
  910        Flow’S Equation

Ясно, что эта строка имеет шаблон: числовое значение и текстовая строка разделены пробелами. Что касается этого примера, когда я печатаю

>> ab(2)
  ans =
    1
>> ab(3)
  ans =
    0
>> ab(6)
  ans =
    F

В моем коде мне нужно автоматически проверять начальную позицию текстовой строки, которая соответствует «F», и конечную позицию числового значения, которая соответствует «0». Я использую

>> x = strfind(ab, ' ');

В этом примере я ожидаю, что это даст мне позиции "пробела" как

4 5 12

Вместо этого он просто дает мне 12 без вывода 4 и 5

Я думаю, что проблема в том, что четвертая и пятая записи ab не являются "пробелами". Как я могу узнать, что это такое? Когда я набираю

>> ab(4)
 ans =

Вывод - ничто, так же как и "пробел"?

Ответы [ 2 ]

2 голосов
/ 09 ноября 2011

Чтобы узнать, что такое char ab(4), преобразуйте его в числовую форму как

double( ab(4) )

. Для double(ab(4))=9 это TAB.Если ваша строка ASCII, вы можете проверить управляющие символы ASCII и печатные символы ASCII для сопоставления.

Однако, чтобы найти начало текстовой строкилучше использовать regexp:

string_begin = min( regexp(ab, '[^\d\s]') )

regexp(ab, '[^\d\s]') возвращает местоположения всех символов, которые не являются ни числами, ни пробелами, и минимум мест долженбыть там, где начинается текст.

0 голосов
/ 08 ноября 2011

Попробуйте:

double(ab(4))

Это, вероятно, непечатаемый символ ascii

Другой способ увидеть, что находится в переменной:

sprintf('[%d]',sprintf('Some\n\r\ttext'))
ans =

[83][111][109][101][10][13][9][116][101][120][116]

или вваш случай

ans =

sprintf('[%d]', ab );

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

regexp(x{2},'[\t ]','split') 
...