textscan странное поведение в Matlab

У меня есть код, который я пытаюсь запустить в Matlab, он выдает ошибку в функции textscan, так как не может разбить строку на разделитель, хотя я уверен, что код работает в других версиях Matlab (на другом компьютере )

>> a='ahmed;mohamed'

a =

ahmed;mohamed

>> b = textscan(a, '%s;%s', 'Delimiter', ';')

b = 

    {1x1 cell}    {0x1 cell}

>> b{1}

ans = 

    'ahmed'

>> b{2}

ans = 

   Empty cell array: 0-by-1

Может кто-нибудь объяснить, почему это происходит? есть ли недавние изменения в функции textscan? я использую матлаб 2013


person Ahmed Kotb    schedule 17.06.2013    source источник


Ответы (1)


Это работает:

str = 'ahmed;mohamed';
C = textscan(str, '%s', 'Delimiter',';', 'CollectOutput',true);
C = C{1};

с участием:

>> C
C = 
    'ahmed'
    'mohamed'
person Amro    schedule 17.06.2013
comment
вы не должны помещать разделитель внутри строки формата, поэтому вы также можете использовать: '%s %s' (без точки с запятой). Предыдущий работает, потому что formatSpec применяется повторно (т.е. третий входной аргумент N равен Inf, если он не указан) - person Amro; 18.06.2013
comment
В дополнение к ответу Амро, причина, по которой исходный код не работал, заключается в том, что textscan не требует указания разделителя в поле FORMAT. Функция предполагает, что разделитель(и) встречается между последовательными совпадениями шаблона. - person cjh; 18.06.2013
comment
Большое спасибо, очевидно, они изменили внутреннюю реализацию между версиями, и у меня был немного старый код. - person Ahmed Kotb; 18.06.2013
comment
исключение составляет спецификатор %c, который считывает один символ, включая разделители. - person Amro; 18.06.2013