【问题标题】:MATLAB: IF function based on a String's nameMATLAB:基于字符串名称的 IF 函数
【发布时间】:2021-01-07 11:53:00
【问题描述】:

我有 60 个不同的字符串(Book01、Book02、...、Book60)。 我只想为 Book045 到 Book58 执行某个程序。

如何编写 if 语句,以便仅对 Book58 之前的任何字符串 Book045 执行该过程?例如:

Book48
    If (name of string = Book045 to Book58)
      My Procedure
    else
      Nothing
    end

谢谢。

【问题讨论】:

  • 如果所有的名字都是'Book###'类型,你可以简单地用str2double()得到这本书的索引,然后测试索引是否在你的范围内。跨度>

标签: string matlab if-statement conditional-statements


【解决方案1】:

如果您在元胞数组中有名称

books = {'Book01', 'Book02', ..., 'Book59', 'Book60'};

然后您可以提取每个名称中的值并在循环中检查它

for ii = 1:numel(books)
    val = erase( books{ii}, 'Book' ); % Remove the 'Book' prefix
    val = str2double( val );          % Convert to number
    if val >= 45 && val <= 58
        % do something in this range
    end 
end

【讨论】:

  • 狼,你是对的。我对他的数据集感到困惑,我认为它包含字符而不是字符串。赞成你的。感谢您的反馈。
  • @Wolfie。杰出的!这完全符合我的要求,但请原谅我没有明确或不准确,但是如果所有书籍都是字符数组怎么办。 (例如 Book01 是一个 1x202040 字符。)我知道我应该像这样更改代码:books = {Book01, Book02, ..., Book59, Book60};,但是如何调整解决方案的其余部分以适应这个?再次感谢。
  • 您可以先使用books = strsplit(books, 'Book') 创建元胞数组,然后您甚至不需要erase
  • @Wolfie。感谢您帮助我,但我认为答案可能更简单?如果答案可以像这样简单:if Book == Book45|Book46|Book47|Book48|Book49|Book50|Book51|Book52|Book53|Book54|Book54|Book56|Book57|Book58 My Procedure end?我只需要这个 if 函数才能工作吗?我在这有什么错?谢谢你的麻烦。
  • 您没有在问题中明确说明您的数据类型是什么或如何循环它们。没有这些信息,我的建议是我能建议的最有力的建议。您在评论中添加的选项不起作用,因为不清楚 BookBookXX 是什么?它们不在字符串或字符等引号中,== 不适用于字符等。请编辑您的问题或提出新的(和改进的)问题,包括 minimal reproducible example
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-20
  • 1970-01-01
  • 1970-01-01
  • 2012-06-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多