Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Получение массива / 25 сообщений из 27, страница 1 из 2
28.07.2010, 12:44
    #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
28.07.2010, 13:26
    #36763759
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение массива
Владислав Y,

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

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

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

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


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

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

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

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

И вообще, может, вам эту инфу проще взять из другого источника, где она есть уже в более вразумительной форме?
...
Рейтинг: 0 / 0
28.07.2010, 14:53
    #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
28.07.2010, 16:10
    #36764351
Получение массива
Спасибо, идею вы мне подбросили.
Вот еще вопрос.
функции
Replace
Split
в Visual Basic 6.0 отсутствуют
а есть у кого этиже функции написанные для Visual Basic 6.0 в виде исходного кода.
...
Рейтинг: 0 / 0
28.07.2010, 16:12
    #36764356
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение массива
Владислав Yфункции
Replace
Split
в Visual Basic 6.0 отсутствуют
Как это. А на чем по-вашему написан вышеприведенный код?
...
Рейтинг: 0 / 0
28.07.2010, 16:16
    #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
28.07.2010, 16:19
    #36764378
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение массива
Владислав Yфункции
Replace
Split
в Visual Basic 6.0 отсутствуют
DUDALSФункция Split
Новая функция, которая появилась в Visual Basic 6.0
Функция Replace
Новая функция,которая появилась в Visual Basic 6.0


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

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

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

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

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

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


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