Как проверить непрерывное количество столбцов с помощью datatable?

#vb.net #datatable

#vb.net #datatable

Вопрос:

У меня есть таблица данных ниже, и я хотел проверить условие, если общее количество последних столбцов превышает 7, тогда функция что-то сделает, но мое текущее решение способно только подсчитывать число 1 в таблице данных, но не может определить, что значение 1 является последовательным из столбца 7 в столбец 14.

 -------------------------------------------------------------------
Id  | 1  | 2  | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 |
-------------------------------------------------------------------
kek | 1  | 0  | 0 | 1 | 0 | 0 | 1 | 1 | 1 |  1 | 1  |  1 |  1 |  1 |
 

Решение

 Sub CheckExtraday()
    Dim count1 As Integer = 0
    Dim sql As String = "Select * from LeaveSystem WHERE EmpID ='"   Session("empID")   "' and Year='"   Session("year")   "' and Month='"   Session("month")   "'"

    Dim dt As DataTable = getDTms(sql)
    For I As Integer = 0 To dt.Rows.Count - 1
        For k As Integer = 2 To dt.Columns.Count - 1
            If dt.Rows(I).Item(k).Equals("1") = True Then
                count1 = count1   1
            End If
        Next k
    Next I

    If count1 > 7 Then  'output  = 10
       'do something
    End If
End Sub
 

Редактировать :

последовательный подсчет от столбца 11 месяца 5 до столбца 1-5 месяца 6

 ----------------------------------------------------------------------------
Id  | month | 1  | 2  | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 |
----------------------------------------------------------------------------
kek | 5     | 1  | 0  | 0 | 1 | 0 | 0 | 0 | 0 | 0 |  0 | 1  |  1 |  1 |  1 |
kek | 6     | 1  | 1  | 1 | 1 | 1 | 0 | 0 | 0 | 0 |  0 | 0  |  0 |  0 |  0 |
 

Комментарии:

1. Я не вижу в этом никакого смысла find_rows . Почему бы тебе просто не использовать dt.Rows(I) вместо этого?

2. Я понял, что в моем коде есть избыточность, и я отредактировал его.

Ответ №1:

Если я вас правильно понял, вы, похоже, пытаетесь получить количество последовательных ячеек, которые имеют значение 1 . Если это так, вы можете просто сбросить значение count1 всякий раз, когда значение ячейки не 1 :

 If dt.Rows(I).Item(k).ToString() = "1" Then
    count1  = 1
Else
    count1 = 0
End If
 

Если вы хотите сохранить последние последовательные 1 значения, даже если за ними следуют нули, вы можете сделать что-то вроде этого:

 Dim latestConsecutiveCount As Integer
If dt.Rows(I).Item(k).ToString() = "1" Then
    count1  = 1
Else
    latestConsecutiveCount = count1
    count1 = 0
End If

If latestConsecutiveCount > someValue Then
    ' Do something
End If
 

Комментарии:

1. Разве это не привело бы к 0 для строки типа 1,0,0,1,0,1,1,1,1,1,0,0 тогда?

2. @CharlesMay Это верно, но, похоже, это то, чего хотел ОП: «Я хотел проверить условие, если общее количество последних столбцов превышает 7″ .

3. Да, вы правы, я этого не уловил и подумал, что любые 7 последовательных. Извините.

4. Похоже, что OP хочет, чтобы количество последних определялось по идентификатору, поэтому вам придется изменить свой код, чтобы упорядочить по идентификатору, затем начать с конца и работать до тех пор, пока он не встретит «0»

5. спасибо @AhmedAbdelhameed, извините за беспокойство, но у меня есть последний вопрос: что мне делать, если я хочу, чтобы количество последовательных строк продолжалось от одной строки к другой строке?