powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Получение массива
25 сообщений из 27, страница 1 из 2
Получение массива
    #36763587
Здравствуйте.

Вопрос у меня следующий. Могли ьы вы мне подсказать как лучше и правильнее преобразовать строку данных в массив.

вот строка данных
a="Дасаев (c) - Бессонов, Хидиятуллин, Балтача, Демьяненко - Гоцманов (Рац, 62), Алейников, Яковенко (Пасулько, 46; Беланов, 77), Литовченко - Протасов, Яремчук."

Нужно получить массив
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
Дасаев       | 0  | (c) | -
Бессонов     | 0  |     |
Хидиятуллин  | 0  |     |
Балтача      | 0  |     |
Демьяненко   | 0  |     | -
Гоцманов     | 0  |     |
Рац          | 62 |     |
Алейников    | 0  |     |
Яковенко     | 0  |     |
Пасулько     | 46 |     |
Беланов      | 77 |     |
Литовченко   | 0  |     | -
Протасов     | 0  |     |
Яремчук      | 0  |     |

Заранее благодарю, если кто сумеет помочь.
...
Рейтинг: 0 / 0
Получение массива
    #36763759
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владислав Y,

Вам придется СЛОВАМИ, предельно ЯСНО, предельно ФОРМАЛЬНО, не оставляя вариантов ДОДУМЫВАНИЯ описать принципы преобразования строки в массив.

Ибо, почему Яковенко (Пасулько, 46; Беланов, 77) преобразуется именно в то, что вы написали, лично мне неведомо.
...
Рейтинг: 0 / 0
Получение массива
    #36763764
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
еще пример:
Гоцманов (Рац, 62) - это две разные фамилии и в разны строках написаны.
Дасаев (c) - это почему-то не две фамилии, а одна. Почему - известно только вам.
...
Рейтинг: 0 / 0
Получение массива
    #36763850
>>>Вам придется СЛОВАМИ, предельно ЯСНО, предельно ФОРМАЛЬНО, не оставляя вариантов ДОДУМЫВАНИЯ описать принципы преобразования строки в массив.

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

Сначала переменная должна разбиться на отдельные части, разделителями являются "-", и ",".
Затем разделяются на части те фрагменты где есть скобки, за исключением "(с)".
После этого разделяются на части фрагменты которые были в скобках, разделителем в данном случа является ";".


>>>Гоцманов (Рац, 62) - это две разные фамилии и в разны строках написаны.
>>>Дасаев (c) - это почему-то не две фамилии, а одна. Почему - известно только вам.
Сочетание "(c)" указывает на то что человек является капитаном (captain) из за этого в данном случае это одна фамилия.
А здесь "Гоцманов (Рац, 62)" две фамилии и время выхода второго человека.
...
Рейтинг: 0 / 0
Получение массива
    #36763864
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владислав Y,

Вы вместо принципов пишете алгоритм - ну хорошо, если вы в состоянии сами написать алгоритм, то в чем заключается ваш вопрос?

Кстати, предложенный алгоритм не разберется со строкой Яковенко (Пасулько, 46; Беланов, 77), там нет ни запятой, ни минуса.
...
Рейтинг: 0 / 0
Получение массива
    #36763936
В том то и проблема что алгоритм я пока написать не могу.
Здесь "Яковенко (Пасулько, 46; Беланов, 77)" разделителем является знак ";".

А на счет описания принципов. Мне кажется я и описываю принципы.
Разделителями между фамилиями являются знаки "," "-", внутри скобок разделителями являются ";". Внутри скобок также присутствует время выхода человека на замену.
Сочетание "с" указывает на то что человек является капитаном.
...
Рейтинг: 0 / 0
Получение массива
    #36764026
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну, напишите вы по-русски, что вообще означает ваша строка?
Список игроков команды, сыгравших матч, и т.д.? Если вы на основе приведённой строки словами расскажете, что она означала в действительности, а также таблицу с какими данными вы получаете (порядок записей, что означают поля 1,2,3,4) - будет понятно, куда рыть...

И вообще, может, вам эту инфу проще взять из другого источника, где она есть уже в более вразумительной форме?
...
Рейтинг: 0 / 0
Получение массива
    #36764095
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Допустим, можно сделать вот такую предобработку, а потом пройтись второй раз, заполняя массив по виду данных в ячейках

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
Private Sub Command1_Click()

Dim a As String, k() As String, i As Integer

a = "Дасаев (c) - Бессонов, Хидиятуллин, Балтача, Демьяненко - Гоцманов (Рац, 62), Алейников, Яковенко (Пасулько, 46; Беланов, 77), Литовченко - Протасов, Яремчук."
a = Replace(a, "(c)", ",#")
a = Replace(a, "- ", ",-,")
a = Replace(a, " (", ",")
a = Replace(a, ")", "")
a = Replace(a, ";", ",")
a = Replace(a, ".", "")
a = Replace(a, " ", "")
k = Split(a, ",")
For i =  0  To UBound(k)
  Debug.Print k(i)
Next

End Sub
...
Рейтинг: 0 / 0
Получение массива
    #36764351
Спасибо, идею вы мне подбросили.
Вот еще вопрос.
функции
Replace
Split
в Visual Basic 6.0 отсутствуют
а есть у кого этиже функции написанные для Visual Basic 6.0 в виде исходного кода.
...
Рейтинг: 0 / 0
Получение массива
    #36764356
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владислав Yфункции
Replace
Split
в Visual Basic 6.0 отсутствуют
Как это. А на чем по-вашему написан вышеприведенный код?
...
Рейтинг: 0 / 0
Получение массива
    #36764368
DUDALS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Функция Split
Split(Expression,[Delimiter],[Limit],[Compare] )
Новая функция, которая появилась в Visual Basic 6.0
Функция Split используется для расщепления строки на субстроки с использованием разделителя субстрок

Возвращаемое значение
Функция Split(Expression) возвращает одномерный массив с типом данных Variant(String), содержащий в качестве элементов найденные субстроки

Параметры
Expression
Обязательный аргумент - строка, которую нужно расщепить. Если аргумент содержит нулевую строку(""), то возвращается пустой массив, т.е. массив без элементов и данных
Delimiter
Необязательный аргумент - символы типа String, которые используются в качестве разделителя строки. Если аргумент опущен, то по умолчанию используется символ пробела(" "). Если же аргумент содержит нулевую строку(""), то возвращается одноэлементный массив, содержащее целую строку
Limit
Необязательный аргумент, содержащий число возвращаемых субстрок. Если аргумент опущен или равен -1, то обрабатывается вся строка
Compare
Необязательный аргумент - числовая константа, определяющая вид сравнения:
vbUseCompareOption=-1
Используется по умолчанию метод сравнения, заданный инструкцией Option Compare
vbBinaryCompare=0
Двоичный метод сравнения. Буквы разных регистров считаются разными
vbTextCompare=1
Текстовый метод сравнения. Сравнение без учета регистров
vbDatabaseCompare=2
Только для Microsoft Access. Сравнение с использованием информации базы данных
Пример

' Считаем число вхождений слова "кол" в строке
Dim stroka As String ' строчка для подсчета
Dim retval ' возвращаемое значение
stroka = "Шит колпак не по-колпаковски. Ливерная колбаса."
retval = Split(stroka, "кол")
MsgBox "'кол' встречается в строке'" & stroka _
& "' " & UBound(retval) & " раза"


Функция Replace
Replace(Expression,Find,Replace[,Start[,Count[,Compare]]])
Новая функция,которая появилась в Visual Basic 6.0

Возвращаемое значение
В результате действия функции Replace возвращается исходная строка с замененным строковым фрагментом

Параметры

Expression
Обязательный аргумент - строка, в которой требуется замена
Find
Обязательный аргумент - подстрока, которую нужно заменить
Replace
Обязательный аргумент - подстрока замены
Start
Необязательный аргумент - указывает позицию
Count
Необязательный аргумент - указывает число
Compare
Необязательный аргумент - вид сравнения
Пример

' меняем слово "хочу" на "люблю" 1 раз
Dim sample$, findstr$, newstr$,retval$
sample = "Я хочу, хочу, хочу тебя" 'строка,которую будем менять
findstr = "хочу" 'подстрока для замены
newstr = "люблю" ' новая подстрока для замены
retval = Replace (sample,findstr, repl, 1, 1) ' меняем один раз, начиная с первого символа
Debug.Print retval
...
Рейтинг: 0 / 0
Получение массива
    #36764378
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владислав Yфункции
Replace
Split
в Visual Basic 6.0 отсутствуют
DUDALSФункция Split
Новая функция, которая появилась в Visual Basic 6.0
Функция Replace
Новая функция,которая появилась в Visual Basic 6.0


???
...
Рейтинг: 0 / 0
Получение массива
    #36764390
Шеф все пропало...
У меня просто help, от Visual Basic 5.0 стоит. А там этих функций небыло.
Спасибо, я до этого считал что они только в VBA есть... Просветили.
...
Рейтинг: 0 / 0
Получение массива
    #36764395
Слушайте, а может в Visual Basic 6.0 есть функция преобразующая массив в строку... а я до сих пор не знаю. Мож кто подскажет.
...
Рейтинг: 0 / 0
Получение массива
    #36764428
DUDALS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,
У меня в VB 6.0 данные функции есть
...
Рейтинг: 0 / 0
Получение массива
    #36764430
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DUDALSShocker.Pro,
У меня в VB 6.0 данные функции есть
и у меня. Я просто не заметил, что это разные люди написали
...
Рейтинг: 0 / 0
Получение массива
    #36764503
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владислав YСлушайте, а может в Visual Basic 6.0 есть функция преобразующая массив в строку... а я до сих пор не знаю. Мож кто подскажет.
Есть, Merge называется. В хелпе для Split на неё же ссылочка есть...
...
Рейтинг: 0 / 0
Получение массива
    #36764513
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndreTMВладислав YСлушайте, а может в Visual Basic 6.0 есть функция преобразующая массив в строку... а я до сих пор не знаю. Мож кто подскажет.
Есть, Merge называется. В хелпе для Split на неё же ссылочка есть...
Так, опять не туда посмотрел - вот что значить писАть сразу на всём :)

В-общем, это функция:
Join (одномерный_массив, [разделитель])
...
Рейтинг: 0 / 0
Получение массива
    #36764680
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndreTMВ-общем, это функция:
Join (одномерный_массив, [разделитель])
а это на каком языке?
...
Рейтинг: 0 / 0
Получение массива
    #36764726
Ципихович Эндрю
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,

вба
...
Рейтинг: 0 / 0
Получение массива
    #36764733
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Однако, ТС спрашивал конкретно про VB6.0
...
Рейтинг: 0 / 0
Получение массива
    #36764747
Ципихович Эндрю
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,

Вы ж говорили, что они братья
...
Рейтинг: 0 / 0
Получение массива
    #36764762
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ципихович ЭндрюВы ж говорили, что они братья
Ну вот, у одного из братьев бородавка на носу.
...
Рейтинг: 0 / 0
Получение массива
    #36764793
Ципихович Эндрю
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Автор непостоянный то в массив нужно, то
Слушайте, а может в Visual Basic 6.0 есть функция преобразующая массив в строку...
...
Рейтинг: 0 / 0
Получение массива
    #36764801
Ципихович Эндрю
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владислав Y,

Вы говорите:
вот строка данных
a="Дасаев (c) - Бессонов, Хидиятуллин, Балтача, Демьяненко - Гоцманов (Рац, 62), Алейников, Яковенко (Пасулько, 46; Беланов, 77), Литовченко - Протасов, Яремчук."

Нужно получить массив
А дальше что с ним будете делать?
...
Рейтинг: 0 / 0
25 сообщений из 27, страница 1 из 2
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Получение массива
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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