Сначала вы можете получить все каталоги файлов:
all.files = list.files(recursive = T)
Затем ваш CSV-файл будет иметь те файлы, которые имеют наибольшее количество прямых слешей (как вы сказали, это всегда последний:
]library(magrittr)
all.files[stringr::str_count(all.files, pattern = "/") %>% .[equals(., max(.))]]
поочередно, если это единственные CSV-файлы в ваших подкаталогах, ваша работа будет намного проще:
csv.files = grep(pattern = ".csv", all.files, value = T)
или, если целевые CSV-файлы находятся на самом низком уровне, но не только те, которые там есть, и не единственные CSV-файлы в подкаталогах, вы можете объединить эти два:
all.files[stringr::str_count(all.files, pattern = "/") %>% .[equals(., max(.))]] %>% grep(pattern = "csv",., value = T)
Если доктор Length является нулем, то Ваш выбор не возвратил строк. Если Вы хотите удалить строки, которые не соответствуют Вашим критериям, то я реализовал бы это как другой тип запроса. Могло также случиться так, что я полностью неправильно понимаю Ваш вопрос. Могли Вы обновлять свой вопрос показать Ваш SQL и указать, где в примере кода у Вас есть проблема: в цикле или после цикла, где у Вас есть свой комментарий?
Я не уверен, что полностью понимаю Ваш вопрос, но кажется, что Вы пытаетесь удалить запись из набора, в то время как Вы - все еще цикличное выполнение по нему. (который вызовет ошибку индекса массива),
Необходимо сохранить ссылку на каждую запись, которую Вы хотите удалить в новом наборе и затем удалить все новые записи из старого набора:
DataRow[] dr = payments.dtPayments.Select(myselect);
List<DataRow> rowsToRemove = new List<DataRow>();
for (int a = 0; a < dr.Length; a++) {
if(/* You want to delete this row */) {
rowsToRemove.Add(dr[a]);
}
}
foreach(var dr in rowsToRemove) {
payments.dtPayments.Rows.Remove(dr);
}
Необходимо создать datarow вне цикла, затем когда Вы добираетесь до строки, Вы хотите удалить, присваивают его строке, которую Вы создали снаружи. и повредите цикл. Затем ниже цикла можно удалить его.
DataRow r = null;
foreach(DataRow row in table.Rows)
{
if(condition==true)
{
r = row;
break;
}
}
table.Rows.Remove(r);
Вы попробовали это?
payments.dtPayments. Строки. Удалите (доктор)
Можно циклично выполниться через набор наоборот (для (интервал i=rows.length-1; x>-1; x-)) удалить несколько строк, чтобы гарантировать Вам не вытащит индекс из связанных ошибок.