Линия расщепления на пустом месте в более старых версиях октав - PullRequest
0 голосов
/ 28 сентября 2018

Я анализирую текстовый файл ASCII, используя строчно-ориентированный ввод:

    fid = fopen("myFileName", "r");    % open data file
    fgetl(fid);                        % get header variables

Для следующей строки файла я хочу проанализировать его и разбить строку, где есть один или несколько пробелов(т. е. '\ s +').Более новые версии Octave имеют опцию 'split' для встроенной команды regexp.Тем не менее, я использую версию Octave 3.4.3, и у меня нет возможности перейти на что-то более новое на данный момент.Параметр 'split' не распознается, поэтому я ищу обходной путь.Команда strsplit, по-видимому, не позволяет использовать fgetl(fid) для строкового аргумента, например:

    myVar = strsplit(fgetl(fid), "\s*", "delilmetertype", "regularexpression")

Есть ли что-то еще, что может работать в этом случае?

1 Ответ

0 голосов
/ 29 сентября 2018

Функция regexp поддерживает тип вывода 'match', даже если вернуться к версии 3.4 Octave.Поэтому вместо использования шаблона пробела (\s+) в качестве разделителя используйте regexp, чтобы вернуть список совпадений для любого количества непробельных символов (\S+).

Например

str = 'This is a string with       some space    characters';
m = regexp(str, '(\S+)', 'match')

Параметр 'match' совпадает с четвертым позиционным возвращаемым значением, поэтому следующий эквивалентный вызов также работает

[~, ~, ~, m] = regexp(str, '(\S+)')
...