Igor Pro 8,比较字符串的函数

Igor Pro 8, functions for comparing strings

您好,我刚开始使用 Igor Pro。我正在寻找有关编写任务过程的帮助。

我有 4 个 wave,两个是文本 wave,两个是数字 wave(其中一个还没有数据)。我需要编写一个函数来比较两个文本 wave,如果它们相等,则让 igor 从其中一个数字 wave 中提取数据并将其放在正确的点以匹配与之耦合的文本 wave。

在视觉上概念化

twave1                           twave2

nwave1                           nwave2

twave1 是直到镎的所有同位素的列表,但它们没有按顺序排列,nwave1 是它们对应的质量值。 (都在表 1 上)

twave2 是相同的同位素列表,但顺序正确(即 1H、2H、3H、4H...3He、4He...等),nwave2 为空(均在表 2 中)

所以目标是创建一个函数来对 twave1 和 twave2 进行排序,如果它们匹配,则将数据从 nwave1 提取到 nwave2,以便质量与表 2 上的正确同位素匹配。因此 table2 将在正确的位置具有正确排序的同位素,现在还有质量数据。

如有任何帮助,我们将不胜感激;这是我到目前为止的进展

function assignMEf()
    wave ME, ME_FRIB
    wave isotope_FRIB, isotope
    variable len = numpnts(ME)
    variable i, j
    variable ME_current, iso_current

    for(i=0; i<len; i+=1)
     ME_current = ME[i]
     iso_current = isotope[i]
   for(j=0; j<4254; j+=1)
    if(iso_current == isotope_frib[j])
        ME_frib = ME[i]
    endif
   endfor
  endfor

end

如果我没理解错的话,你最后要的两波是isotopeME。您的代码几乎可以正常工作,但是您需要在声明文本 wave 时使用 /t 标志告诉 Igor 这是一个文本 wave。我进一步简化了代码:

function assignMEf()
    wave ME, ME_FRIB
    wave/t isotope, isotope_FRIB
    variable len = numpnts(ME)

    variable i, j

    for(i = 0; i < len; i += 1)
        for(j = 0; j < len; j += 1)
            if(stringmatch(isotope[i],isotope_frib[j]))
                ME[i] = ME_FRIB[j]
            endif
        endfor
    endfor
end

此代码不是很健壮,但可以满足您的需求。

为了测试代码,这是我的 MWE:

•Make/O/N=(10) ME_FRIB = p
•Make/O/N=(10) ME = NaN
•Make/O/N=(10)/T isotope_FRIB = "iso" + num2str(10 - p)
•Duplicate/O isotope_FRIB,isotope
•Sort isotope,isotope
•Edit isotope_FRIB,ME_FRIB,isotope,ME
•assignmef()

我认为 stringmatch 不是正确的选择。它使用通配符匹配,但 OP AFAIU 需要 match/no-match,因此 !cmpstr 是更好的选择。