Форум программистов, компьютерный форум, киберфорум
Batch (CMD/BAT)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.85/13: Рейтинг темы: голосов - 13, средняя оценка - 4.85
51 / 50 / 3
Регистрация: 27.07.2019
Сообщений: 485

Удаление строк в файле отсутствующих в другом файле

09.01.2024, 11:14. Показов 3134. Ответов 34
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, уважаемые форумчане!
Помогите сложным советом.
Есть два файла (строк более 1млн в одном, в другом около 30 тыс.)
Сама задача, в файле 1 удалить все строки, которых нет в файле 2, но тут задача поиск по первым 28 символам.
В pwsh у меня есть скрипт, но он отрабатывает в течении минут 30-40, что очень долго.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
09.01.2024, 11:14
Ответы с готовыми решениями:

Удаление элементов списка, находящегося в одном файле, из списка, имеющегося в другом файле
По сути есть два списка, одни - файлы в папке, которые рекурсивно сканятся и в одну строчку складываются, а другой список файлов в...

Можно ли на javascript'e в одном js-файле использовать функции, описанные в другом js-файле?
Подскажите, плз, можно ли на javascript'e в одном js-файле использовать функции, описанные в другом js-файле? (который лежит на другом...

Как использовать экземпляр класса, объявленный в одной файле, в другом файле?
В первой форме я создал класс TBook и массив экземпляров этого класса TBook Book. Как использовать экземпляры этого класса в других...

34
51 / 50 / 3
Регистрация: 27.07.2019
Сообщений: 485
09.01.2024, 17:13  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Angry Old Man Посмотреть сообщение
Либо переписать текст скрипта
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
Const N = 27, File1 = "D:\Мой контент\Загрузки\out\1.txt", File2 = "D:\Мой контент\Загрузки\out\2.txt"
T1 = Now
Set Dic = CreateObject("Scripting.Dictionary")
 
With CreateObject("Scripting.FileSystemObject")
    Set F1 = .OpenTextFile(File1, 1)
    Do While Not F1.AtEndOfStream
        i = Mid(F1.ReadLine, 1, N)
        If Not Dic.Exists(i) Then Dic.Add i, ""
    Loop
    F1.Close
    
    Set F2 = .OpenTextFile(File2, 1)
    Arr = Split(F2.ReadAll, vbCrLf)
    F2.Close
    
    Set F2 = .OpenTextFile(File2, 2, True)
    For Each j In Arr
        i = Mid(j, 1, N)
        If Dic.Exists(i) Then F2.WriteLine j
    Next
    F2.Close
End With
T2 = Now
MsgBox CStr(T1) + vbCr + CStr(T2), 64
Ваш скрипт очищает в ноль файл 2.txt
0
 Аватар для Angry Old Man
3600 / 753 / 317
Регистрация: 26.03.2022
Сообщений: 1,415
Записей в блоге: 1
09.01.2024, 17:24
Цитата Сообщение от farmsnab Посмотреть сообщение
Ваш скрипт очищает в ноль файл 2.txt
У пользователей безграничная фантазия. В прикрепленном файле результат работы на Ваших примерах. Как Вам удалось в 0, ума не приложу.
Вложения
Тип файла: zip outafter.zip (628.2 Кб, 3 просмотров)
1
51 / 50 / 3
Регистрация: 27.07.2019
Сообщений: 485
10.01.2024, 06:38  [ТС]
Наверное вот так
ScreenHunter 131.mp4
0
51 / 50 / 3
Регистрация: 27.07.2019
Сообщений: 485
10.01.2024, 06:39  [ТС]
Цитата Сообщение от Angry Old Man Посмотреть сообщение
У пользователей безграничная фантазия. В прикрепленном файле результат работы на Ваших примерах. Как Вам удалось в 0, ума не приложу.
Наверное вот так
Вложение 1455052
0
 Аватар для Angry Old Man
3600 / 753 / 317
Регистрация: 26.03.2022
Сообщений: 1,415
Записей в блоге: 1
10.01.2024, 09:20
farmsnab, Упакуйте ваши файлы и дайте потрогать руками
1
51 / 50 / 3
Регистрация: 27.07.2019
Сообщений: 485
10.01.2024, 09:24  [ТС]
Цитата Сообщение от Angry Old Man Посмотреть сообщение
farmsnab, Упакуйте ваши файлы и дайте потрогать руками
Farm_new.zip
0
 Аватар для Angry Old Man
3600 / 753 / 317
Регистрация: 26.03.2022
Сообщений: 1,415
Записей в блоге: 1
10.01.2024, 09:50
Лучший ответ Сообщение было отмечено farmsnab как решение

Решение

У меня так определяются кодировки файлов:
Code
1
2
1.txt       Кодировка UTF-16 LE c BOM    (таблица 1200)
2.txt       Кодировка ANSI               (таблица 20866)
Всё дело в кодировке. В аптеке всё должно быть четко.
Поэтому дайте четкую постановку с указанием кодировок файлов, рабочую пару файлов, можно потом думать.
Предыдущая пара файлов была не в этой кодировке. Скрипт отрабатывал нормально.
1
51 / 50 / 3
Регистрация: 27.07.2019
Сообщений: 485
10.01.2024, 10:26  [ТС]
Цитата Сообщение от Angry Old Man Посмотреть сообщение
У меня так определяются кодировки файлов:
Code
1
2
1.txt       Кодировка UTF-16 LE c BOM    (таблица 1200)
2.txt       Кодировка ANSI               (таблица 20866)
Всё дело в кодировке. В аптеке всё должно быть четко.
Поэтому дайте четкую постановку с указанием кодировок файлов, рабочую пару файлов, можно потом думать.
Предыдущая пара файлов была не в этой кодировке. Скрипт отрабатывал нормально.
Спасибо)))
Законвертил оба в ANSI и пробежало менее чем за 5 секунд!!!
0
 Аватар для Angry Old Man
3600 / 753 / 317
Регистрация: 26.03.2022
Сообщений: 1,415
Записей в блоге: 1
10.01.2024, 18:36
А мне надо:
040296680013236878668085191;1345.00000000
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
Const N = 27, File1 = "D:\Мой контент\Загрузки\out\1.txt", File2 = "D:\Мой контент\Загрузки\out\2.txt"
T1 = Now
Set Dic = CreateObject("Scripting.Dictionary")
 
With CreateObject("Scripting.FileSystemObject")
    Set F1 = .OpenTextFile(File1, 1)
    Do While Not F1.AtEndOfStream
        i = Mid(F1.ReadLine, 1, N)
        If Not Dic.Exists(i) Then Dic.Add i, ""
    Loop
    F1.Close
    
    Set F2 = .OpenTextFile(File2, 1)
    Arr = Split(F2.ReadAll, vbCrLf)
    F2.Close
    
    Set F2 = .OpenTextFile(File2, 2, True)
    For Each j In Arr
        i = Split(j, ";")
        If UBound(i) >= 2 Then
            'If Dic.Exists(i(0)) Then F2.WriteLine i(0) & ";" & i(2)
            If Dic.Exists(i(0)) Then F2.WriteLine i(0) & ";" & LTrim(i(2))
        End If
    Next
    F2.Close
End With
T2 = Now
MsgBox CStr(T1) + vbCr + CStr(T2), 64
если перед числом не надо убрать пробелы, используйте закомментированную строку, а следующую строку удалите
2
Нарушитель
7166 / 2335 / 353
Регистрация: 10.12.2013
Сообщений: 8,082
10.01.2024, 23:02
На ступеньках сидели под дождем обнявшись, две девки в белье и кличными голосами пели про жестокого аптекаря — не отпускает героин
Как подобные задачи решаются у приличных людей.

во-первых, на человечьем языке формулировка задачи будет звучать так:

По содержимому 1-ой колонки найти общие строки в двух табличных текстовых файлах 1.txt и 2.txt,
Вывести данные строки для файла 2.txt.

по сути эти два текст. файла имеют тип CSV с разделителем ';'

1.txt
1C
1
2
3
4
5
6
7
046021930107341111bGnfE5sB5;;11;
0464001759112001008JUXR3YSY;;11;
0460518000695695h5CGMxbewb6;;11;
046054690044139467598388813;;11;
08436043014117WHCPOOTO8JFOP;;28;
08436043014117T326JIXYW27QV;;11;
08436043014117DOZ22TEVEBVP0;;11;
2.txt
1C
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
046021930107341111bGnfE5sB5;GОШWУВ4V34Ъ7ЩSYJИЗYTЫG;       580.00000000
0464001759112001008JUXR3YSY;ZЖАCЕБEFТ4IVIF2МA6КWБG;       165.00000000
0464001759112001008JUXDSWJF;ZЖАCЕБEFТ4IVIF2МA6КWБG;       165.00000000
0460518000695695h5CGMxbewb6;ТЪГAЛDITLАMМWOSЙХLХЪL0;       330.00000000
046054690044139467598388813;ЖВЙPHN1AМKUQ9Й7ПХGФД1М;       600.00000000
08436043014117WHCPOOTO8JFOP;П9ЪЖФWЛОО4ЪНС4BПVDZРИG;       200.00000000
08436043014117T326JIXYW27QV;П9ЪЖФWЛОО4ЪНС4BПVDZРИG;       200.00000000
08436043014117DOZ22TEVEBVP0;П9ЪЖФWЛОО4ЪНС4BПVDZРИG;       200.00000000
08436043014117A69VEFU7M3KW1;П9ЪЖФWЛОО4ЪНС4BПVDZРИG;       200.00000000
08436043014117ALICKEH6I17GR;П9ЪЖФWЛОО4ЪНС4BПVDZРИG;       200.00000000
04601669011466RKbbPNB5xjiFP;ЪЩЕIYHTАЖ4ЪЖS5TARL1МУМ;        17.00000000
04601669011466x1bkBK1gmCtaX;ЪЩЕIYHTАЖ4ЪЖS5TARL1МУМ;        17.00000000
046016690114668kGKSHUy7oMl0;ЪЩЕIYHTАЖ4ЪЖS5TARL1МУМ;        17.00000000
04601669011466RISevgvnLqoRN;ЪЩЕIYHTАЖ4ЪЖS5TARL1МУМ;        17.00000000
04601669011466uvyVowdpqm65V;ЪЩЕIYHTАЖ4ЪЖS5TARL1МУМ;        17.00000000
04601669011466jjPQnhql86rF8;ЪЩЕIYHTАЖ4ЪЖS5TARL1МУМ;        17.00000000
04601669011466FGo6t0LbV61f2;ЪЩЕIYHTАЖ4ЪЖS5TARL1МУМ;        17.00000000
04601669011466xGBEFXfDbf3AA;ЪЩЕIYHTАЖ4ЪЖS5TARL1МУМ;        17.00000000
04601669011466bBMcg5WqHCmCP;ЪЩЕIYHTАЖ4ЪЖS5TARL1МУМ;        17.00000000
04601669011466dJfImutxsmD3V;ЪЩЕIYHTАЖ4ЪЖS5TARL1МУМ;        17.00000000
04601669011466dhERWm34xWRlz;ЪЩЕIYHTАЖ4ЪЖS5TARL1МУМ;        17.00000000
04601669011466gcBoC4hkSNCGI;ЪЩЕIYHTАЖ4ЪЖS5TARL1МУМ;        17.00000000
04601669011466zFhQMS4cCHeJr;ЪЩЕIYHTАЖ4ЪЖS5TARL1МУМ;        17.00000000
04601669011466mOEZ49m63SgpK;ЪЩЕIYHTАЖ4ЪЖS5TARL1МУМ;        17.00000000
04601669011466cZ3ZVW9kyrMDC;ЪЩЕIYHTАЖ4ЪЖS5TARL1МУМ;        17.00000000
046016690114662PopernokIQr5;ЪЩЕIYHTАЖ4ЪЖS5TARL1МУМ;        17.00000000
04601669011466ELeaOstbDW4rC;ЪЩЕIYHTАЖ4ЪЖS5TARL1МУМ;        17.00000000
04601669011466n22VNyeCCR98n;ЪЩЕIYHTАЖ4ЪЖS5TARL1МУМ;        17.00000000
04601669011466qpJdnCPVoHzmo;ЪЩЕIYHTАЖ4ЪЖS5TARL1МУМ;        17.00000000
04601669011466myy4aVg0gFJ07;ЪЩЕIYHTАЖ4ЪЖS5TARL1МУМ;        17.00000000
04601669011466LcPD6ebPyM7ge;ЪЩЕIYHTАЖ4ЪЖS5TARL1МУМ;        17.00000000
во-вторых,
учитывая довольно большое количество строк ( около миллиона ) и
характер задачи, её целесообразно решать с помощью 'встраиваемой' БД SQLite,
реализованной в виде удобной утилиты ком.строки sqlite3.exe

Как это делается:

1) опишем две таблицы, в которые будем грузить эти два файла на языке SQL

Oracle 11 SQL
1
2
CREATE TABLE table2(column1 TEXT UNIQUE, column2 TEXT, column3 REAL)
CREATE TABLE table1(column1 TEXT UNIQUE)
для таблицы 1 достаточно иметь всего одну колонку, остальные не интересуют.
поскольку для первой колонки указан атрибут UNIQUE индекс создастся автоматически
и поиск будет происходить мгновенно.

2) Загрузим эти два CSV-файла каждый в свою таблицу, указав, что разделителем будет точка с запятой ;

3) С помощью SQL-выражения SELECT получим результат
Oracle 11 SQL
1
SELECT table2.* FROM table2 join table1 ON table1.column1=table2.column1
файл с инструкциями для sqlite3 будет выглядеть так:

proc.sql
SQL
1
2
3
4
5
6
7
8
CREATE TABLE table2(column1 TEXT UNIQUE, column2 TEXT, column3 REAL);
CREATE TABLE table1(column1 TEXT UNIQUE);
 
.separator ';'
.import 1.txt table1
.import 2.txt table2
 
SELECT table2.* FROM table2 JOIN table1 ON table1.column1=table2.column1
Выполнение:
Windows Batch file
1
sqlite3 < proc.sql > result.txt
итоговый файл с результатом
result.txt
JSON
1
2
3
4
5
6
7
046021930107341111bGnfE5sB5;GОШWУВ4V34Ъ7ЩSYJИЗYTЫG;580.0
0464001759112001008JUXR3YSY;ZЖАCЕБEFТ4IVIF2МA6КWБG;165.0
0460518000695695h5CGMxbewb6;ТЪГAЛDITLАMМWOSЙХLХЪL0;330.0
046054690044139467598388813;ЖВЙPHN1AМKUQ9Й7ПХGФД1М;600.0
08436043014117WHCPOOTO8JFOP;П9ЪЖФWЛОО4ЪНС4BПVDZРИG;200.0
08436043014117T326JIXYW27QV;П9ЪЖФWЛОО4ЪНС4BПVDZРИG;200.0
08436043014117DOZ22TEVEBVP0;П9ЪЖФWЛОО4ЪНС4BПVDZРИG;200.0
========================
установка sqlite3 из репозитория:
Windows Batch file
1
scoop install sqlite
1
51 / 50 / 3
Регистрация: 27.07.2019
Сообщений: 485
11.01.2024, 07:03  [ТС]
Цитата Сообщение от volodin661 Посмотреть сообщение
Как подобные задачи решаются у приличных людей.
во-вторых,
учитывая довольно большое количество строк ( около миллиона ) и
характер задачи, её целесообразно решать с помощью 'встраиваемой' БД SQLite,
реализованной в виде удобной утилиты ком.строки sqlite3.exe
Ну это уже космический корабль, дайте мне хоть чуть-чуть освоить велосипед (cmd/bat)
0
3449 / 1110 / 494
Регистрация: 29.05.2016
Сообщений: 4,566
11.01.2024, 15:10
farmsnab, на всякий случай ещё вариант:
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
@echo off
set "file_1=C:\test\1.txt"
set "file_2=C:\test\2.txt"
powershell -executionpolicy bypass -command "$data=([System.IO.File]::ReadAllText('%file_1%', [System.Text.Encoding]::Default)) -split [System.Environment]::NewLine;" ^
    "$list1 = [system.collections.generic.list[object]]::new();" ^
    "foreach ($a in $data) {$substrings=$a -split ';'; $list1.add([pscustomobject]@{Substring_1=$substrings[0]})};" ^
    "$data=([System.IO.File]::ReadAllText('%file_2%', [System.Text.Encoding]::Default)) -split [System.Environment]::NewLine;" ^
    "$list2 = [system.collections.generic.list[object]]::new();" ^
    "foreach ($a in $data) {$substrings=$a -split ';',2; $list2.add([pscustomobject]@{Substring_1=$substrings[0]; Substring_2=$substrings[1]})};" ^
    "$Join = [System.Linq.Enumerable]::Join($list1, $list2, [System.Func[Object,string]] {param ($x);$x.Substring_1}, [System.Func[Object, string]]{param ($y);$y.Substring_1}, [System.Func[Object,Object,Object]]{param ($x,$y);$y.substring_1 + ';' + $y.substring_2});" ^
    "$result = [System.Linq.Enumerable]::ToArray($join);" ^
    "$result | out-file '%file_2%'
pause
exit
1
Нарушитель
7166 / 2335 / 353
Регистрация: 10.12.2013
Сообщений: 8,082
11.01.2024, 20:44
Цитата Сообщение от Angry Old Man Посмотреть сообщение
vbs.
На моём 15-летнем ноуте Ваши данные обработались за 1'16"
PureBasic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Const N = 27, File1 = "D:\Мой контент\Загрузки\out\1.txt", File2 = "D:\Мой контент\Загрузки\out\2.txt"
T1 = Now
Set Dic = CreateObject("Scripting.Dictionary")
With CreateObject("Scripting.FileSystemObject")
    Set F2 = .OpenTextFile(File2, 1)
    Do While Not F2.AtEndOfStream
        i = Mid(F2.ReadLine, 1, N)
        If Not Dic.Exists(i) Then Dic.Add i, ""
    Loop
    F2.Close
Set F1 = .OpenTextFile(File1, 1)
    Arr = Split(F1.ReadAll, vbCrLf)
    F1.Close
Set F1 = .OpenTextFile(File1, 2, True)
    For Each j In Arr
        i = Mid(j, 1, N)
        If Dic.Exists(i) Then F1.WriteLine j
    Next
    F1.Close
End With
T2 = Now
MsgBox CStr(T1) + vbCr + CStr(T2), 64

Из природного любопытства:
perl
аналогичный vbs алгоритм. правда, код получился в 5 раз короче, но так всегда и было
Perl
1
2
3
4
open F1, "1.txt";
open F2, "2.txt";
$table{ substr($_,0,index($_,";")) }=1 while <F1>;
$table{ substr($_,0,index($_,";")) } ? print:0 while <F2>;
На моём 10-летнем ноуте (SSD) данные обработались за 0.5 sec

sql - решение - 4.5 sec, но там загрузка файлов в базу с'едает всё время;
если разделить, сначала загрузка файлов, потом выборка и измерить,
то загрузка файлов в базу - 4 sec, а сама выборка - 0.3 sec
1
bat-пропагандист
 Аватар для nekit270
981 / 183 / 76
Регистрация: 07.12.2022
Сообщений: 454
Записей в блоге: 12
11.01.2024, 21:29
Цитата Сообщение от volodin661 Посмотреть сообщение
решение - 4.5 sec
Цитата Сообщение от volodin661 Посмотреть сообщение
загрузка файлов в базу - 4 sec, а сама выборка - 0.3 sec
а еще 0.2 sec куда делись?
0
Нарушитель
7166 / 2335 / 353
Регистрация: 10.12.2013
Сообщений: 8,082
11.01.2024, 22:04
powershell ( тот же алгоритм )

proc.ps1
PowerShell
1
2
3
4
5
6
7
8
9
$dict = @{}
foreach( $line in [IO.File]::ReadLines("1.txt")) {
    $dict.Add($line.Substring(0,$line.IndexOf(";")),1)
}
foreach( $line in [IO.File]::ReadLines("2.txt")) {
    if ( $dict[$line.Substring(0,$line.IndexOf(";"))]) {
        $line
    }
}
PowerShell
1
measure-command { ./proc.ps1 }
4 sec
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
11.01.2024, 22:04

Поиск в текстовом файле всех слов, заданных в другом текстом файле
Поиск в текстовом файле всех слов, заданных в другом текстом файле...Выполнить задание параллельным алгоритмом Вот как я сделал: ...

Поиск в текстовом файле всех слов, заданных в другом текстом файле
Вообщем такое задание: Поиск в текстовом файле всех слов, заданных в другом текстом файле; Не могу понять почему не работает: ...

Как передать значение переменной PHP в одном файле в переменную JS в другом файле?
Подскажите пожалуйста, как передать значение PHP из одного файла в JS в другом. Везде облазил. Варианта только два. Но Cookies не работают...

Сравнение слов в одном файле со словами в другом файле
Здравствуйте! Суть задачи такая: 1. Первый файл - запросы с городами, второй файл - база городов РФ. Оба txt 2. Найти в запросах все...

Сравнение слов в одном файле со словами в другом файле
Здравствуйте! Суть задачи такая: 1. Первый файл - запросы с городами, второй файл - база городов РФ. Оба txt (для Excel пусть не файлы,...


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

Или воспользуйтесь поиском по форуму:
35
Ответ Создать тему
Новые блоги и статьи
Мобильное приложение 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, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru