|
Сравнение двух СтрокТекста | ☑ | ||
---|---|---|---|---|
0
Csar
19.08.13
✎
14:27
|
Всем привет. К моему удивлению пришлось обратиться сюда с вроде бы простым вопросом, ибо поиск на просторах интернета не дал результатов (видимо слишком простой вопрос).
Вопрос: Что представляет из себя сравнение двух строк текста? С равенством все понятно, а что означает следующая строка?: Строка1, Строка2 - некие переменные строкового типа
Правильно ли я понимаю, что программа сначала смотрит на длину строки (если Длина(СТрока1)>Длина(Строка2) Тогда Истина), если Длины равны, то идет посимвольное сравнение по кодам символов? И если первый неодинаковый код символа у Строка1 > того же кода сивола у Строка2, то Истина? |
|||
1
Wobland
19.08.13
✎
14:27
|
ищи лексическое сравнение (как-то так)
|
|||
2
Starhan
19.08.13
✎
14:28
|
(0) ты какой-то не тру 1сниг.
|
|||
3
Csar
19.08.13
✎
14:29
|
(2) поясни.
|
|||
4
Csar
19.08.13
✎
14:30
|
+ (0) или все же сравнение тут по количеству символов?
|
|||
5
mikecool
19.08.13
✎
14:30
|
(4) нет, не только
|
|||
6
Starhan
19.08.13
✎
14:30
|
(3)
Уже бы за пру минут сам проверил, все свои догадки. |
|||
7
Odavid
19.08.13
✎
14:31
|
(3) 1С вообще не так работает, как привыкли программисты других языков.
И практика зачастую показывает, что в 1С реализуют наиболее худшие (но на скорую руку) алгоритмы. |
|||
8
Odavid
19.08.13
✎
14:32
|
(5) ну и что болльше - "ВуХоДаСтР" или "вУхОдАсТр"??
|
|||
9
Csar
19.08.13
✎
14:34
|
(6) я все как то откладывал это) Видимо вопрос и впрямь нестандартный.
(1) с лексикой еще хуже в поисковиках) |
|||
10
mikecool
19.08.13
✎
14:34
|
(8) мне пох
|
|||
11
mikecool
19.08.13
✎
14:35
|
"ВуХоДаСтР" > "вУхОдАсТр" = Истина
в табло за три секунды, лентяй |
|||
12
Odavid
19.08.13
✎
14:35
|
(10)>> нет, не только
ljcnjqysq jndtn ^) |
|||
13
Odavid
19.08.13
✎
14:36
|
(11) хорошо, и что это значит?
|
|||
14
mikecool
19.08.13
✎
14:41
|
(13) то и значит, что учитывается сравнение по кодам символов
|
|||
15
Odavid
19.08.13
✎
14:42
|
(14) и - логика сравнения? то бишь - практическое применение сравнения по кодам?
|
|||
16
Starhan
19.08.13
✎
14:43
|
да по кодам посимвольно сразу.
|
|||
17
Csar
19.08.13
✎
14:43
|
(14) значит внизу у меня мысля правильная в (0)?
|
|||
18
Csar
19.08.13
✎
14:44
|
ВуХоДаСтР > вУхОдАсТр
|
|||
19
hhhh
19.08.13
✎
14:45
|
(9) у 1с нету сравнения. Она берет его из SQL или из Windows, если файловая.
|
|||
20
Csar
19.08.13
✎
14:46
|
Провел исследование и оказалось, что моя мысль была правильной.
Сравнение разбивается на 2 этапа: 1) Сравнение по длине строки 2) Сравнение по кодам символов посимвольно |
|||
21
1Сергей
19.08.13
✎
14:46
|
(20) длина строки не сравнивается
|
|||
22
Starhan
19.08.13
✎
14:46
|
(20) :) Скажи мне "В">"АБ"
|
|||
23
MSII
19.08.13
✎
14:48
|
(20) Только 2, поскольку включает в себя 1
|
|||
24
Csar
19.08.13
✎
14:49
|
(21) Сравнивается. Проверил
(22) Больше. В > АБ |
|||
25
1Сергей
19.08.13
✎
14:50
|
(24) Просто, код символа конца строки = 0
|
|||
26
Csar
19.08.13
✎
14:50
|
(23) Не, я имел ввиду так:
Сравнивается код первого символа - если одинаковый, то переходим ко второму, иначе Возвращаем > или < |
|||
27
hhhh
19.08.13
✎
14:50
|
(24) значит не сравнивается
|
|||
28
Starhan
19.08.13
✎
14:51
|
(24) не сравнивается. Просто при строках с одинаковым началом АБ и АБВ получается что В больше чем ничего.
|
|||
29
Csar
19.08.13
✎
14:51
|
(25) Да, похоже, что так. Значит только посимвольное сравнение
|
|||
30
1Сергей
19.08.13
✎
14:52
|
Аллилуйя!
|
|||
31
Csar
19.08.13
✎
14:53
|
Всем спасибо!
|
|||
32
hhhh
19.08.13
✎
14:53
|
(31) вообще-то это было 30 лет назад так. Теперь существуют алгоритмы сравнения, в которых свои правила для каждого языка, и от кодов символов не зависит.
|
|||
33
hhhh
19.08.13
✎
14:54
|
и то что вы вычислили для букв А, Б и В для других символов может и не так сравниваться.
|
|||
34
Csar
19.08.13
✎
14:55
|
(33) чисто из любопытства. Как сравнивается в другом каком-нибудь языке?
|
|||
35
1Сергей
19.08.13
✎
14:55
|
(33) ты это... нафига себе жизнь усложняешь? В 1С всё просто - посимвольное сравнение и всё.
|
|||
36
Тролль главный
19.08.13
✎
14:56
|
Почему отношение порядка строк не коррелирует с сортировками в запросах?
|
|||
37
Csar
19.08.13
✎
14:59
|
(36) я не понял вопроса
|
|||
38
aka AMIGO
19.08.13
✎
15:04
|
(35) угу.. только ВР() или НР() применить, да обрезать СокрЛП() :)
|
|||
39
Odavid
19.08.13
✎
15:05
|
(36) обычное чтение не коррелирует с реальным порядком хранения строк в базе.
Строки без сортировки могут читаться в любом порядке. А вот с сортировкой порядок коррелирует напрямую - ибо сортировка и призвана хоть как-то упорядочить хаос "сырого" чтения из базы. |
|||
40
aka AMIGO
19.08.13
✎
15:07
|
(39) строки читаются в порядке записи, или индекса, если он есть
|
|||
41
Odavid
19.08.13
✎
15:22
|
(40)>>строки читаются в порядке записи
так записи или индекса? |
|||
42
aka AMIGO
19.08.13
✎
15:49
|
(41) ну, я-ж написал "или".. конкретного примера-то нет.. нельзя судить абстрактно.
Если это строковый реквизит в справочника, он может иметь индекс, а может и не иметь.. что имел в виду автор? |
|||
43
Odavid
19.08.13
✎
15:59
|
(42)строки хранятся в БД не в порядке их записи. А в порядке, определенным оптимизатором.
И читаются тоже - как анализатор скажет. |
|||
44
Csar
19.08.13
✎
16:08
|
Любопытно иногда читать как мысль ТС в топике перетекает в совершенно другое русло =)
|
|||
45
Odavid
19.08.13
✎
16:12
|
ТС -это вы )
|
|||
46
Зойч
19.08.13
✎
16:20
|
(43) если есть кластерный индекс то есть и порядок хранения
|
|||
47
Odavid
19.08.13
✎
16:24
|
(46) а причем тут кластерный индекс? Ну-ка, получите в 1С данные по кластреному индексу, давай-ка...
|
|||
48
Зойч
19.08.13
✎
16:27
|
(47) что значит "получить по кластерному индексу"???
|
|||
49
Csar
19.08.13
✎
16:35
|
(45) я попытался от третьего лица отметить ситуацию)
|
|||
50
mikecool
19.08.13
✎
16:37
|
(47) как бе субд выбирает данные из кластера, если он используется
|
|||
51
Serginio1
19.08.13
✎
16:54
|
private static unsafe int CompareOrdinalHelper(string strA, string strB)
{ int num = Math.Min(strA.Length, strB.Length); int num2 = -1; fixed (char* chRef = &strA.m_firstChar) { fixed (char* chRef2 = &strB.m_firstChar) { char* chPtr = chRef; char* chPtr2 = chRef2; while (num >= 10) { if (*(((int*) chPtr)) != *(((int*) chPtr2))) { num2 = 0; break; } if (*(((int*) (chPtr + 2))) != *(((int*) (chPtr2 + 2)))) { num2 = 2; break; } if (*(((int*) (chPtr + 4))) != *(((int*) (chPtr2 + 4)))) { num2 = 4; break; } if (*(((int*) (chPtr + 6))) != *(((int*) (chPtr2 + 6)))) { num2 = 6; break; } if (*(((int*) (chPtr + 8))) != *(((int*) (chPtr2 + 8)))) { num2 = 8; break; } chPtr += 10; chPtr2 += 10; num -= 10; } if (num2 == -1) { goto Label_00F1; } chPtr += num2; chPtr2 += num2; int num3 = chPtr[0] - chPtr2[0]; if (num3 != 0) { return num3; } return (chPtr[1] - chPtr2[1]); Label_00D7: if (*(((int*) chPtr)) != *(((int*) chPtr2))) { goto Label_00F5; } chPtr += 2; chPtr2 += 2; num -= 2; Label_00F1: if (num > 0) { goto Label_00D7; } Label_00F5: if (num > 0) { int num4 = chPtr[0] - chPtr2[0]; if (num4 != 0) { return num4; } return (chPtr[1] - chPtr2[1]); } return (strA.Length - strB.Length); } } } |
|||
52
Odavid
19.08.13
✎
17:03
|
(48)используйте его
(50)СУБД "следит" за базой по нему. Но не данные выдает в порядке кластерного индекса. (51)и что? кластерный индекс невидим разработчикам и пользователям. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |