Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.72/39: Рейтинг темы: голосов - 39, средняя оценка - 4.72
0 / 0 / 0
Регистрация: 01.09.2013
Сообщений: 66

Экспорт и последующий анализ данных spc

09.09.2013, 16:41. Показов 8731. Ответов 126
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
приветствую!

программист я не очень)) но имеется желание облегчить себе жизнь)
собственно суть:
имеем файл базы данных spc (лог системы контроля параметров) во вложении, данный фаил содержит примерно сутки работы системы количество строк всегда 10002 количество столбцов при преобразовании может варьироваться
необходимо:
1. наладить импорт из данного файла в таблицу Excel, ну или экспорт (с этим у меня пока самая большая проблема)
предполагаю что в конечной таблице должна открываться юзерформа где можно указать путь к файлу из которого нужно взять данные при этом копируемые данные должны помещаться в начало листа
2.после переноса в основной файл должны ракладываться в нормальные столбцы и проверятся на ряд параметров : Во первых должны удалятся строки содержащие хотя бы одно 0 значение, во вторых в конце массива могут содержаться дубли уже внесенной ранее информции т.к. лог снимается вручную втретих нужно проводить проверку на наполнение листа т.е при достижении 1кк строк начинать новый лист.
3. на отдельном листе или в юзерформе создать группу графиков с изменяемым интервалом дат т.е забиваем дата/время начало-дата/время конец и получаем графическое отображение изменений данных параметров.

собственно вопросы следующие:
насколько это реализуемо средствами excel/vba
как реализовать п 1.

п.2 сейчас потихоньку делаю сам, хотя как конролировать наполнение листа тоже пока не представляю.
Вложения
Тип файла: rar DataLogSPC.rar (165.3 Кб, 20 просмотров)
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
09.09.2013, 16:41
Ответы с готовыми решениями:

Обработка множества документов word/pdf и последующий семантический анализ их содержимого
Добрый день, уважаемые форумчане. Подскажите, каким образом корректней решать следующую задачу: Есть множество документов в форматах...

Ввод данных в Input и их последующий вывод на странице
Добрый день. Только начал осваивать MVC. Осваиваю по оф документам и сайту metanit.com Под спойлером лирика о сложностях, можно...

Поиск данных в текстовом файле и последующий вывод
Доброго времени суток, форумчане! Нужна ваша помощь. В колледже стал проходить C++ Builder, работаю с Embarcadero RAD Studio XE5, и...

126
4377 / 661 / 36
Регистрация: 17.01.2010
Сообщений: 2,134
11.09.2013, 15:07
Студворк — интернет-сервис помощи студентам
Может, Вы не так подправили код. У меня, если первый раз заносить, после всего на листе "Reunion" остаются 9901 строка. Проверил удаление дубликатов. Перед вызовом процедуры Call mRemoveDublicate_DeleteEmpty поставил Stop. После остановки на Stop, на листе-приемнике, в разних местах, вставил руками 4 одинаковые строки. Продолжил. После конца, на листе осталась только одна строка из тех, что вводил (но строк стало, естественно, уже 9902). Все работает.
И еще раз. Запускаете выполнение только при активном любом пустом листе, только не Reunion.
Здесь я сам сделал те исправления, про которые говорил. И там установлен Stop, про который говорил выше в этом посте, но он не рабочий (в коментах). Пробуйте. И подскажите, где те строки, которые, по Вашему, не удаляются. Я их не вижу. Внимательно сами их просмотрите. Если там разница, например, хотя бы в одной точке - код поймет как разные строки.
Кликните здесь для просмотра всего текста
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
Sub v3_DataTransfer()
Dim mstr As String, mFlag As Boolean, i&, j&, mRng As Range
Dim mARR(), strC1$, strC2$
   Application.ScreenUpdating = False
   With Application.FileDialog(msoFileDialogFilePicker)
      .InitialFileName = Application.DefaultFilePath & "\":  .Show
        If .SelectedItems.Count = 0 Then
            MsgBox "Canceled":   Exit Sub
                Else: mstr = .SelectedItems(1)
        End If
        mstr = "TEXT;" & mstr
   End With: [a1].Select
    With ActiveSheet.QueryTables.Add(Connection:=mstr, _
                                                         Destination:=ActiveCell)
        .TextFilePlatform = 1251  ' fatefully
        .TextFileParseType = xlFixedWidth  ' fatefully
        .Refresh BackgroundQuery:=False ' fatefully
    End With
    With ActiveSheet.Range("A1:A" & ActiveSheet.UsedRange.Rows.Count)
        .Replace What:=",", Replacement:=";", LookAt:=xlPart, SearchOrder:=xlByRows
        .Replace What:=".", Replacement:=",", LookAt:=xlPart, SearchOrder:=xlByRows
        .TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _
            TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
            Semicolon:=True, Comma:=False, Space:=False, Other:=False, TrailingMinusNumbers:=True
    End With
'Stop
   Call mRemoveDublicate_DeleteEmpty
'--ADD--SORT---DATA---------------------------------------------
      With Sheets("Reunion")
         strC1 = IIf(.[a1].Value = vbNullString, "A1", _
                     .Rows(.UsedRange.Rows.Count + 1).Cells(1).Address)
      End With
      With ActiveSheet
         strC2 = IIf(strC1 = "A1", strC1, "A3")
         mARR = .Range(.Range(strC2), .Cells(.UsedRange.Rows.Count, _
                     .UsedRange.Columns.Count)).Value: .Cells.Delete
      End With
      With Sheets("Reunion")
         If (.UsedRange.Rows.Count + UBound(mARR, 1)) > .Rows.Count Then
            MsgBox "YOU   NEEEEEED   NEW   SHEETS !":   End
         End If
         .Range(strC1).Resize(UBound(mARR, 1), UBound(mARR, 2)).Value = mARR
         .[a3].Resize(UBound(mARR, 1), UBound(mARR, 2)).Columns.AutoFit
            With Range(.[a3], .Cells(.UsedRange.Rows.Count, _
                                                .UsedRange.Columns.Count))
               .Sort .Cells(1), xlAscending, , Header:=xlNo
            End With
      End With
'==End==ADD==SORT==DATA============================
'Stop
''--INSERT--DATA--WITHOUT--SORTING-------------------
'      With Sheets("Reunion")
'         strC1 = IIf(.[a1].Value = vbNullString, "A1", "A3")
'      End With
'      With ActiveSheet
'         strC2 = IIf(strC1 = "A1", strC1, "A3")
'         mARR = .Range(.Range(strC2), .Cells(.UsedRange.Rows.Count, _
'                     .UsedRange.Columns.Count)).Value: .Cells.Delete
'      End With
'      With Sheets("Reunion")
'         If (.UsedRange.Rows.Count + UBound(mARR, 1)) > .Rows.Count Then
'            MsgBox "YOU   NEEEEEED   NEW   SHEETS !":   End
'         End If
'         If strC1 = "A1" Then
'            .Range(strC1).Resize(UBound(mARR, 1), UBound(mARR, 2)).Value = mARR
'               Else
'                  .Rows(Range(strC1).Row & ":" & UBound(mARR, 1) + 2).Insert Shift:=xlDown
'                  .Range(strC1).Resize(UBound(mARR, 1), UBound(mARR, 2)).Value = mARR
'         End If
'         .Range(.[a3], .Cells(.UsedRange.Rows.Count, .UsedRange.Columns.Count)).Columns.AutoFit
'      End With
''==END==INSERT==DATA=================================
   Application.ScreenUpdating = True
   Erase mARR: MsgBox Space(10) & "D O N E!"
End Sub
 
Sub mRemoveDublicate_DeleteEmpty()
 Dim i&, j&, mARR(), rr As Range
   Application.ScreenUpdating = False
   With ActiveSheet
      ReDim mARR(0 To .UsedRange.Columns.Count - 1)
      For i = 1 To .UsedRange.Columns.Count:  mARR(i - 1) = i:  Next i
      Set rr = .Range(.[a3], .Cells(.UsedRange.Rows.Count, .UsedRange.Columns.Count))
      rr.RemoveDuplicates (mARR), xlNo
'   ------------------------
      'from toiai
   Dim x As Range, lastCol&
    On Error Resume Next
        lastCol = .UsedRange.Columns.Count + 1
        For Each x In rr.SpecialCells(xlCellTypeBlanks)
            .Cells(x.Row, lastCol) = 1
        Next
        Set x = Cells(1, lastCol)
        .UsedRange.Columns(lastCol).ColumnDifferences(x).EntireRow.Delete
    End With
' ================================
''----------------------------------------
''my own
'   With rr
'       For i = .Rows.Count To 1 Step -1
'         If Application.CountA(.Rows(i)) < .Columns.Count Then .Rows(i).Delete
'      Next 'i
'   End With:    Set mRng = Nothing
'' =======================================
   Erase mARR: Set rr = Nothing: Application.ScreenUpdating = True
End Sub


Добавлено через 7 минут
И пустых, после окончания, на листе Reunion, я не нашел. Поставил на лист автофильтр - ни в одном нет возможности выдделить "Пустые". Что-то там у Вас. Сохраните книгу под новым именем. Удалите все старые коды и занесите только последний.
1
3218 / 967 / 223
Регистрация: 29.05.2010
Сообщений: 2,087
11.09.2013, 16:27
Да, убежали Вы далеко (инет не работал), но оказывается ларек то просто открывался:
Кликните здесь для просмотра всего текста
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
Sub CvsToXlsx()
    Dim mRng As Range, x As Range, i&, j&, mARR(), LastCol&
    Dim WbCSV As Workbook, WbSvod As Workbook
    
    Set WbSvod = ActiveWorkbook
    FileCSV = Application.GetOpenFilename(filefilter:="Workbooks(*.csv),*.csv", _
                Title:="Выберите файлы CSV", MultiSelect:=True)
    
    If Not IsArray(FileCSV) Then Exit Sub
    Application.ScreenUpdating = False
    'разброска данных файлов по листам
    For j = 1 To UBound(FileCSV)
        Workbooks.Open (FileCSV(j))
        Set WbCSV = ActiveWorkbook
        WbCSV.Sheets(1).Copy After:=WbSvod.Sheets(WbSvod.Sheets.Count)
        ActiveSheet.Name = "DataLogSPC_" & j
        ActiveSheet.Columns.AutoFit
        WbCSV.Close False
    Next
        
    With WbSvod
        'обработка листов
        For j = 2 To .Sheets.Count
            With .Sheets(j)
                ' комбинированный код с Igor_T
                ReDim mARR(0 To .UsedRange.Columns.Count - 1)
                For i = 1 To .UsedRange.Columns.Count:  mARR(i - 1) = i: Next i
                Set mRng = .Range(.[a3], .Cells(.UsedRange.Rows.Count, .UsedRange.Columns.Count))
                mRng.RemoveDuplicates (mARR), xlNo
                'On Error Resume Next
                LastCol = .UsedRange.Columns.Count + 1
                For Each x In mRng.SpecialCells(xlCellTypeBlanks)
                    .Cells(x.Row, LastCol) = 1
                Next
                Set x = .Cells(1, LastCol)
                .UsedRange.Columns(LastCol).ColumnDifferences(x).EntireRow.Delete
            End With
        Next
    End With
    Application.ScreenUpdating = True
End Sub

Оказывается при программном открытии файлов CVS Excel автоматом раскидывает по ячейкам... век живи-век учись! Можно загружать сразу несколько файлов.
Вложения
Тип файла: zip SvodDataLogSPC_toiai.zip (39.9 Кб, 4 просмотров)
2
0 / 0 / 0
Регистрация: 01.09.2013
Сообщений: 66
11.09.2013, 16:37  [ТС]
собственно скрин экрана на момент выполнения stop, и после завершения работы лист Reunion? так же само было с самым первым кодом, остается только шапка.
Миниатюры
Экспорт и последующий анализ данных spc   Экспорт и последующий анализ данных spc  
0
4377 / 661 / 36
Регистрация: 17.01.2010
Сообщений: 2,134
11.09.2013, 16:46
To toiai. Открывает. Проблема оказалась в системном разделителе. ТС нужно ",", у меня системный "." У меня работает - аж дымит. У ТС одни проблемы. Вот и крутил химию. Закинул без разноски, тогда Вашим кодом раскидал - и опять у меня все работает.

Добавлено через 8 минут
to Cortes. Киньте еще раз Вашу книгу (с которой скины). Что-то Вы там намутили. У меня летает - у Вас умер.
0
0 / 0 / 0
Регистрация: 01.09.2013
Сообщений: 66
11.09.2013, 16:52  [ТС]
toiai, при загрузке второго cvs runtime error 1004 по 16 строке не может присвоить имя совпадающее с именем другого листа. хотя если грузить одновременно 2 cvs то все класс, время работы конечно обалденное))

Igor_Tr, вложил) только там ничего не намучено код прямо отсюда копировался)
Вложения
Тип файла: rar МК-1_V3.rar (23.8 Кб, 4 просмотров)
0
0 / 0 / 0
Регистрация: 01.09.2013
Сообщений: 66
11.09.2013, 16:57  [ТС]
toiai,при таком раскидывании по листам искать дубликаты в общем не нужно в одном cvs нет дубликатов, дубликаты есть в соседних svc.

т.е. условно 1 лог с 17:00 до 8:00 следующего дня
2 лог с 5:00 до 20:00
соответственно период с 5:00 до 8:00 есть в обоих логах его то и нужно убить при сливании логов вместе
0
3218 / 967 / 223
Регистрация: 29.05.2010
Сообщений: 2,087
11.09.2013, 17:18
В принципе можно собирать и на один лист...
1
4377 / 661 / 36
Регистрация: 17.01.2010
Сообщений: 2,134
11.09.2013, 18:05
Я вот ну ничего не понимаю. Переключил у себя "." на ",". Есть. Работаю с Вашей книгой - она мне такое выдает... Работаю с своей - все чудесно. Может, мой Excel уже не хочет с мной связываться? Знает, что безнадежно..
Не свой, из Вашей книги, перекинул модуль в свою новую - опять все хорошо.
Вложения
Тип файла: rar MK_Mistake.rar (1.46 Мб, 4 просмотров)
1
0 / 0 / 0
Регистрация: 01.09.2013
Сообщений: 66
11.09.2013, 18:14  [ТС]
Igor_Tr, при пошаговом прогоне видно что оно цепляет лишний столбец который везде пустой, не понятно только почему)))

Добавлено через 2 минуты
кстати в Вашей книге excel на всех значениях на обих листах выдает предупреждение что число отформатироано как текст.
0
0 / 0 / 0
Регистрация: 01.09.2013
Сообщений: 66
11.09.2013, 18:35  [ТС]
toiai, сейчас прогнал дома ваш код, реально разница в скорости работы существенная, даже при анализе 2х cvs сразу работает быстрее.
насколько я понимаю данные ракладываются еще в cvs, вопрос можно ли как-то разложить первый столбец т.е дату и время отдельно?

на скринах видно зачем))
Миниатюры
Экспорт и последующий анализ данных spc   Экспорт и последующий анализ данных spc  
0
4377 / 661 / 36
Регистрация: 17.01.2010
Сообщений: 2,134
11.09.2013, 18:53
Это я уже эскпериментировал с Вашей книгой. Пробовал всякое. Найдите в основном модуле вот это:
.Cells.NumberFormat = "@"
и удалите.
Где Вы видите, что цепляет столбец? Если работаете с несколькими файлами csv - посмотрите разницу, внимательно. Может, где-то столбец еще один? Но Ваша книга, когда выдавала сюрпризы, она выкидывала доп. столбик правее от основного диапазона, весь заполненный 1. У меня еще таких больших глаз не было.... Или я себя раньше не видел. И совсем не понимаю, почему (выкидывало).
Теперь ганяю - все нормально. И с Вашим разделителем

Добавлено через 13 минут
To toiai. Скорость намного больше чем через запрос. Раза в два. Но теперь у меня опять. Разделитель системы установил ",", а на листе "." Все, сейчас умру.
0
3218 / 967 / 223
Регистрация: 29.05.2010
Сообщений: 2,087
11.09.2013, 18:55
Вот пример сбора данных на один лист, может подойдет. Что касается разделения, то можно так:
1.вставить столбец после А
2.выделить диапазон А3:А..... в общем в конец листа
3 разбить ТЕКСТ по столбцам с разделителем " ", т.е. ПРОБЕЛ
Вложения
Тип файла: zip SvodDataLogSPC_toiai на один лист.zip (39.9 Кб, 4 просмотров)
1
0 / 0 / 0
Регистрация: 01.09.2013
Сообщений: 66
11.09.2013, 18:55  [ТС]
столбик правее от основного диапазона, весь заполненный 1
этот столбик выдает этот кусок кода:

Visual Basic
1
2
3
4
For Each x In rr.SpecialCells(xlCellTypeBlanks)
            .Cells(x.Row, lastCol) = 1
        Next
        Set x = Cells(1, lastCol)
1 помечены строки для удаления он должен быть 17тым а он почему то дальше из-за этого и убивается все
0
3218 / 967 / 223
Регистрация: 29.05.2010
Сообщений: 2,087
11.09.2013, 19:05
Цитата Сообщение от Cortes1984 Посмотреть сообщение
Set x = Cells(1, lastCol)
Вот эту строку писать надо так:
Visual Basic
1
 Set x = .Cells(1, lastCol)
1
0 / 0 / 0
Регистрация: 01.09.2013
Сообщений: 66
11.09.2013, 19:14  [ТС]
toiai, все рано все убивается кроме шапки)

кстати обрабатывать файлы пачкой к сожалению не получится, точнее получится но для этого их нужно переименовывать, у них имя тоже стандартное DataLogSPC.csv
0
3218 / 967 / 223
Регистрация: 29.05.2010
Сообщений: 2,087
11.09.2013, 19:17
Цитата Сообщение от Cortes1984 Посмотреть сообщение
имя тоже стандартное DataLogSPC.csv
Чем дальше тем еще интереснее, они у вас хранятся в разных папка?

Прикрепите файл с последним кодом, может найду причину.
1
0 / 0 / 0
Регистрация: 01.09.2013
Сообщений: 66
11.09.2013, 19:27  [ТС]
toiai, да, причем там еще и структура каталогов довольно длинная, вообще их формируется 2 лог SPC и лог событий events.csv сопоставление этих 2х логов это тоже отдельная песня в логе SPC меньше суток а в events почти месяц))

Добавлено через 4 минуты
вот он, только не понятно есть ли ошибка он то работает то не работает

не дает еще раз вложить)) https://www.cyberforum.ru/post5042606.html тут он
0
3218 / 967 / 223
Регистрация: 29.05.2010
Сообщений: 2,087
11.09.2013, 19:28
Ну вот получился артель "Напрасный труд".... Ну и где же программный файл?
0
4377 / 661 / 36
Регистрация: 17.01.2010
Сообщений: 2,134
11.09.2013, 19:39
Выключил. Покрутил. Включил. Все работает. Перекомбинировал с кодом Toiai - работает. Работает и с ".", и с ",". Непонимаю.
To Cortes1984. Вы там еще про даты спрашивали. Дату беру из Вашего листа, [a10]
Visual Basic
1
2
3
4
5
6
Sub mDmT()
Dim mstr$, mdate$, mTime$
   mstr = [a10].Value
   mdate = DateValue(mstr)
   mTime = TimeValue(mstr)
End Sub
Можна просто записать mstr = "09.09.2013 15:45:25", и можна через Split. Как кому нравится.
0
3218 / 967 / 223
Регистрация: 29.05.2010
Сообщений: 2,087
11.09.2013, 19:42
Чем же мой код не подходит, работает у меня стабильно.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
11.09.2013, 19:42

SQL: Группирование записей таблицы, и последующий вывод данных
Доброго времени суток всем. Помогите с проблемкой. Есть таблица с платежами. Каждый студент может иметь несколько платежей. Это...

Чтение из файла данных и последующий вывод на экран в виде линейного однонаправленного списка
Здравствуйте, я новичок в программировании. Не понимаю как выполнить следующую задачу: Дан список группы в 10 человек в виде ...

Копирование строки. При вводе пробела программа пропускает последующий ввод данных
char st, st1; int k, m, i, j; system(&quot;cls&quot;); cout &lt;&lt;&quot;Введите строку&quot;&lt;&lt;endl; cin &gt;&gt;st; cout &lt;&lt;&quot;Введите номер символа,...

Экспорт данных из базы данных *.DB в Word через Table (DateSet)
Всем Hello! у меня проблема не могу выгрузить данные из DB через table много чего перепробовал но увы не получается подскажите или хотя бы...

Как сделать экспорт данных из таблицы базы данных MSSQL 2008 в Excel на php?
Добрый день. Подскажите как сделать экспорт данных из таблицы базы данных MSSQL 2008 в Excel ? P.S.: на MySQl все просто, однако...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
60
Ответ Создать тему
Новые блоги и статьи
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru