Поиск массива ячеек с помощью регулярных выражений - PullRequest
3 голосов
/ 26 июля 2011

Я часто пытаюсь искать в массивах ячеек, как если бы я хотел искать в базе данных с помощью SQL-запроса.В этом случае у меня есть несколько военных баз (Base.shp)

bases = shaperead('us-military-bases.shp')

, а затем я хочу отфильтровать файл формы, чтобы получить базы ВВС, что-токак regexp({bases.FAC_NAME}','Air Force').Но вывод, который я получаю, довольно громоздок:

[]
[]
[ 4]
[]
[]
[ 9]
[]

Я уверен, что фильтрация массивов ячеек или шейп-файлов довольно распространена, и должны быть некоторые хорошие практики.Спасибо за понимание.

Я также пробую такие вещи как:

trif = arrayfun(@(x)regexp(x.FAC_NAME,'Griff','match'),af_bases)

1 Ответ

15 голосов
/ 26 июля 2011

Учитывая вывод regexp, вы можете индексировать обратно в исходный массив ячеек, просто проверив, пуст ли каждый элемент в результирующем массиве ячеек.Вы можете сделать это, используя cellfun, чтобы применить функцию к каждой ячейке.

Чтобы получить массив логики, для непустых элементов вы можете сделать:

base_strings = {bases.FAC_NAME}';

ind = ~cellfun(@isempty, regexp(base_strings, 'Air Force'))

или более аккуратноиспользуя анонимную функцию:

ind = cellfun(@(x)( ~isempty(x) ), regexp(base_strings, 'Air Force'))

Затем для фильтрации:

filtered = base_strings(ind);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...