регулярное выражение не работает, как ожидалось в октаве - PullRequest
1 голос
/ 15 февраля 2020

Я скачал набор данных и набор инструментов NYU Depth V2 с здесь . В наборе инструментов есть скрипт с именем get_synched_frames.m. У меня нет Matlab, поэтому я попытался запустить его в Octave. К сожалению, это не работает, как ожидалось.

Строка

% Faster than matlab's Dir function for big directories and slow
% distributed file systems...
files = regexp(ls(sceneDir), '(\s+|\n)', 'split');

дает только

files =
{
  [1,1] = a-1300302776.479149-3987628315.dump
}

, но ls(sceneDir) показывает все файлы в каталоге. Кто-нибудь испытывал это?

1 Ответ

4 голосов
/ 15 февраля 2020

Разница, вероятно, не в regexp, а в возвращаемом значении ls. ls не работает одинаково в Matlab и Octave при захвате его возвращаемого значения. Matlab ls возвращает вектор строки символов (одна строка в виде символа) с несколькими файлами, перечисленными в нем в виде многострочной строки со встроенными символами новой строки; Octave ls возвращает двумерный массив символов с одним файлом на строку. (ИМХО формат Октавы лучше; очень трудно правильно проанализировать вывод Matlab ls. (Этот код регулярного выражения не адекватен.))

Вы можете просто захотеть это в Octave:

files = cellstr(ls(sceneDir));
...