Показать полную графическую версию : Проверка списка имен в цикле
bombording
23-12-2013, 14:21
Добрый день.
Имеется папка с файлами определённой структуры:
file001.sd
file002.sd
file003.sd
…
file009.sd
file00a.sd
file00b.sd
file00c.sd
….
file00z.sd
file010.sd
file011.sd
file012.sd
и т.д.
Как видно из структуры, файлы идут по порядку в определенной логической последовательности.
Задача:
Проверять все файлы в папке на последовательность. И в случае нарушения последовательности, выдавать ошибку. Например, если в последовательности file001 - file009 не будет файла file003 то выдавалась бы ошибка.
Как я вижу решение данной задачи:
Собрать все имена файлов в массив. А дальше для каждой последовательности создать свой цикл, со своим условием.
Собрать файлы в массив я смогу, а вот написать условие для отработки цикла с трудом смогу.
Помогите пожалуйста.
Option Explicit
Dim strSourceFolder
Dim arr10To36
Dim i, j, k
Dim strFileName
strSourceFolder = "E:\Песочница\0338"
arr10To36 = Split("0;1;2;3;4;5;6;7;8;9;a;b;c;d;e;f;g;h;i;j;k;l;m;n;o;p;q;r;s;t;u;v;w;x;y;z", ";")
With WScript.CreateObject("Scripting.FileSystemObject")
If .FolderExists(strSourceFolder) Then
For i = 0 To 35
For j = 0 To 35
For k = 0 To 35
If i = 0 And j = 0 And k = 0 Then
Else
strFileName = "file" & arr10To36(i) & arr10To36(j) & arr10To36(k) & ".sd"
If Not .FileExists(.BuildPath(strSourceFolder, strFileName)) Then
WScript.Echo "Can't find file [" & strFileName & "]."
WScript.Quit 2
End If
End If
Next
Next
Next
Else
WScript.Echo "Can't find source folder [" & strSourceFolder & "]."
WScript.Quit 1
End If
End With
WScript.Quit 0
bombording
23-12-2013, 15:40
Iska, Почему то скрипт упорно хочет найти file010.sd - которого быть не может т.к. после file009.sd идет файл file00a.sd
Iska, Почему то скрипт упорно хочет найти file010.sd - которого быть не может т.к. после file009.sd идет файл file00a.sd »
В Вашем примере файл «file010.sd» есть. В скрипте его наличие проверяется после проверки существования «file00z.sd». Для примера добавим вывод:
Option Explicit
Dim strSourceFolder
Dim arr10To36
Dim i, j, k
Dim strFileName
strSourceFolder = "E:\Песочница\0338"
arr10To36 = Split("0;1;2;3;4;5;6;7;8;9;a;b;c;d;e;f;g;h;i;j;k;l;m;n;o;p;q;r;s;t;u;v;w;x;y;z", ";")
With WScript.CreateObject("Scripting.FileSystemObject")
If .FolderExists(strSourceFolder) Then
For i = 0 To 35
For j = 0 To 35
For k = 0 To 35
If i = 0 And j = 0 And k = 0 Then
Else
strFileName = "file" & arr10To36(i) & arr10To36(j) & arr10To36(k) & ".sd"
If Not .FileExists(.BuildPath(strSourceFolder, strFileName)) Then
WScript.Echo "Can't find file [" & strFileName & "]."
WScript.Quit 2
Else
WScript.Echo "Find file [" & strFileName & "]."
End If
End If
Next
Next
Next
Else
WScript.Echo "Can't find source folder [" & strSourceFolder & "]."
WScript.Quit 1
End If
End With
WScript.Quit 0
А у Вас?
bombording
23-12-2013, 16:10
Iska, Вы правы. Просто я для теста скрипта скопировал половину файлов.
В таком случае как узнать, какой файл последний и прекратить выполнение скрипта на нём? Ведь файлов каждый раз может быть разное количество. Список может кончаться например и на file02b.sd и на file04s.sd или на другом имени.
В таком случае как узнать, какой файл последний и прекратить выполнение скрипта на нём? Ведь файлов каждый раз может быть разное количество. Список может кончаться например и на file02b.sd и на file04s.sd или на другом имени. »
Это входит в явное противоречие с:
Проверять все файлы в папке на последовательность. И в случае нарушения последовательности, выдавать ошибку. »
Надо полагать, теперь условие такое — «перечислить все отсутствующие файлы между первым и последним в алфавитном порядке», так? Я уже как-то делал здесь такое. Осталось найти среди всех своих сообщений :(.
bombording
23-12-2013, 17:37
Iska, Быть может будет проще, посчитать общее количество файлов типа file*.sd и закончить цикл на шаге равном количеству файлов?
Я уже как-то делал здесь такое. Осталось найти среди всех своих сообщений . »
Бесполезно разгребать эти авгиевы конюшни.
Iska, Быть может будет проще, посчитать общее количество файлов типа file*.sd и закончить цикл на шаге равном количеству файлов? »
Имеется ряд проблем при реализации такого подхода. «Мы пойдём другим путём».
Option Explicit
Dim strSourceFolder
Dim arr10To36
Dim objFSO
Dim x, y, z
Dim i, j, k
Dim strFileName
strSourceFolder = "E:\Песочница\0338"
arr10To36 = Split("0;1;2;3;4;5;6;7;8;9;a;b;c;d;e;f;g;h;i;j;k;l;m;n;o;p;q;r;s;t;u;v;w;x;y;z", ";")
Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
If objFSO.FolderExists(strSourceFolder) Then
If ExistLastName(x, y, z) Then
For i = 0 To x
For j = 0 To y
For k = 0 To z
If i = 0 And j = 0 And k = 0 Then
Else
strFileName = "file" & arr10To36(i) & arr10To36(j) & arr10To36(k) & ".sd"
If Not objFSO.FileExists(objFSO.BuildPath(strSourceFolder, strFileName)) Then
WScript.Echo "Can't find file [" & strFileName & "]."
End If
End If
Next
Next
Next
End If
Else
WScript.Echo "Can't find source folder [" & strSourceFolder & "]."
WScript.Quit 1
End If
Set objFSO = Nothing
WScript.Quit 0
'=============================================================================
'=============================================================================
Function ExistLastName(ByRef x, ByRef y, ByRef z)
ExistLastName = False
For x = 35 To 0 Step -1
For y = 35 To 0 Step -1
For z = 35 To 0 Step -1
If x = 0 And y = 0 And z = 0 Then
Else
strFileName = "file" & arr10To36(x) & arr10To36(y) & arr10To36(z) & ".sd"
If objFSO.FileExists(objFSO.BuildPath(strSourceFolder, strFileName)) Then
ExistLastName = True
Exit Function
End If
End If
Next
Next
Next
End Function
'=============================================================================
bombording
24-12-2013, 10:02
Iska, Работает! Но честно говоря не до конца понимаю как функция ExistLastName определяет что файл последний? За счет Step -1 ??
Угу. Тремя вложенными циклами генерирует имена файлов с конца (т.е., с «filezzz.sd») и проверяет их существование. Как только будет найден существующий файл — происходит выход из функции. Поскольку переменные «x», «y» и «z» передаются в параметры функции по ссылке, то значения этих переменных (а не их копий в случае передаче по значению) могут быть изменены внутри функции. Посему после выхода из функции мы имеем в переменных «x», «y» и «z» 36-тиричные цифробуквы, однозначно определяющие последний существующий файл в алфавитном порядке.
bombording
24-12-2013, 12:29
Iska, Большое спасибо! Весьма интересная реализация.
bombording
25-12-2013, 15:38
Iska, Кстати заметил проблему сейчас.
Новая версия скрипта(которая выдергивает имя последнего файла) работает немного не корректно.
Сначала скрипт проверяет цифровые имена 001 - 090
Затем скрипт проверяет имена (буква цифра) 0a1 - 0z9
При этом скрипт не проверяет имена 01a - 09z а так же не проверяет 0aa - 0zz.
Поэтому из 600 моих файлов, скрипт проверил только 100 и успешно завершился.
Хотя старый скрипт, который не проверял последний файл (ваш пост №4), отрабатывал по всем 600 файлам.
P.S. и в переменной arr10To36 две буквы g.
P.S. и в переменной arr10To36 две буквы g. »
Хех. Вот так и рождаются легенды. Замените вторую на «j». Тогда и первые скрипты не должны были корректно работать.
Кстати заметил проблему сейчас.
Новая версия скрипта(которая выдергивает имя последнего файла) работает немного не корректно.
Сначала скрипт проверяет цифровые имена 001 - 090
Затем скрипт проверяет имена (буква цифра) 0a1 - 0z9
При этом скрипт не проверяет имена 01a - 09z а так же не проверяет 0aa - 0zz.
Поэтому из 600 моих файлов, скрипт проверил только 100 и успешно завершился.
Хотя старый скрипт, который не проверял последний файл (ваш пост №4), отрабатывал по всем 600 файлам. »
Проверьте работоспособность после внесения исправления замеченной Вами описки.
bombording
25-12-2013, 16:38
Iska, я до тестирования исправил вторую g на j.
Последний скрипт по прежнему проходит по 100 файлам. А вот старый скрипт безупречно отрабатывает на всех 600 файлах.... единственный минус это то что он не знает о последнем файле.
Проблема в том что мой последний файл это:
file0h5.sd
В первом скрипте проверка проходит последовательно:
Сначала с 001 по 009 потом 00a - 00z затем с 010 - 019 и так далее.
Поэтому он захватывает все 600 файлов.
А вот новый скрипт, который проверяет имя последнего файла работает немного по другому:
Сначала с 001 по 090 затем с 0a1 - 0z9 и дойдя до 0h5 (последний файл) успешно останавливается не захватывая остальные файлы с маской 01a - 09z и 0aa - 0zz. Поэтому он и отрабатывает всего около 100 файлов.
Подозреваю что проблема в
For i = 0 To x
For j = 0 To y
For k = 0 To z
Если подставить вместо x,y,z - 35, то все работает. Но не работает проверка на последний файл... :(
bombording, ясно. Я посмотрю.
bombording
26-12-2013, 15:36
Iska, может быть тогда действительно сделать на базе вашего первого варианта скрипта подсчет файлов по маске и условие по которому цикл будет прекращаться по истечению количества шагов равным количеству файлов ?
Я тут сделал данную проверку. Но к сожалению умения хватило только на подсчет файлов по расширению....а не по маске file*.sd
Option Explicit
Dim strSourceFolder
Dim arr10To36
Dim i, j, k
Dim strFileName
Dim fso,f1,s1,o,n
strSourceFolder = "D:\!Project\script"
arr10To36 = Split("0;1;2;3;4;5;6;7;8;9;a;b;c;d;e;f;g;h;i;j;k;l;m;n;o;p;q;r;s;t;u;v;w;x;y;z", ";")
' count files
o = 0
n = 0
Set fso = CreateObject("Scripting.FileSystemObject")
For Each f1 in fso.GetFolder(strSourceFolder).Files
If InStr(1,f1.name,".sd",0) Then
o = o + 1
End If
Next
With WScript.CreateObject("Scripting.FileSystemObject")
If .FolderExists(strSourceFolder) Then
For i = 0 To 35
For j = 0 To 35
For k = 0 To 35
If i = 0 And j = 0 And k = 0 Then
Else
If n < o Then
strFileName = "file" & arr10To36(i) & arr10To36(j) & arr10To36(k) & ".sd"
If Not .FileExists(.BuildPath(strSourceFolder, strFileName)) Then
WScript.Echo "Can't find file [" & strFileName & "]."
WScript.Quit 2
Else
n = n + 1
End If
End If
End If
Next
Next
Next
Else
WScript.Echo "Can't find source folder [" & strSourceFolder & "]."
WScript.Quit 1
End If
End With
WScript.Quit 0
А вот новый скрипт, который проверяет имя последнего файла работает немного по другому:
Сначала с 001 по 090 затем с 0a1 - 0z9 »
Нет.
Я создал весь перечень из 46655 [36^3 - 1] файлов:
Option Explicit
Dim strSourceFolder
Dim arr10To36
Dim objFSO
Dim i, j, k
Dim strFileName
strSourceFolder = "E:\Песочница\0339"
arr10To36 = Split("0;1;2;3;4;5;6;7;8;9;a;b;c;d;e;f;g;h;i;j;k;l;m;n;o;p;q;r;s;t;u;v;w;x;y;z", ";")
Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
If objFSO.FolderExists(strSourceFolder) Then
For i = 0 To 35
For j = 0 To 35
For k = 0 To 35
If i = 0 And j = 0 And k = 0 Then
Else
strFileName = "file" & arr10To36(i) & arr10To36(j) & arr10To36(k) & ".sd"
With objFSO.CreateTextFile(objFSO.BuildPath(strSourceFolder, strFileName))
.Close
End With
WScript.Echo strFileName
End If
Next
Next
Next
Else
WScript.Echo "Can't find source folder [" & strSourceFolder & "]."
WScript.Quit 1
End If
Set objFSO = Nothing
WScript.Quit 0
'=============================================================================
Затем проверил Ваше утверждение, ограничившись файлом «file0az.sd»:
Option Explicit
Dim strSourceFolder
Dim arr10To36
Dim objFSO
Dim x, y, z
Dim i, j, k
Dim strFileName
strSourceFolder = "E:\Песочница\0339"
arr10To36 = Split("0;1;2;3;4;5;6;7;8;9;a;b;c;d;e;f;g;h;i;j;k;l;m;n;o;p;q;r;s;t;u;v;w;x;y;z", ";")
Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
If objFSO.FolderExists(strSourceFolder) Then
If ExistLastName(x, y, z) Then
For i = 0 To x
For j = 0 To y
For k = 0 To z
If i = 0 And j = 0 And k = 0 Then
Else
strFileName = "file" & arr10To36(i) & arr10To36(j) & arr10To36(k) & ".sd"
WScript.Echo strFileName
If strFileName = "file0az.sd" Then
WScript.Quit
End If
End If
Next
Next
Next
End If
Else
WScript.Echo "Can't find source folder [" & strSourceFolder & "]."
WScript.Quit 1
End If
Set objFSO = Nothing
WScript.Quit 0
'=============================================================================
'=============================================================================
Function ExistLastName(ByRef x, ByRef y, ByRef z)
ExistLastName = False
For x = 35 To 0 Step -1
For y = 35 To 0 Step -1
For z = 35 To 0 Step -1
If x = 0 And y = 0 And z = 0 Then
Else
strFileName = "file" & arr10To36(x) & arr10To36(y) & arr10To36(z) & ".sd"
If objFSO.FileExists(objFSO.BuildPath(strSourceFolder, strFileName)) Then
ExistLastName = True
Exit Function
End If
End If
Next
Next
Next
End Function
'=============================================================================
Я выделил существенные моменты:
file001.sd
file002.sd
file003.sd
file004.sd
file005.sd
file006.sd
file007.sd
file008.sd
file009.sd
file00a.sd
file00b.sd
file00c.sd
file00d.sd
file00e.sd
file00f.sd
file00g.sd
file00h.sd
file00i.sd
file00j.sd
file00k.sd
file00l.sd
file00m.sd
file00n.sd
file00o.sd
file00p.sd
file00q.sd
file00r.sd
file00s.sd
file00t.sd
file00u.sd
file00v.sd
file00w.sd
file00x.sd
file00y.sd
file00z.sd
file010.sd
file011.sd
file012.sd
file013.sd
file014.sd
file015.sd
file016.sd
file017.sd
file018.sd
file019.sd
file01a.sd
file01b.sd
file01c.sd
file01d.sd
file01e.sd
file01f.sd
file01g.sd
file01h.sd
file01i.sd
file01j.sd
file01k.sd
file01l.sd
file01m.sd
file01n.sd
file01o.sd
file01p.sd
file01q.sd
file01r.sd
file01s.sd
file01t.sd
file01u.sd
file01v.sd
file01w.sd
file01x.sd
file01y.sd
file01z.sd
file020.sd
file021.sd
file022.sd
file023.sd
file024.sd
file025.sd
file026.sd
file027.sd
file028.sd
file029.sd
file02a.sd
file02b.sd
file02c.sd
file02d.sd
file02e.sd
file02f.sd
file02g.sd
file02h.sd
file02i.sd
file02j.sd
file02k.sd
file02l.sd
file02m.sd
file02n.sd
file02o.sd
file02p.sd
file02q.sd
file02r.sd
file02s.sd
file02t.sd
file02u.sd
file02v.sd
file02w.sd
file02x.sd
file02y.sd
file02z.sd
file030.sd
file031.sd
file032.sd
file033.sd
file034.sd
file035.sd
file036.sd
file037.sd
file038.sd
file039.sd
file03a.sd
file03b.sd
file03c.sd
file03d.sd
file03e.sd
file03f.sd
file03g.sd
file03h.sd
file03i.sd
file03j.sd
file03k.sd
file03l.sd
file03m.sd
file03n.sd
file03o.sd
file03p.sd
file03q.sd
file03r.sd
file03s.sd
file03t.sd
file03u.sd
file03v.sd
file03w.sd
file03x.sd
file03y.sd
file03z.sd
file040.sd
file041.sd
file042.sd
file043.sd
file044.sd
file045.sd
file046.sd
file047.sd
file048.sd
file049.sd
file04a.sd
file04b.sd
file04c.sd
file04d.sd
file04e.sd
file04f.sd
file04g.sd
file04h.sd
file04i.sd
file04j.sd
file04k.sd
file04l.sd
file04m.sd
file04n.sd
file04o.sd
file04p.sd
file04q.sd
file04r.sd
file04s.sd
file04t.sd
file04u.sd
file04v.sd
file04w.sd
file04x.sd
file04y.sd
file04z.sd
file050.sd
file051.sd
file052.sd
file053.sd
file054.sd
file055.sd
file056.sd
file057.sd
file058.sd
file059.sd
file05a.sd
file05b.sd
file05c.sd
file05d.sd
file05e.sd
file05f.sd
file05g.sd
file05h.sd
file05i.sd
file05j.sd
file05k.sd
file05l.sd
file05m.sd
file05n.sd
file05o.sd
file05p.sd
file05q.sd
file05r.sd
file05s.sd
file05t.sd
file05u.sd
file05v.sd
file05w.sd
file05x.sd
file05y.sd
file05z.sd
file060.sd
file061.sd
file062.sd
file063.sd
file064.sd
file065.sd
file066.sd
file067.sd
file068.sd
file069.sd
file06a.sd
file06b.sd
file06c.sd
file06d.sd
file06e.sd
file06f.sd
file06g.sd
file06h.sd
file06i.sd
file06j.sd
file06k.sd
file06l.sd
file06m.sd
file06n.sd
file06o.sd
file06p.sd
file06q.sd
file06r.sd
file06s.sd
file06t.sd
file06u.sd
file06v.sd
file06w.sd
file06x.sd
file06y.sd
file06z.sd
file070.sd
file071.sd
file072.sd
file073.sd
file074.sd
file075.sd
file076.sd
file077.sd
file078.sd
file079.sd
file07a.sd
file07b.sd
file07c.sd
file07d.sd
file07e.sd
file07f.sd
file07g.sd
file07h.sd
file07i.sd
file07j.sd
file07k.sd
file07l.sd
file07m.sd
file07n.sd
file07o.sd
file07p.sd
file07q.sd
file07r.sd
file07s.sd
file07t.sd
file07u.sd
file07v.sd
file07w.sd
file07x.sd
file07y.sd
file07z.sd
file080.sd
file081.sd
file082.sd
file083.sd
file084.sd
file085.sd
file086.sd
file087.sd
file088.sd
file089.sd
file08a.sd
file08b.sd
file08c.sd
file08d.sd
file08e.sd
file08f.sd
file08g.sd
file08h.sd
file08i.sd
file08j.sd
file08k.sd
file08l.sd
file08m.sd
file08n.sd
file08o.sd
file08p.sd
file08q.sd
file08r.sd
file08s.sd
file08t.sd
file08u.sd
file08v.sd
file08w.sd
file08x.sd
file08y.sd
file08z.sd
file090.sd
file091.sd
file092.sd
file093.sd
file094.sd
file095.sd
file096.sd
file097.sd
file098.sd
file099.sd
file09a.sd
file09b.sd
file09c.sd
file09d.sd
file09e.sd
file09f.sd
file09g.sd
file09h.sd
file09i.sd
file09j.sd
file09k.sd
file09l.sd
file09m.sd
file09n.sd
file09o.sd
file09p.sd
file09q.sd
file09r.sd
file09s.sd
file09t.sd
file09u.sd
file09v.sd
file09w.sd
file09x.sd
file09y.sd
file09z.sd
file0a0.sd
file0a1.sd
file0a2.sd
file0a3.sd
file0a4.sd
file0a5.sd
file0a6.sd
file0a7.sd
file0a8.sd
file0a9.sd
file0aa.sd
file0ab.sd
file0ac.sd
file0ad.sd
file0ae.sd
file0af.sd
file0ag.sd
file0ah.sd
file0ai.sd
file0aj.sd
file0ak.sd
file0al.sd
file0am.sd
file0an.sd
file0ao.sd
file0ap.sd
file0aq.sd
file0ar.sd
file0as.sd
file0at.sd
file0au.sd
file0av.sd
file0aw.sd
file0ax.sd
file0ay.sd
file0az.sd
Видно, что после «file090.sd» идёт «file091.sd», а вовсе не «file0a1.sd», который идёт, как и положено, после «file0a0.sd».
и дойдя до 0h5 (последний файл) успешно останавливается не захватывая остальные файлы с маской 01a - 09z и 0aa - 0zz. »
Тут, если честно, ничего не понял. «file01a.sd» и последующие превосходно попадают в перебор.
Таким образом, я пока не могу подтвердить сделанные Вами выводы. Скорее наоборот.
Как мы можем поступить? Создайте перечень Ваших файлов:
dir /b file*.sd >"List.txt"
Полученный «List.txt» упакуйте в архив и выложите сюда.
bombording
27-12-2013, 09:34
Как мы можем поступить? Создайте перечень Ваших файлов: »
Попробуйте исполнить первый ваш скрипт и второй.
Первый отработает так (и это правильно, т.к. скрипт обработает все 617 файлов)
file001.SD
file002.SD
file003.SD
file004.SD
file005.SD
file006.SD
file007.SD
file008.SD
file009.SD
file00a.SD
file00b.SD
file00c.SD
и т.д.
Второй так (обработается только около 100 файлов из 617):
file001.SD
file002.SD
file003.SD
file004.SD
file005.SD
file006.SD
file007.SD
file008.SD
file009.SD
file010.SD
file011.SD
и т.д.
bombording, кажись, дошло. Буду думать.
кажись, дошло. »
Политкорректно это называется «Лучшее — враг хорошего». А по-простому — «меньше надо выёживаться».
Пробуйте:
Option Explicit
Dim strSourceFolder
Dim arr10To36
Dim objFSO
Dim x, y, z
Dim i, j, k
Dim strFileName
Dim strLastFileName
strSourceFolder = "E:\Песочница\0340"
arr10To36 = Split("0;1;2;3;4;5;6;7;8;9;a;b;c;d;e;f;g;h;i;j;k;l;m;n;o;p;q;r;s;t;u;v;w;x;y;z", ";")
Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
If objFSO.FolderExists(strSourceFolder) Then
If ExistLastName(x, y, z) Then
strLastFileName = "file" & arr10To36(x) & arr10To36(y) & arr10To36(z) & ".sd"
For i = 0 To 35
For j = 0 To 35
For k = 0 To 35
If i = 0 And j = 0 And k = 0 Then
Else
strFileName = "file" & arr10To36(i) & arr10To36(j) & arr10To36(k) & ".sd"
If Not objFSO.FileExists(objFSO.BuildPath(strSourceFolder, strFileName)) Then
WScript.Echo "Can't find file [" & strFileName & "]."
End If
If strFileName = strLastFileName Then
WScript.Quit 0
End If
End If
Next
Next
Next
End If
Else
WScript.Echo "Can't find source folder [" & strSourceFolder & "]."
WScript.Quit 1
End If
Set objFSO = Nothing
WScript.Quit 0
'=============================================================================
'=============================================================================
Function ExistLastName(ByRef x, ByRef y, ByRef z)
ExistLastName = False
For x = 35 To 0 Step -1
For y = 35 To 0 Step -1
For z = 35 To 0 Step -1
If x = 0 And y = 0 And z = 0 Then
Else
If objFSO.FileExists(objFSO.BuildPath(strSourceFolder, "file" & arr10To36(x) & arr10To36(y) & arr10To36(z) & ".sd")) Then
ExistLastName = True
Exit Function
End If
End If
Next
Next
Next
End Function
'=============================================================================
Попробуйте исполнить первый ваш скрипт и второй. »
Дело в том, что пока я манипулировал на полных списках («001»-«zzz»), моя логическая ошибка никак не проявлялась. Стоило же только взять ограниченный список (до «zzz») — сразу стал виден мой несусветный ляп. Увы. Приношу Вам свои извинения.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.