【问题标题】:Building file name from cell arrays with variables从带有变量的元胞数组构建文件名
【发布时间】:2017-10-04 11:41:02
【问题描述】:

我想从元胞数组构建一个文件名。我想使用sprintf 函数,但它不适用于单元格输入(例如,它适用于字符串数组)。

例子:

foldername = sprintf('''\\STH\\Sth %s\\ABC %s;'',firstvariable,secondvariable);

输出:

Error using sprintf
Function is not defined for 'cell' inputs.

其中变量是元胞数组,如下所示:

firstvariable = {'A','B','C'};
secondvariable = {'D','E','F'};

我也尝试使用fullfile 函数,但它不带任何变量。这个输出看起来像这样:\STH\Sth %s\ABC %s。更何况,我也试过用strcat函数,结果还是差不多。

您还有其他想法吗? 谢谢!

【问题讨论】:

  • 所以你在这个例子中你想创建一个文件名路径的向量? (\A\D\ABC, \B\E\ABC, \C\F\ABC)
  • 输出应该看起来像'\STH\Sth A\ABC D'。我将在 for 循环中执行此操作,所以现在我只需要找到解决方案如何使用来自单元格数组的不同变量保存名称向量。 Sprintf 不适用于元胞数组;并且 fullfile 和 strcat 函数不适用于变量。我的问题是:什么样的功能可以做到这一点?
  • 如果你有一个for 循环:从它们的单元格中取出两个所需的变量,放在一个char 类型的临时变量中,并在每次迭代中重复。
  • 嗯,这是个好主意。我会尽力做到这一点。谢谢!

标签: matlab variables printf cell-array


【解决方案1】:

您可以将两个元胞数组传递给cellfun 以同时循环它们:

firstvariable = {'A','B','C'};
secondvariable = {'D','E','F'};
foldername = cellfun(@(x,y) ['\STH\Sth ' x '\ABC ' y], firstvariable, secondvariable, 'UniformOutput', false);

这给了

foldername =
  1×3 cell array
    '\STH\Sth A\ABC D'    '\STH\Sth B\ABC E'    '\STH\Sth C\ABC F'

【讨论】:

    【解决方案2】:

    这是你想要的吗?

    for ii = 1:length(firstvariable)
        foldername{ii} = sprintf('''\\STH\\Sth %s\\ABC %s;''',firstvariable{ii},secondvariable{ii});
    end
    

    输出是:

    foldername =    {''\STH\Sth A\ABC D;''}    {''\STH\Sth B\ABC E;''}    {''\STH\Sth C\ABC F;''}
    

    要使用任何文件夹名称,只需执行以下操作:

    foldername{index} % Gives back a string
    foldername(index) % Gives back a cell
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-08-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多