Использование содержимого после использования фильтра в Юлии - PullRequest
0 голосов
/ 09 мая 2018

Я пытаюсь проверить, есть ли другие файлы, которые не содержат подстроку "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}", чтобы я мог использовать содержит?, В противном случае, как мне реализовать эти функции?

1 Ответ

0 голосов
/ 09 мая 2018

Во втором примере 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
...