Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Power Basic

Страница: 1 |

 

  Вопрос: Сортировка массива без учета регистра Добавлено: 07.03.05 14:06  

Автор вопроса:  ZagZag | ICQ: 295002202 
На ПБ есть замечательная ф-ция
ARRAY SORT имя_массива

Так вот, есть ли какой-нибудь флаг (Типа VB6 Option Compare Text) чтобы
массив строк сортировался без учета регистра?

Пример с учетом регистра:
до: A,b,B,a
после: A,B,a,b
Но мне нужно:
после: A,a,B,b

Ответить

  Ответы Всего ответов: 11  

Номер ответа: 1
Автор ответа:
 CyRax



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #1
Добавлено: 07.03.05 15:13
Там есть опция:
[,COLLATE {UCASE | cstring}]

Почитай хелп по Array Sort.

Ответить

Номер ответа: 2
Автор ответа:
 cresta



Вопросов: 117
Ответов: 1538
 Профиль | | #2 Добавлено: 08.03.05 09:00
Вот только с кириллицей регистронезависимого не получится.

Ответить

Номер ответа: 3
Автор ответа:
 CyRax



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #3
Добавлено: 08.03.05 16:08
IMO, он с кирилицей вообще не дружит. Только что отоброзить может.

Ответить

Номер ответа: 4
Автор ответа:
 alex



Вопросов: 84
Ответов: 453
 Профиль | | #4 Добавлено: 08.03.05 16:45
А если преобразовать кирилицу в Unicode оператором UCODE$ ?

:))

Ответить

Номер ответа: 5
Автор ответа:
 CyRax



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #5
Добавлено: 08.03.05 16:56
С юникодом работать неудобно, а вообще - попробуй.

Ответить

Номер ответа: 6
Автор ответа:
 cresta



Вопросов: 117
Ответов: 1538
 Профиль | | #6 Добавлено: 08.03.05 20:36
UCODE$ применить к массиву?
Ну тогда проще самому (да и лучше, со всех сторон) сортировку сделать

Ответить

Номер ответа: 7
Автор ответа:
 CyRax



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #7
Добавлено: 09.03.05 00:40
А вот и нет :)
Получилась регистронезависимая сортировка для кирилицы. Хелпы надо просто читать.

#Compile Exe

Function PbMain
 Dim MyPhraseA As String
 MyPhraseA="Ну это что то типа русского текста."
 Dim SortedA(Len(MyPhraseA)-1) As String*1 At StrPtr(MyPhraseA)

 Dim SortTemplate As String, X As Byte
 For x = 0 To 223
  SortTemplate = SortTemplate + Chr$(x)
 Next x
 For x = 192 To 223
  SortTemplate = SortTemplate + Chr$(x)
 Next x

 Array Sort SortedA(), Collate SortTemplate

 MsgBox MyPhraseA
End Function

Ответить

Номер ответа: 8
Автор ответа:
 cresta



Вопросов: 117
Ответов: 1538
 Профиль | | #8 Добавлено: 09.03.05 01:08
А, ну если свою табличку создать, то конечно, я имею ввиду, встроенная таблица не позволяет, с ней регистронезависимые получаются только латинские, а кириллица сортируется, но регистр имеет значение, т.е. получается, если есть массив с лат и рус словами, половина будет отсортирована регистронезависимо, половина - регистрозависимо.

А таблиц столько, что и не знаешь какую выбрать, то получаются кириллица сначала, то наоборот, латинские, то цифры, то знаки.

Ответить

Номер ответа: 9
Автор ответа:
 CyRax



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #9
Добавлено: 09.03.05 01:23
Чё? Нефига не понял :)
Когда нужно регистрозависимую делай

Array Sort SortedA()

а когда независимую то

Array Sort SortedA(), Collate SortTemplate


Не знаю правда как это скажется на скорости, но думаю всё же быстрее чем самому изобретать велосипед.

Ответить

Номер ответа: 10
Автор ответа:
 cresta



Вопросов: 117
Ответов: 1538
 Профиль | | #10 Добавлено: 09.03.05 02:30
Прекрасно я всё понял, тем более что совсем недавно делал сортировку массивов на асме, тоже регистронезависимую. И для сравнения брал pb-шный array sort. Кстати автору вопроса посылал исходник, но он чёто видимо не смог вычленить из кода саму сортировку, поэтому и запостил этот вопрос.

А на скорости это естественно скажется, и естественно в сторону ухудшения, т.к. нужно время на сопоставление каждому байту строки байта из таблицы.

Ответить

Номер ответа: 11
Автор ответа:
 CyRax



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #11
Добавлено: 09.03.05 03:26
 Это я нефига не понял из эпоса под номером 8. В смысле не понял что тебя не устраивает. :)
 Вроде всё работает как надо. Скорость наверное всё же будет медленей, но опять же нужно смотреть сам алгоритм или если лень - засечь время.

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам