powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Наисложнейшая сортировка!!
19 сообщений из 44, страница 2 из 2
Наисложнейшая сортировка!!
    #36951109
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще, тут регэкспы помогут :-) И реализация IComparable
...
Рейтинг: 0 / 0
Наисложнейшая сортировка!!
    #36951169
MAYAKOV_SV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
' Функция получает ключ, по которой сортировать будем
Public Function GetSortKey(s As String) As String
 Dim i As Integer
 Dim i1 As Integer
 Dim i2 As Integer
 Dim str As String
 Dim n As String
 Dim tmp As String
 str = ""
 n = "ГОСТ "
 i = InStr(s, n)
 If i <>  0  Then
   str = str + "1"
   i = i + Len(n)
   i1 = InStr(i, s, "-")
   str = str + Format(Mid(s, i, i1 - i), "000000000")
  Else
   str = str + "0"
   n = "ОСТ "
   i = InStr(s, n)
   i = i + Len(n)
   i1 = InStr(i, s, ".")
   str = str + Format(Mid(s, i, i1 - i), "000")
   i = i1 +  1 
   i1 = InStr(i, s, ".")
   str = str + Format(Mid(s, i, i1 - i), "000")
   i = i1 +  1 
   i1 = InStr(i, s, "-")
   str = str + Format(Mid(s, i, i1 - i), "000")
 End If
 n = "Болт М"
 i = InStr(s, n)
 i = i + Len(n)
 i1 = InStr(i, s, "-")
 i2 = InStr(i, s, "х")
 If (i2 < i1) And (i2 <>  0 ) Then
  i1 = i2
 End If
 str = str + Mid(s, i, i1 - i)
 GetSortKey = str
End Function


Public Sub test()
 Dim s As String
 Dim str As String
 's = "Болт М24-9gх55.109.40Х.019 ГОСТ 7796-70"
 s = "Болт М6х16.58.00 ОСТ 23.1.434-75"
 str = GetSortKey(s) 'Получаем ключ по наименованию
End Sub
...
Рейтинг: 0 / 0
Наисложнейшая сортировка!!
    #36951321
lincoln
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
все не то, не работает!
...
Рейтинг: 0 / 0
Наисложнейшая сортировка!!
    #36951330
Фотография Shamanus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lincolnвсе не то, не работает!весьма содержательно
...
Рейтинг: 0 / 0
Наисложнейшая сортировка!!
    #36951344
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lincolnвсе не то, не работает!Создайте РУКАМИ файл, на одном листе которого массив каким вы его имеете, на втором — данные, отсортированные как надо.
...
Рейтинг: 0 / 0
Наисложнейшая сортировка!!
    #36951363
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shamanuslincolnвсе не то, не работает!
весьма содержательно
мне такие ответы всегда напоминают цитату с баша:
waran
я счас наорал на тетку-юзершу...
waran
я ей дажы пример привел: ты идешь в сортир, и по дороге у тебя домается нога... ты звонишь админу и кричишь: "!я не могу сходить в сортир"... и админ х.й ЗНАЕТ, попчему ты не можешь - либо у тебя дверь не открывается, либо охранник не пускает, либо идешь в другую сторону! вот скажи: не "не могу сходить в сортир", а "у меня нога поломалась" - так админ сразу будет знать, что чинить
waran
причем не уверен, что до нее дошло
SuMi
я тут тож орал недавно... мне звонит пользователь и говорит дословно - наташа не можыт войти в компьютер
SuMi
я слегка ох%&вший и говорю - ну с её жопой это нормально!!!!
SuMi
грю - пусть худеет
...
Рейтинг: 0 / 0
Наисложнейшая сортировка!!
    #36951406
lincoln
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
InStr(x(i), "ГOCT ", vbTextComparе)
возвращает номер позиции после пробела?
допустим "ГОСТ 123"
результат - 5?
...
Рейтинг: 0 / 0
Наисложнейшая сортировка!!
    #36951440
Фотография Shamanus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lincoln,

допустим есть текст
Код: plaintext
x="аббвввггггдддбба"
Код: plaintext
instr( 1 ,x,"бб", vbTextComparе)  - результат  2 
Код: plaintext
instr( 1 ,x,"в", vbTextComparе)  - результат  4 
Код: plaintext
instr( 1 ,x,"вв", vbTextComparе)  - результат  4 
Код: plaintext
instr( 1 ,x,"ввв", vbTextComparе)  -результат  4 
Код: plaintext
instr( 10 ,x,"бб", vbTextComparе)  - результат  14 
иными словами номер позиции первого символа входящего слова
...
Рейтинг: 0 / 0
Наисложнейшая сортировка!!
    #36951451
Фотография Shamanus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
instr( instr( 1 ,x,"ввв", vbTextComparе) ,x,"бб", vbTextComparе)  - результат  14 
понятно почему?
...
Рейтинг: 0 / 0
Наисложнейшая сортировка!!
    #36951464
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lincolnидея в том что в бд есть некая сборка, которая состоит из подсборок,деталей, стандартных изделий (болты винты и т.п), по этой сборке формируется отчет в виде конструкторской специффикации. через dll моя прога берет данные из программы и переносит в excel .
Вам же потом надо всё проделать уже в Excel? Зачем тогда страдать именно с массивом, зачем прицеплять ADODB?
Вас же попросили - дайте пример книги Excel, в которой есть табличка с выцепленными вашей прогой данными. Далее же сделать можно многое и не очень большим количеством кода...
...
Рейтинг: 0 / 0
Наисложнейшая сортировка!!
    #36951465
lincoln
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shamanus,

да, понятно.
...
Рейтинг: 0 / 0
Наисложнейшая сортировка!!
    #36951565
MAYAKOV_SV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот так работает:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
Option Explicit

Private mass_str() As String
Private keys_str() As String

Private cnt As Integer

' Функция получает ключ, по которой сортировать будем
Public Function GetSortKey(s As String) As String
 Dim i As Integer
 Dim i1 As Integer
 Dim i2 As Integer
 Dim str As String
 Dim n As String
 Dim tmp As String
 str = ""
 n = "ГОСТ "
 i = InStr(s, n)
 If i <>  0  Then
   str = str + "1"
   i = i + Len(n)
   i1 = InStr(i, s, "-")
   str = str + Format(Mid(s, i, i1 - i), "000000000")
  Else
   str = str + "0"
   n = "ОСТ "
   i = InStr(s, n)
   i = i + Len(n)
   i1 = InStr(i, s, ".")
   str = str + Format(Mid(s, i, i1 - i), "000")
   i = i1 +  1 
   i1 = InStr(i, s, ".")
   str = str + Format(Mid(s, i, i1 - i), "000")
   i = i1 +  1 
   i1 = InStr(i, s, "-")
   str = str + Format(Mid(s, i, i1 - i), "000")
 End If
 n = "Болт М"
 i = InStr(s, n)
 i = i + Len(n)
 i1 = InStr(i, s, "-")
 i2 = InStr(i, s, "х")
 If (i2 < i1) And (i2 <>  0 ) Then
  i1 = i2
 End If
 str = str + Format(Mid(s, i, i1 - i), "00")
 GetSortKey = str
End Function

Public Sub AddStr(s As String)
 ReDim Preserve mass_str(cnt)
 mass_str(cnt) = s
 cnt = cnt +  1 
End Sub

Public Sub PrintStr()
 Dim i As Integer
 For i =  0  To UBound(mass_str)
  Debug.Print mass_str(i)
 Next i
End Sub

Public Sub SortStr()
 Dim i As Integer
 Dim j As Integer
 Dim n As Integer
 Dim a1 As String
 Dim a2 As String
 Dim k1 As String
 Dim k2 As String
 n = UBound(mass_str)
 For i =  0  To n
  a1 = mass_str(i)
  k1 = GetSortKey(a1)
  For j = i +  1  To n
   a2 = mass_str(j)
   k2 = GetSortKey(a2)
   If k1 > k2 Then
    mass_str(j) = a1
    mass_str(i) = a2
    a1 = a2
    k1 = k2
   End If
  Next j
 Next i
End Sub

Public Sub test()
 cnt =  0 
 AddStr ("Болт М4-9gх55.109.40Х.019 ГОСТ 7796-70")
 AddStr ("Болт М34-9gх55.109.40Х.019 ГОСТ 7796-70")
 AddStr ("Болт М7-9gх55.109.40Х.019 ГОСТ 7796-70")
 SortStr
 PrintStr
End Sub
...
Рейтинг: 0 / 0
Наисложнейшая сортировка!!
    #36951601
MAYAKOV_SV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Единственное, что добавлю к своему примеру:
По скорости не очень эффективно, т.к. постоянно в сортировке вычисляется GetSortKey.
Возможно надо было сделать двумерный массив с заранее расчитанными ключами.
Хотя, если число строк для сортировки будет малое количество, то это не столь важно.

Да можно по-разному это сделать, сложности тут нет.
...
Рейтинг: 0 / 0
Наисложнейшая сортировка!!
    #36951727
lincoln
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
спасибо)
я проверить смогу теперь на следующей неделе, если вопросы возникнут буду обращаться.
...
Рейтинг: 0 / 0
Наисложнейшая сортировка!!
    #36952552
Фотография NekZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А через регулярные выражения парсить строку не айс?
...
Рейтинг: 0 / 0
Наисложнейшая сортировка!!
    #36953051
Фотография ПЕНСИОНЕРКА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lincolnПЕНСИОНЕРКА,

идея в том что в бд есть некая сборка, которая состоит из подсборок,деталей, стандартных изделий (болты винты и т.п), по этой сборке формируется отчет в виде конструкторской специффикации. через dll моя прога берет данные из программы и переносит в excel. сортировка по алфавиту работает, т.е я получаю нормальный список для деталей и сборок, а для стандартных нет! т.к. стандартные заносятся в спецификацию сначала по алфавиту(сначала идут болты, винты, гайки и т.п) далее если несколько болтов, в верх списка заносятся болты с меньшим гостом. Если болтов с одним гостом несколько, то из них выбирается тот у которого размер меньше..
после сотрировки болтов идет сортировка винтов и т.д..

автор
в бд НЕТ никаких таблиц с гостами, диаметрами и т.п. Там есть иерархическое дерево, в стандартных есть поле наименование, откуда и берется эта длинная строка с обозначением


-вопросы ??
-как выделяются стандартные изделия
-изделий видимо много и запросов с требуемой сортировкой тоже много
-стандартным может быть не только крепеж


-чтобы не изобретать в каждом отчете велосипед
-создать таблицу стандарта(наимен-ключ без повторных,группа-станд, наимен-сорт)- станд1
-дописать туда текущий стандарт или весь(если можно)
-просчитать группу, наимен-сорт для новых записей--------модулем
-при необходимости -ручная доводка наимен-сорт---------форма
-стыковать ваш текущий запрос со станд1(LEFT JOIN)
-coртировка запроса
Код: plaintext
 order by .....,iif(isnull(наимен-сорт),наимен,[группа-станд] & [наимен-сорт])

вряд ли вы без этого обойдетесь(по собственному опыту)
...
Рейтинг: 0 / 0
Наисложнейшая сортировка!!
    #36953255
lincoln
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо всем за идеи, остановился я все таки на сортировке по алфавиту. пользователи могут как попало забить в программу обозначение детали и мои труды пойдут на смарку.. причем для разных видов деталей поиск разный будет. Каждая деталь имеет разное обозначение. болт имеет диаметр и длину, у шпонки другие параметры и правила записи.. для каждой детали писать обработку строки запаришься...

тема закрыта!
...
Рейтинг: 0 / 0
Наисложнейшая сортировка!!
    #36953273
MAYAKOV_SV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lincolnпользователи могут как попало забить в программу обозначение детали
Сделать ввод с проверкой, чтобы не что попало заводили.
Либо сделать ввод из многих полей, а потом склеивается текст в наименование.
Но это тоже труд.
Вообще такие вещи как сортировка обдумывается заранее перед программированием системы, чтоб потом не выкручиватся с парсерами.
Если нужна нормальная сортировка, то лучше всего дорабатывать программу/базу.
Трудно это или не трудно - не столь важно, главное пользователи - если их не будет сильно напрягать сортировка просто по алфавиту, то лучше оставить как есть.
...
Рейтинг: 0 / 0
Наисложнейшая сортировка!!
    #36954484
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lincolnпользователи могут как попало забить в программу обозначение детали и мои труды пойдут на смарку.. причем для разных видов деталей поиск разный будет. Каждая деталь имеет разное обозначение. болт имеет диаметр и длину, у шпонки другие параметры и правила записи.. для каждой детали писать обработку строки запаришься...
Ну, можно ведь для каждого поля (после парсинга) создать собственные экзелевские "справочники возможных вариантов" и уже из такой связки формировать общий ID для сортировки.
Было бы желание...
...
Рейтинг: 0 / 0
19 сообщений из 44, страница 2 из 2
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Наисложнейшая сортировка!!
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]