Взять из таблицы только строки содержащие диапазон дат

ArtDir

Client
Регистрация
03.04.2019
Сообщения
48
Благодарностей
4
Баллы
8
Здравствуйте, коллеги.

Обыскал весь форум, не могу найти решение.

Дано: Таблица из четырех столбцов, последний из которых (столбец "D") с датой в UNIX-time.

Нужно удалить из нее все строки, кроме тех, в которых в столбце D сегодняшняя дата.

Например, сегодня это с 1579046400 по 1579132800 по UNIX-time. Соответственно, все строки со значением >1579046400 в столбце D нужно удалить.

Кубиками — долго. Может быть кто-то подскажет простое решение на С#?
 

ArtDir

Client
Регистрация
03.04.2019
Сообщения
48
Благодарностей
4
Баллы
8
Мне удалось только найти такое удаление строк для списка:

C#:
IZennoList list = project.Lists["List"]; // список проекта
Regex reg = new Regex(@"(?<=,""created"":)\d{10}");
Match m;
long timestamp;

lock (SyncObjects.ListSyncer) {
    for (int i = 0; i < list.Count; i++) {
        m = reg.Match(list[i]);
        if (m.Success) {
            timestamp = long.Parse(m.Value);
            if (timestamp >= 1433178915 && timestamp <= 1496337315) {
                list.RemoveAt(i); i--;
            }
        }
    }
}
Но как удалить из таблицы, ума не приложу. Тем более, что эта дата только в ячейке D.
 

Astraport

Client
Регистрация
01.05.2015
Сообщения
4 983
Благодарностей
4 433
Баллы
113

ArtDir

Client
Регистрация
03.04.2019
Сообщения
48
Благодарностей
4
Баллы
8
Тоже самое:
table.DeleteRow(i);
В итоге сделал вот так:

C#:
// получаем таблицу, в которой будем искать
var sourceTable = project.Tables["all_posts_tabl"];
// получаем таблицу, в которую будем класть
var destTable = project.Tables["today_posts_tabl"];
long timestamp;
// ищем в каждой строчке в таблице
lock(SyncObjects.TableSyncer)
{
    for(int i=0; i < sourceTable.RowCount; i++)
    {
        // читаем строку из таблицы (это будет массив ячеек)
        var cells = sourceTable.GetRow(i).ToArray();
        // проверяем вторую ячейку регулярным выражением, если есть совпадение кладем результат во вторую таблицу
        timestamp = long.Parse(cells[3]);
        if (timestamp >= 1578763006 && timestamp <= 1496337315)
            destTable.AddRow(cells);
    }
}
Вроде работает...
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 720
Баллы
113
В итоге сделал вот так:

C#:
        if (timestamp >= 1578763006 && timestamp <= 1496337315)
Вроде работает...
не хватает перевода текущей даты в Unix, так как завтра тот код уж работать не будет
 
  • Спасибо
Реакции: ArtDir

ibred

Client
Регистрация
04.04.2015
Сообщения
3 835
Благодарностей
3 552
Баллы
113

ArtDir

Client
Регистрация
03.04.2019
Сообщения
48
Благодарностей
4
Баллы
8
не хватает перевода текущей даты в Unix, так как завтра тот код уж работать не будет
да, все верно!

Сделал, чтобы блалось из переменной:

C#:
// получаем время вчера в 00:00 и сегодня в 00:00 по юникстайм
int today = int.Parse(project.Variables["TodayUNIX"].Value);
int yesterday = int.Parse(project.Variables["YesterdayUNIX"].Value);

// получаем таблицу, в которой будем искать
var sourceTable = project.Tables["all_posts_tabl"];
// получаем таблицу, в которую будем класть
var destTable = project.Tables["today_posts_tabl"];
long timestamp;
// ищем в каждой строчке в таблице
lock(SyncObjects.TableSyncer)
{
    for(int i=0; i < sourceTable.RowCount; i++)
    {
        // читаем строку из таблицы (это будет массив ячеек)
        var cells = sourceTable.GetRow(i).ToArray();
        // проверяем вторую ячейку регулярным выражением, если есть совпадение кладем результат во вторую таблицу
        timestamp = long.Parse(cells[3]);
        if (timestamp >= yesterday && timestamp <= today)
            destTable.AddRow(cells);
    }
}
В переменные кладу сегодня 00:00 и вчера 00:00 в юникс-формате.

Так?
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 720
Баллы
113

sinister1990

Client
Регистрация
19.02.2021
Сообщения
3
Благодарностей
0
Баллы
1
В итоге сделал вот так:

C#:
// получаем таблицу, в которой будем искать
var sourceTable = project.Tables["all_posts_tabl"];
// получаем таблицу, в которую будем класть
var destTable = project.Tables["today_posts_tabl"];
long timestamp;
// ищем в каждой строчке в таблице
lock(SyncObjects.TableSyncer)
{
    for(int i=0; i < sourceTable.RowCount; i++)
    {
        // читаем строку из таблицы (это будет массив ячеек)
        var cells = sourceTable.GetRow(i).ToArray();
        // проверяем вторую ячейку регулярным выражением, если есть совпадение кладем результат во вторую таблицу
        timestamp = long.Parse(cells[3]);
        if (timestamp >= 1578763006 && timestamp <= 1496337315)
            destTable.AddRow(cells);
    }
}
Вроде работает...
Как изменить кубик чтобы просто удалялись строки в таблице не соответствующие диапазону чисел? или <=3000?
без long timestamp
Спасибо
 

Sergodjan

Administrator
Команда форума
Регистрация
05.09.2012
Сообщения
20 407
Благодарностей
9 116
Баллы
113

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