Помогите алгоритмом

norbiq

Client
Регистрация
25.03.2013
Сообщения
19
Благодарностей
1
Баллы
3
Приветствую всех форумчан!
Помогите алгоритмом действий, реализую сам. Что-то никак в голову не идет как сделать.
Есть таблица, в ней куча строк и столбцов (список аккаунтов с их характеристиками). В одном из столбцов для каждой строки аккаунта записан номер телефона. Так уж получается у меня пока, что аккаунты умирают. Есть отдельная папка с дампами андроид приложения. Соответственно каждый дамп называется номером телефона. Я их периодически проверяю и отвалившиеся удаляю (файлы, дампы).
Так вот, в итоге получается что в таблице моей, строк становится больше, чем по факту файлов дампов приложения (аккаунтов). Не красиво, хочу вычистить и иметь актуальный список (таблицу). Так вот не соображу алгоритм, как мне это сделать. Беру директорию, получаю список файлов (дампов приложения), помещаю в список, беру строку из списка с удалением, кладу в переменную......:be:
 

BAZAg

Client
Регистрация
08.11.2015
Сообщения
1 787
Благодарностей
2 453
Баллы
113
C#:
string path = @"C:\ZP\dumps"; // Путь к папке
string table_name = "tb";
var dumps = Directory.GetFiles(path).Select(p => Path.GetFileNameWithoutExtension(p)); // Получили имена файлов без разширения
lock(SyncObjects.TableSyncer) { // синхронизировали потоки
    var tb = project.Tables[table_name].GetItems("ALL", true).Select(x=> x.ToArray()).ToArray(); // взяли с таблички все данные с удалением
    foreach(string[] row in tb.Where(x=>dumps.Count(z => z == x[1]) > 0)) project.Tables[table_name].AddRow(row); // Добавили в табличку только те, у которых в ячейке 1 есть значение, которое находится в именах файлов
}
Вместо x[1] подставлять нужный номер:
x[0] - ячейка A,
x[1] - ячейка B,
x[2] - ячейка C и тп.

Также возможен вариант, когда нужно удалить дубли (оставить только 1 строку с одним номером, остальные не добавлять в таблицу:
C#:
string path = @"C:\ZP\dumps"; // Путь к папке
string table_name = "tb";
var dumps = Directory.GetFiles(path).Select(p => Path.GetFileNameWithoutExtension(p)); // Получили имена файлов без разширения
HashSet<string> hash = new HashSet<string>(); // колекция для удаления дублей
lock(SyncObjects.TableSyncer) { // синхронизировали потоки
    var tb = project.Tables[table_name].GetItems("ALL", true).Select(x=> x.ToArray()).ToArray(); // взяли с таблички все данные с удалением
    foreach(string[] row in tb.Where(x=>dumps.Count(z => z == x[1]) > 0)){
        if(hash.Add(row[1])) // добавляем в табличку если раньше ещё не встречался этот номер
project.Tables[table_name].AddRow(row); // Добавили в табличку только те, у которых в ячейке 1 есть значение, которое находится в именах файлов
    }
}
Здесь row[1] представляет также номер ячейки (0=A,1= B, 2=C..)
 
Последнее редактирование:
  • Спасибо
Реакции: myndeswx

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)