Вверх ↑
Этот топик читают: Гость
Ответов: 332
Рейтинг: 6
#1: 2019-07-07 14:30:39 ЛС | профиль | цитата
Почему FileSearch после поиска файлов в одной папке выводит такой список:
11-1024.jpg
12-1024.jpg
13-1024.jpg
14-1024.jpg
15-1024.jpg
16-1024.jpg
17-1024.jpg
18-1024.jpg
19-1024.jpg
2-1024.jpg
20-1024.jpg
21-1024.jpg
22-1024.jpg
23-1024.jpg

Я даже в Windows так не смогу их упорядочить, после 19-1024.jpg идет 2-1024.jpg, потом 20-1024.jpg, после 19-1024.jpg должен быть 20-1024.jpg. Как можно файлы правильно отсортировать после поиска? Пробовал ArraySort, так он точно так их сортирует как и FileSearch. В папке 500 картинок с числовыми именами, мне нужно получить список состоящий их пути с именем файла только с нормальной сортировкой, а то получается 2-1024.jpg, потом 20-1024.jpg и т.д. ODialog не подходит. Если например 500 файлов записать как 0001.jpg до 0500.jpg, то первым в найденном списке файлов почему то будет 0500.jpg, потом 0001.jpg, 0002.jpg, 0003.jpg и.т.д, почему первым он 0500.jpg сортирует и как отсортировать по человечески?
Add(MainForm,16510308,91,119)
{
Width=371
Height=265
}
Add(Button,11319419,161,119)
{
Left=50
Top=185
Caption="Sort1"
link(onClick,14626102:doSort,[])
}
Add(ListBox,14626102,217,84)
{
Left=20
Top=20
Width=150
Height=160
Strings=#11:11-1024.jpg|11:13-1024.jpg|11:12-1024.jpg|11:21-1024.jpg|11:14-1024.jpg|11:17-1024.jpg|11:15-1024.jpg|11:18-1024.jpg|11:19-1024.jpg|10:2-1024.jpg|11:20-1024.jpg|11:22-1024.jpg|11:16-1024.jpg|11:23-1024.jpg|
Point(doReplace)
Point(doSort)
}
Add(Button,2739367,161,154)
{
Left=230
Top=185
Caption="Sort2"
link(onClick,1595220:doSort,[])
}
Add(ListBox,9150339,280,217)
{
Left=185
Top=20
Width=150
Height=160
Point(doReplace)
Point(doSort)
}
Add(ArraySort,1595220,231,154)
{
link(onEndSort,5373438:doEnum,[(275,160)(275,181)(219,181)(219,223)])
link(Array,14626102:Array,[])
}
Add(ArrayEnum,5373438,231,217)
{
link(onItem,9150339:doAdd,[])
link(Array,1595220:ArraySort,[])
}

Редактировалось 1 раз(а), последний 2019-07-07 14:59:19
карма: 2

0
vip
#1.1контекстная реклама от партнеров
Ответов: 82
Рейтинг: 3
#2: 2019-07-07 14:59:16 ЛС | профиль | цитата
С какой сортировкой выдает FileSearch проверить не могу, а вот список строк сортируется по возрастанию первого символа в строковом виде, а не по математическому номеру.
Тест схема


Add(StrList,449060,224,91)
{
Strings=#11:2-1024.jpg |12:11-1024.jpg |12:12-1024.jpg |12:13-1024.jpg |12:14-1024.jpg |12:15-1024.jpg |12:16-1024.jpg |12:17-1024.jpg |12:18-1024.jpg |12:19-1024.jpg |12:20-1024.jpg |12:21-1024.jpg |12:22-1024.jpg |11:23-1024.jpg|8:0001.jpg|8:0002.jpg|8:0003.jpg|8:0004.jpg|8:0500.jpg|
Point(doSort)
}
Add(MainForm,2953706,126,98)
{
}
Add(ListBox,2354911,287,133)
{
Left=115
Top=5
Width=265
Height=250
Align=3
}
Add(Button,1095866,126,147)
{
Left=15
Top=20
link(onClick,8678388:doEvent1,[])
}
Add(Hub,8678388,175,147)
{
link(onEvent1,449060:doSort,[(207,153)(207,125)])
link(onEvent2,9143772:doData,[])
}
Add(DoData,9143772,224,154)
{
link(onEventData,2354911:doText,[])
link(Data,449060:Text,[])
}

--- Добавлено в 2019-07-07 15:10:38

Явно нужно переводить строки в числа, но как это делать корректно - хз. Уважаемые гуру ХиАсма, наверное, подскажут.

Редактировалось 1 раз(а), последний 2019-07-07 15:10:38
карма: 1

0
Ответов: 332
Рейтинг: 6
#3: 2019-07-07 15:16:02 ЛС | профиль | цитата
Sersey писал(а):
после 19-1024.jpg идет 2-1024.jpg, потом 20-1024.jpg, после 19-1024.jpg должен быть 20-1024.jpg

У вас так же.
Сделал программу по загрузке картинок на сайт. Только сервер после мультизагрузки всех картинок выдает список ссылок, в них нет имен, просто набор символов и если неправильная сортировка при загрузке будет (Не так как в Windows по имени), то потом непонятно где какая картинка. Можно конечно при получении ссылок присвоить каждой ссылке имя картинки в том порядке как они загружались, но тоже плохой вариант. Но нужно загружать в том порядке как и в проводнике Windows сортировка по имени. Почему Windows сортирует по имени правильно, а в Hiasm как то по особому после 19-1024.jpg идет 2-1024.jpg, потом 20-1024.jpg ?
карма: 2

0
Ответов: 82
Рейтинг: 3
#4: 2019-07-07 15:23:11 ЛС | профиль | цитата
Sersey писал(а):
после 19-1024.jpg идет 2-1024.jpg, потом 20-1024.jpg

строковой формат, 2 > 1 в первом символе строки.

--- Добавлено в 2019-07-07 15:24:16

любая строка начинающаяся с "1" будет меньше любой строки начинающейся с "2"

--- Добавлено в 2019-07-07 15:50:56

Sersey писал(а):
Почему Windows сортирует по имени правильно

Windows потребовалось почти 25 лет и примерно 20-30 ГБт на диске, чтобы "правильно" сортировать имена файлов

Редактировалось 2 раз(а), последний 2019-07-07 15:50:56
карма: 1

0
Ответов: 332
Рейтинг: 6
#5: 2019-07-07 16:35:25 ЛС | профиль | цитата
На форумах почитал, нужно все имена файлов привести к наибольшему количеству символов и если короткий, то слева добавить нули 2-1024.jpg -> 02-1024.jpg и будет сортировка правильная, понять не могу как это сделать, если еще перед именем файла будет путь к нему, отсортировать, потом опять поменять на старые имена. Чтобы такую простейшую операцию сделать, нужно схему километровую городить, а если допустим этих файлов нужно будет найти 10000, вот это тормоза будут
карма: 2

0
Ответов: 1416
Рейтинг: 97
#6: 2019-07-07 17:26:03 ЛС | профиль | цитата
все имена файлов привести к наибольшему количеству символов и если короткий, то слева добавить нули 2-1024.jpg -> 02-1024.jpg и будет сортировка правильная
Потому, что по "алфавиту". (в проводнике, или в Total Commander скорее так оно и есть).
А можно просто пузырьковую сортировку применить по числам, если свой список делаешь.
1 Глава или Глава.1
2 Глава или Глава.2
........
10 Глава или Глава.10
11 Глава или Глава.11
......
20 Глава или Глава.20
21 Глава или Глава.21

Причём лучше добавлять поэтому алгоритму, нежели сортировать его целиком.
Если меньше 10 000, то разницу практически нельзя ущучить.

Редактировалось 3 раз(а), последний 2019-07-07 17:39:36
карма: 3

0
Ответов: 841
Рейтинг: 315
#7: 2019-07-07 18:12:46 ЛС | профиль | цитата
Sersey, а если вот так попробовать?
Add(MainForm,16510308,434,238)
{
Width=451
Height=323
}
Add(Button,11319419,434,308)
{
Left=165
Top=260
Width=180
Caption="Sort"
link(onClick,5238234:doEnum,[])
}
Add(ListBox,14626102,539,238)
{
Left=20
Top=20
Width=95
Height=225
Strings=#11:11-1024.jpg|11:13-1024.jpg|11:12-1024.jpg|11:21-1024.jpg|11:14-1024.jpg|11:17-1024.jpg|11:15-1024.jpg|11:18-1024.jpg|11:19-1024.jpg|10:2-1024.jpg|11:20-1024.jpg|11:22-1024.jpg|11:16-1024.jpg|11:23-1024.jpg|
Point(doReplace)
}
Add(ListBox,9150339,658,308)
{
Left=125
Top=20
Width=95
Height=225
Point(doReplace)
}
Add(ArrayEnum,5238234,553,308)
{
link(onItem,8553248:doReplace,[])
link(onEndEnum,4038917:doSort,[(598,321)(598,377)])
link(Array,14626102:Array,[])
}
Add(Replace,8553248,609,308)
{
SubStr="-"
DestStr="0"
link(onReplace,9150339:doAdd,[])
}
Add(ArraySort,4038917,672,371)
{
ArrayType=2
link(onEndSort,5373438:doEnum,[(719,377)(719,416)(660,416)(660,440)])
link(Array,9150339:Array,[])
}
Add(ListBox,11398401,738,434)
{
Left=230
Top=20
Width=95
Height=225
Point(doReplace)
}
Add(ArrayEnum,5373438,672,434)
{
link(onItem,11398401:doAdd,[])
link(onEndEnum,16000239:doEnum,[(728,447)(728,515)])
link(Array,4038917:ArraySort,[])
}
Add(ListBox,12172627,853,509)
{
Left=340
Top=20
Width=95
Height=225
Point(doReplace)
}
Add(ArrayEnum,16000239,752,509)
{
link(onItem,9686188:doStrCat,[])
link(Array,11398401:Array,[])
}
Add(StrCat,9686188,805,509)
{
Str2=".jpg"
link(onStrCat,12172627:doAdd,[])
}
Только тут лишний листбокс для глаза.

--- Добавлено в 2019-07-07 18:25:04

Но нули можно и не добавлять.

Add(MainForm,16510308,714,231)
{
Width=245
Height=323
}
Add(Button,11319419,721,301)
{
Left=30
Top=260
Width=180
Caption="Sort"
link(onClick,4038917:doSort,[])
}
Add(ArraySort,4038917,784,301)
{
ArrayType=2
link(onEndSort,5373438:doEnum,[(828,307)(828,348)(772,348)(772,370)])
link(Array,2587102:Array,[])
}
Add(ListBox,11398401,899,364)
{
Left=125
Top=20
Width=95
Height=225
Point(doReplace)
}
Add(ArrayEnum,5373438,784,364)
{
link(onItem,9686188:doStrCat,[])
link(Array,4038917:ArraySort,[])
}
Add(StrCat,9686188,840,364)
{
Str2=".jpg"
link(onStrCat,11398401:doAdd,[])
}
Add(ListBox,2587102,770,231)
{
Left=20
Top=20
Width=95
Height=225
Strings=#11:11-1024.jpg|11:13-1024.jpg|11:12-1024.jpg|11:21-1024.jpg|11:14-1024.jpg|11:17-1024.jpg|11:15-1024.jpg|11:18-1024.jpg|11:19-1024.jpg|10:2-1024.jpg|11:20-1024.jpg|11:22-1024.jpg|11:16-1024.jpg|11:23-1024.jpg|
Point(doReplace)
}


Редактировалось 2 раз(а), последний 2019-07-07 18:25:04
карма: 0

0
Ответов: 1416
Рейтинг: 97
#8: 2019-07-07 18:26:11 ЛС | профиль | цитата
kamakama, а если 1024 заменить на слово глава, а ещё хуже на названия глав, или песен?
Нужен универсальный алгоритм, чтоб каждый раз колесо не изобретать.
fox-video всё правильно говорит.

Редактировалось 3 раз(а), последний 2019-07-07 18:30:29
карма: 3

0
Ответов: 841
Рейтинг: 315
#9: 2019-07-07 18:31:46 ЛС | профиль | цитата
flint2, зашел сейчас на гугл фото, там все названия только из цифр и расширения. Но каждый думает по своему.
карма: 0

0
Ответов: 9820
Рейтинг: 340
#10: 2019-07-07 19:08:05 ЛС | профиль | цитата
Sersey писал(а):
Если например 500 файлов записать как 0001.jpg до 0500.jpg, то первым в найденном списке файлов почему то будет 0500.jpg, потом 0001.jpg, 0002.jpg, 0003.jpg и.т.д, почему первым он 0500.jpg сортирует и как отсортировать по человечески?

1) У меня возникли подозрения, что народ настолько далек от реальной жизни, что даже перестал понимать, что в файловой системе файлы "лежат" в своем порядке, не имеющем никакого отношения к какой либо сортировке. Обычно - в порядке занесения в файловую систему.
Типа: мало ли какая вьюшка как и в каком порядке захочет чего показать... Файловой системе -- ПОФИГ. И должно быть пофиг.
FileSearch обращается именно к файловой системе. И чего там у тебя при этом проводник показывает - всем по барабану.
Поэтому и 500.jpg не там, где ты размечтался.

2) В Вашем случае отсортировать "по человечески" не так уж и сложно:
Add(MainForm,16510308,259,98)
{
Width=203
Height=265
link(onCreate,5323968:doEnum,[])
}
Add(Button,11319419,259,140)
{
Left=36
Top=192
Width=111
Caption="Sort"
Data=Integer(0)
link(onClick,16470224:doSortDigit,[])
}
Add(StringTable,16470224,378,112)
{
Left=14
Top=21
Width=154
Height=161
Columns=#5:файлы|
Point(doSortExtCmp)
Point(doSortDigit)
Point(ExtCmp)
}
Add(StrList,4122088,308,56)
{
Strings=#11:11-1024.jpg|11:12-1024.jpg|11:13-1024.jpg|11:14-1024.jpg|11:15-1024.jpg|11:16-1024.jpg|11:17-1024.jpg|11:18-1024.jpg|11:19-1024.jpg|10:2-1024.jpg|11:20-1024.jpg|11:21-1024.jpg|11:22-1024.jpg|11:23-1024.jpg|
}
Add(ArrayEnum,5323968,322,112)
{
link(onItem,16470224:doAdd,[])
link(Array,4122088:Array,[])
}

3) В более изощренных случаях сокрытия порядкового номера в имени файла следует использовать doSortExtCmp. Совместно с верхней точкой ExtCmp, к которой следует подключить свою схему парсинга/сравнения.
Почему это есть только в таблицах, но нету в StrList или WinList -- просто НЕ ПОМНЮ.

Редактировалось 3 раз(а), последний 2019-07-07 19:11:29
карма: 8

0
Ответов: 332
Рейтинг: 6
#11: 2019-07-07 19:32:33 ЛС | профиль | цитата
Да отлично сортирует. Спасибо. И в ArraySort такой сортировки тоже нет

--- Добавлено в 2019-07-07 20:13:30

Только что проверил на реальном примере. Сначала файлы ищутся и выводятся в StrList только имена файлов, если сразу в таблицу, то опять не сортируются, если полный путь к файлам, то тоже не сортируются. Короче наконец получаем правильно отсортированный список имен файлов. Потом соединяем путь и имена файлов

Редактировалось 3 раз(а), последний 2019-07-07 20:31:36
карма: 2

0
Ответов: 332
Рейтинг: 6
#12: 2019-07-07 20:45:57 ЛС | профиль | цитата
Готовый алгоритм поиска с сортировкой

Add(MainForm,16510308,28,126)
{
Width=950
Height=493
}
Add(Button,11319419,77,126)
{
Left=21
Top=2
Width=96
Caption="Sort"
Data=Integer(0)
link(onClick,4160889:doBrowse,[])
}
Add(StringTable,16470224,364,147)
{
Left=14
Top=21
Width=154
Height=161
Visible=1
Columns=#5:файлы|
Point(doSortExtCmp)
Point(doSortDigit)
Point(ExtCmp)
Point(Strings)
}
Add(Memo,3559153,518,196)
{
Left=15
Top=25
Width=915
Height=420
ScrollBars=2
}
Add(ArrayEnum,12459184,378,196)
{
link(onItem,11903282:doStrCat,[])
link(Array,16470224:Strings,[])
}
Add(Hub,3891663,336,189)
{
link(onEvent1,16470224:doSortDigit,[(357,195)(357,181)])
link(onEvent2,12459184:doEnum,[])
}
Add(FileSearch,11263694,217,133)
{
SubDir=1
FullName=1
link(onSearch,1151140:doAdd,[])
link(onEndSearch,9673017:doEnum,[(260,146)(260,188)])
link(Dir,9089307:Var2,[])
}
Add(Edit,6896934,224,77)
{
Left=125
Top=2
Width=615
Text=""
}
Add(StrList,1151140,273,133)
{
}
Add(ArrayEnum,9673017,287,182)
{
link(onItem,16470224:doAdd,[(330,188)(330,153)])
link(onEndEnum,3891663:doEvent1,[])
link(Array,1151140:Array,[])
}
Add(StrCat,6227129,462,196)
{
link(onStrCat,3559153:doAdd,[])
link(Str1,9089307:Var3,[(468,117)])
}
Add(GetDataEx,9089307,224,112)
{
link(Data,6896934:Text,[])
}
Add(Browse,4160889,147,126)
{
NewStyle=0
link(onBrowse,10449811:doEvent1,[])
}
Add(Hub,10449811,189,126)
{
link(onEvent1,6896934:doText,[(213,132)(213,83)])
link(onEvent2,11263694:doSearch,[])
}
Add(StrCat,11903282,420,196)
{
Str1="\"
link(onStrCat,6227129:doStrCat,[])
}

карма: 2

0
Ответов: 1267
Рейтинг: 67
#13: 2019-07-08 00:21:03 ЛС | профиль | цитата
Sersey, Есть еще MST_SortInCol, который работает с MtStrTbl
карма: 2

0
13
Сообщение
...
Прикрепленные файлы
(файлы не залиты)