py.user.nextСпасибо за подсказки.
Тогда я это всё переварю, сформирую второй алгоритм. Разработаю код. Проверю как он выполняется. Посмотрю сколько времени это занимает.
Только один вопрос у меня созрел, прежде чем я начну.
Понятно, что для начала мне лучше организовать работу с данными последовательно, что бы не запутаться.
Я так и собираюсь сделать.
Но нельзя ли функцию очистку исключить, задачу с переполнением решить введением в первоначальный алгоритм простой проверки условия seqN-seqi <= 0 в цикле N (строки 16, 26, 36, 61, 71), так как переполнение может возникнуть только в цикле N при определенных значениях I.
В тот момент, когда обнаружу, что например левая сторона условия seqN-seqi <= CWS приняла отрицательное или 0 значение, добавлю к seqN значение 4294967296. И буду это делать тогда, когда будет это переполнение в цикле N.
Например блок данные, в которых имеется переполнение:
No. Time port1 Seq CWS
100920 456.20 53023 - 100
100921 456.21 443 4294967294 -
100922 456.22 53023 - 100
100923 456.23 443 4294967295 -
100924 456.24 443 50 -
100925 456.25 443 130 -
100926 456.26 53023 - 100
100927 456.27 443 150 -
100928 456.28 443 170 -
100929 456.29 53023 - 100
100930 456.30 443 200 -
100931 456.31 443 210 -
100932 456.32 53023 - 100
100933 456.33 443 250 -
100934 456.34 443 255 -
Блок алгоритма с условием предварительной проверки seqN-seqi <= 0
00 Запускаю цикл для I от 1 до 11200494 и значением CWS.
…
01 I=100921 (следующий шаг цикла I в строке 00)
02 Цикл I=100921 начат со CWS=100.
03 Если в строке I=100921 значение port1 равно 443, извлекаю значения TimeI и seqI.
04 Time100921 = 456.21, seq100921 = 4294967294
05 Передаю в цикл N значение CWS из цикла I. Начальное значение CWS=100 в цикле N.
06 Запускаю цикл N от N=I+1 до 11200494 и значением CWS. от 100922 до 11200494 (крайнее значение).
07 N=100922 (первый шаг цикла на строке 06)
08 Цикл N=100922 начат со значением CWS=100.
09 Если в строке N=100922 значение port1 равно 53023, извлекаю значение CWS.
10 Присваиваю CWS=100.
11 Возвращаюсь к строке 06, беру следующее значение N=100923 и передаю CWS=100 в цикл N.
12 N=100923 (следующий шаг цикла на строке 06)
13 Цикл N=100923 начат со значением CWS=100.
14 Если в строке N=100923 значение port1 равно 443, извлекаю значения seqN.
15 seq100923 = 4294967295
16 Если seqN-seqi <= 0 то seq100923 = seq100923 + 4294967296
17 seq100923-seq100921 = 1, условие seqN-seqi <= 0 не выполняется, ничего не добавляю.
18 Проверяю условие seqN-seqi <= CWS. seq100923-seq100921 <= CWS. 4294967295-4294967294 <= 100. 1 <= 100 Условие соблюдается.
19 Если условие соблюдается возвращаюсь к строке 06 и беру следующее значение N=100924.
20 N=100924 (следующий шаг цикла на строке 06)
21 Цикл N=100924 начат со значением CWS=100.
22 N=100924 (следующий шаг цикла на строке 06)
23 Цикл N=100924 начат со значением CWS=100.
24 Если в строке N=100924 значение port1 равно 443, извлекаю значения seqN.
25 seq100924 = 50
26 Если seqN-seqi <= 0, то seq100924 = seq100924 + 4294967296
27 seq100924-seq100921 = -4 294 967 244, условие seqN-seqi <= 0 выполняется, добавляю 4294967296.
28 seq100924 = seq100924 + 4294967296
29 seq100924 = 4294967346
30 Проверяю условие seqN-seqi <= CWS. seq100924-seq100921 <= CWS. 4294967346-4294967294 <= 100. 52 <= 100 Условие соблюдается.
31 Если условие соблюдается возвращаюсь к строке 06 и беру следующее значение N=100925.
32 N=100925 (следующий шаг цикла на строке 06)
33 Цикл N=100925 начат со значением CWS=100.
34 Если в строке N=100925 значение port1 равно 443, извлекаю значения seqN.
35 seq100925 = 130
36 Если seqN-seqi <= 0, то seq100925 = seq100925 + 4294967296
37 seq100925-seq100921 = -4 294 967 164, условие seqN-seqi <= 0 выполняется, добавляю 4294967296.
38 seq100925 = seq100925 + 4294967296
39 seq100925 = 4294967426
40 Проверяю условие seqN-seqi <= CWS. seq100925-seq100921 <= CWS. 4294967426-4294967294 <= 100. 132 <= 100 Условие не соблюдается.
41 Ищу в цикле N (цикл N , начинающийся в строке 06), строку в которой условие соблюдалось последний раз.
42 Это строка N=100924.
43 В строке 100924 извлекаю значение Time100924 = 456.24.
44 Вычисляю TimeN-TimeI. Time100924-Time100921=456.24-456.21=0.03
45 Вывожу значение в файл csv.
46 Возвращаюсь к циклу I (строка 00) со следующим значением I=100922.
47 I=100922 (следующий шаг цикла I)
48 Если в строке I=100922 значение port1 равно 53023, извлекаю из неё значение CWS.
49 Присваиваю CWS=100.
50 Возвращаюсь к циклу I (строка 00), беру следующее значение I=100923 и передаю в цикл I значение CWS=100.
51 I=100923 (следующий шаг цикла I)
52 Цикл I=100923 начат со CWS=100.
53 Если в строке I=100923 значение port1 равно 443, извлекаю значения TimeI и seqI.
54 Time100923 = 456.23, seq100923 = 4294967295
55 Передаю в цикл N значение CWS из цикла I. Начальное значение CWS=100 в цикле N.
56 Запускаю цикл N от N=I+1 до 11200494 и значением CWS. от 100924 до 11200494 (крайнее значение).
57 N=100924 (первый шаг цикла N на строке 56)
58 Цикл N=100924 начат со значением CWS=100.
59 Если в строке N=100924 значение port1 равно 443, извлекаю значения seqN.
60 seq100924 = 50
61 Если seqN-seqi <= 0, то seq100924 = seq100924 + 4294967296
62 seq100924-seq100923 = -4 294 967 245, условие seqN-seqi <= 0 выполняется, добавляю 4294967296.
63 seq100924 = seq100924 + 4294967296
64 seq100924 = 4294967346
65 Проверяю условие seqN-seqi <= CWS. seq100924-seq100923 <= CWS. 4294967346-4294967295 <= 100. 51 <= 100 Условие соблюдается.
66 Если условие соблюдается возвращаюсь к строке 56 и беру следующее значение N=100925.
67 N=100925 (следующий шаг цикла на строке 56)
68 Цикл N=100925 начат со значением CWS=100.
69 Если в строке N=100925 значение port1 равно 443, извлекаю значения seqN.
70 seq100925 = 130
71 Если seqN-seqi <= 0, то seq100925 = seq100925 + 4294967295
72 seq100925-seq100923 = -4 294 967 164, условие seqN-seqi <= 0 выполняется, добавляю 4294967296.
73 seq100925 = seq100925 + 4294967296
74 seq100925 = 4294967426
75 Проверяю условие seqN-seqi <= CWS. seq100925-seq100923 <= CWS. 4294967426-4294967295 <= 100. 131 <= 100 Условие не соблюдается.
76 Ищу в цикле N (цикл N , начинающийся в строке 56), строку в которой условие соблюдалось последний раз.
77 Это строка N=100924.
78 В строке 100924 извлекаю значение Time100924 = 456.24.
79 Вычисляю TimeN-TimeI. Time100924-Time100921=456.24-456.23=0.01
80 Вывожу значение в файл csv.
81 Возвращаюсь к циклу I (строка 00), беру следующее значение I=100924 и передаю в цикл I значение CWS=100.
82 Цикл I=100924 начат со CWS=100.
83 Если в строке I=100924 значение port1 равно 443, извлекаю значения TimeI и seqI.
84 Time100924 = 456.24, seq100924 = 50
Далее (начиная с I=100924) модификация поля seq не потребуется, так как еще продолжительное время в циклах N для I-х строк не будет выполняться условие seqN-seqi <= 0.
Это позволит не обращаться к данным два раза и не модифицировать их.
Как Вы считаете?