首页 > 解决方案 > 在 Julia 中使用过滤器后使用包含

问题描述

我正在尝试检查是否有其他文件不包含子字符串“Sys”但以“.vm”结尾,但我收到一条错误消息:

ERROR: LoadError: MethodError: no method matching contains(::Array{String,1}, 
::SubString{String})
Closest candidates are:
contains(::Function, ::Any, ::Any) at reduce.jl:664
contains(::AbstractString, ::AbstractString) at strings/search.jl:378

这是代码:

    for f2 in filter(x -> endswith(x, ".vm"), readdir())

            if  (!contains(f2,"Sys"))
              #Do something with this file
            end
    end

在过滤器的输出上使用 readlines 后,我遇到了同样的问题:

    for f3 in filter(x -> !startswith(x, "Sys"), readdir())
                calledFileFunction = readlines(f3)
                fileLength=length(calledFileFunction)
                for i=1:fileLength
                    if  (contains(calledFileFunction,"ball"))
                           #Do something
                    end                  
                end
    end

有没有办法将 f2 转换为常规子字符串而不是 "Array{String,1}" 所以我可以使用包含?,否则我应该如何实现这些函数?

标签: julia

解决方案


在您的第二个示例中,calledFileFunction似乎是一个字符串数组。所以contains需要应用于(要重命名...)数组的每个元素...

@show typeof(...)如果你刚开始,插入你的代码是一件有用的事情。

这样的事情可能会做:

for f3 in filter(x -> startswith(x, "test"), readdir())
   filecontents = readlines(f3)
   fileLength=length(filecontents)
   if any(map(f -> contains(f, "julia"), filecontents))
        println("$f3 contains \"julia\"")
   end                  
end

推荐阅读