получить путь к файлам в каталоге в q - PullRequest
0 голосов
/ 31 января 2019

Я использую q для получения всех файлов, перечисленных в этом каталоге:

key `:Dname

, а затем пытаюсь отфильтровать те, которые начинаются с чисел как:

key `:Dname like "[0-9]"

но подобная часть не совсем работает.Я также попробовал get, так как мне нравится путь для включения каталога, в котором находится файл.

Ответы [ 2 ]

0 голосов
/ 31 января 2019

Имейте в виду, что q оценивает выражения справа налево.Ваш код здесь сначала оценивает

`:Dname like "[0-9]"

и применяет key к результату.

Вы хотите что-то ближе к

key[`:Dname] like "[0-9]"

Но получите то, что вы хотитевам нужно будет добавить подстановочный знак в строку шаблона, которую вы предоставляете, и применить not к результату

not key[`:Dname] like "[0-9]*"

Это даст вам логический вектор, чтобы вернуть список файлов, которые вы хотитеиспользуйте где и индекс:

key[`:Dname] where not key[`:Dname] like "[0-9]*"
0 голосов
/ 31 января 2019

Если у вас есть имя файла, определенное как

filename:`2019.01.20file.txt

Вы можете сравнить это с шаблоном, используя like, аналогично тому, что вы сделали:

filename like "[0-9]*"
  • "*" - это символ подстановки, который означает, что после [0-9]

  • like все может сравниться с шаблоном

Таким образом, эта строка возвращает 1b, если имя файла начинается с цифры от 0 до 9.

Другим способом будет сравнение начала имени файла с .Qn, который является строкой0-9.Это может быть достигнуто следующим образом:

first[string filename] in .Q.n
  • string преобразует символ в строку для in, чтобы сравнить его со строкой .Qn

ДляВаша ситуация, я бы порекомендовал первый способ.

q)key `:q
`README.txt`q.k`q.q`s.k`sp.q`w32
q)key[`:q] like "q*"
011000b
q)x where (x:key[`:q]) like "q*"
`q.k`q.q
q)x where not (x:key[`:q]) like "q*"
`README.txt`s.k`sp.q`w32

Этот метод возвращает логический список, который указывает, начинается ли каждый файл с «q»:

  • Использует not для обращения 1 и 0 этого списка
  • Использует where для возврата индексов, для которых логический список равен 1
  • Индексы в key[`:q] с этим списком

Надеюсь, это поможет

...