Ответ 1
Matlab - это странность в том, что обработка побега в строках является функцией семейства функций printf
вместо синтаксиса строкового литерала. И нет многострочных литералов. О, хорошо.
Я закончил делать две вещи. Сначала создайте функции CR()
и LF()
, которые возвращают обработанные \r и\n соответственно, поэтому вы можете использовать их как псевдо-литералы в своем коде. Я предпочитаю делать это, а не отправлять целые строки через sprintf(), потому что там могут быть другие обратные косые черты, которые вы не хотели бы обрабатывать как escape-последовательности (например, если некоторые из ваших строк были получены из аргументов функции или ввода, читаемых из других источников).
function out = CR()
out = char(13); % # sprintf('\r')
function out = LF()
out = char(10); % # sprintf('\n');
Во-вторых, создайте функцию join(glue, strs)
, которая работает как Perl-соединение или код cellfun/horzcat в вашем примере, но без конечного трейлинг-разделителя.
function out = join(glue, strs)
strs = strs(:)';
strs(2,:) = {glue};
strs = strs(:)';
strs(end) = [];
out = cat(2, strs{:});
И затем используйте его с клеточными литералами, как вы.
str = join(LF, {
'abc'
'defghi'
'jklm'
});
Вам не нужны эллипсы "..." в клеточных литералах; опуская их, создается вертикальная конструкция вектора, и это прекрасно, если строки имеют разную длину строк char, потому что каждый из них застревает внутри ячейки. Это само по себе должно сэкономить вам некоторое написание.