Массив из строки

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

zodiac
Новичок
Новичок
 
Сообщения: 36
Зарегистрирован: 02.03.2006 (Чт) 16:07

Массив из строки

Сообщение zodiac » 26.11.2006 (Вс) 16:04

Имеем строку:
Код: Выделить всё
asd = "aa ss dd"

Как сделать массив, чтобы он содержал эти элементы? Например dsa - массив.
Код: Выделить всё
dsa(0) = aa

и т.д.

Sebas
Неуловимый Джо
Неуловимый Джо
Аватара пользователя
 
Сообщения: 3626
Зарегистрирован: 12.02.2002 (Вт) 17:25
Откуда: столько наглости такие вопросы задавать

Сообщение Sebas » 26.11.2006 (Вс) 16:37

dsa=asd.split(New String(){" "},RemoveEmptyEntries)

dsa=asd.split(chr(32))
- Я никогда не понимал, почему они приходят ко мне чтобы умирать?

sebas<-@->mail.ru

zodiac
Новичок
Новичок
 
Сообщения: 36
Зарегистрирован: 02.03.2006 (Чт) 16:07

Сообщение zodiac » 26.11.2006 (Вс) 16:40

Пишет:
1 Name 'RemoveEmptyEntries' is not declared.
2 Value of type '1-dimensional array of String' cannot be converted to 'System.Collections.ArrayList'.

Sebas
Неуловимый Джо
Неуловимый Джо
Аватара пользователя
 
Сообщения: 3626
Зарегистрирован: 12.02.2002 (Вт) 17:25
Откуда: столько наглости такие вопросы задавать

Сообщение Sebas » 26.11.2006 (Вс) 16:49

Object Browser рулит.
- Я никогда не понимал, почему они приходят ко мне чтобы умирать?

sebas<-@->mail.ru

zodiac
Новичок
Новичок
 
Сообщения: 36
Зарегистрирован: 02.03.2006 (Чт) 16:07

Сообщение zodiac » 26.11.2006 (Вс) 16:51

Все спасибо без этого разобрался =) Там StringSplitOptions.RemoveEmptyEntries и не объявляя тип

zodiac
Новичок
Новичок
 
Сообщения: 36
Зарегистрирован: 02.03.2006 (Чт) 16:07

Сообщение zodiac » 26.11.2006 (Вс) 17:23

А как выбрать, например, все элементы с 4-ой поиции и до конца? с 5-ой позиции и до 6-ой?

Sebas
Неуловимый Джо
Неуловимый Джо
Аватара пользователя
 
Сообщения: 3626
Зарегистрирован: 12.02.2002 (Вт) 17:25
Откуда: столько наглости такие вопросы задавать

Сообщение Sebas » 26.11.2006 (Вс) 17:29

Option Strict и Option Explicit надо б сразу ставить!
- Я никогда не понимал, почему они приходят ко мне чтобы умирать?

sebas<-@->mail.ru

zodiac
Новичок
Новичок
 
Сообщения: 36
Зарегистрирован: 02.03.2006 (Чт) 16:07

Сообщение zodiac » 26.11.2006 (Вс) 17:34

? Не понял =)

zodiac
Новичок
Новичок
 
Сообщения: 36
Зарегистрирован: 02.03.2006 (Чт) 16:07

Сообщение zodiac » 26.11.2006 (Вс) 17:49

Ну дак как из массива выбрать с 5-ого по конечный?

Sebas
Неуловимый Джо
Неуловимый Джо
Аватара пользователя
 
Сообщения: 3626
Зарегистрирован: 12.02.2002 (Вт) 17:25
Откуда: столько наглости такие вопросы задавать

Сообщение Sebas » 27.11.2006 (Пн) 9:04

Array.Copy
- Я никогда не понимал, почему они приходят ко мне чтобы умирать?

sebas<-@->mail.ru

zodiac
Новичок
Новичок
 
Сообщения: 36
Зарегистрирован: 02.03.2006 (Чт) 16:07

Сообщение zodiac » 27.11.2006 (Пн) 14:05

Можно примером? Массив arraycom, с 3-его по последний элемент

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 27.11.2006 (Пн) 14:18

А глянуть справку по Array.Copy что не позволяет?

Public Shared Sub Copy ( _
sourceArray As Array, _
sourceIndex As Integer, _
destinationArray As Array, _
destinationIndex As Integer, _
length As Integer )


sourceArray - исходный массив (из которого копируем);
sourceIndex - индекс первого копируемого элемента;
destinationArray - конечный массив (куда копируем)
destinationIndex - индекс элемента конечного массива на чиная с которого копируем;
length - число копируемых элементов.

Все должно быть понятно без примера. Пробуй!
Весь мир матрица, а мы в нем потоки байтов!

zodiac
Новичок
Новичок
 
Сообщения: 36
Зарегистрирован: 02.03.2006 (Чт) 16:07

Сообщение zodiac » 27.11.2006 (Пн) 14:24

Ну а последнее что исать? Если хочу допустим все?

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 27.11.2006 (Пн) 14:50

Нды... если копируешь все элементы массива, то пишешь естественно длину, если с какого-то элемента до конца, то высчитывай число копируемых элементов такой вот методой:

Count = Length - firstIndex, где Length - длина массива, firstIndex - элемент, начиная с которого копируешь

Если копируешь диапазон, с какого-то по какой-то элемент, то число элементов считаешь так?

Count = lastIndex - firstIndex + 1, где firstIndex - первый элемент диапазона, lastIndex - последний элемент диапазона.

Такая вот элементпрщина
Весь мир матрица, а мы в нем потоки байтов!

zodiac
Новичок
Новичок
 
Сообщения: 36
Зарегистрирован: 02.03.2006 (Чт) 16:07

Сообщение zodiac » 27.11.2006 (Пн) 14:57

Не ну своим примером то легче понять, повторюсь.
arraycom(0) = "0"
arraycom(1) = "1"
...
arraycom(5) = "5"
в arraycom_temp нужно занести элементы из массива arraycom с 2-ого по 4-ый, а в arraycom_temp2 - с 3-его и до конца.

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 27.11.2006 (Пн) 15:05

И чего это я седня добрый то такой?

Код: Выделить всё
Array.Copy arraycom, 2, arraycom_temp, 0, 3
Array.Copy arraycom, 3, arraycom_temp2, 0, arraycom.Length - 3


естественно этот код предполагает, что массивы arraycom_temp и arraycom_temp2 имеет необходимый размер
Весь мир матрица, а мы в нем потоки байтов!

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 27.11.2006 (Пн) 15:19

!Viper! писал(а):естественно этот код предполагает, что массивы arraycom_temp и arraycom_temp2 имеет необходимый размер


размерность массивов задай
Весь мир матрица, а мы в нем потоки байтов!

zodiac
Новичок
Новичок
 
Сообщения: 36
Зарегистрирован: 02.03.2006 (Чт) 16:07

Сообщение zodiac » 27.11.2006 (Пн) 15:21

Dim arraycom_temp(10)

А как теперь его поностью вывести? Все, что в нем есть.

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 27.11.2006 (Пн) 15:26

Что значит вывести? куда?
Весь мир матрица, а мы в нем потоки байтов!

zodiac
Новичок
Новичок
 
Сообщения: 36
Зарегистрирован: 02.03.2006 (Чт) 16:07

Сообщение zodiac » 27.11.2006 (Пн) 15:28

например, в текстовое поле

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 27.11.2006 (Пн) 15:41

Нды... у тебя, как я понимаю, массив символьный... Если так, то его можно просто присвоить строке или свойству Text текстового поля.

Во всех остальных случая, надо поэлементно преобразовывать массив в строки и уж потом что-то делать с этими строками...
Весь мир матрица, а мы в нем потоки байтов!

zodiac
Новичок
Новичок
 
Сообщения: 36
Зарегистрирован: 02.03.2006 (Чт) 16:07

Сообщение zodiac » 27.11.2006 (Пн) 15:44

Нет дык...
Value of type '1-dimensional array of Object' cannot be converted to 'String'.

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 27.11.2006 (Пн) 15:50

дык, на кой тебе массив Object то? Делай его массивом Char
Весь мир матрица, а мы в нем потоки байтов!

zodiac
Новичок
Новичок
 
Сообщения: 36
Зарегистрирован: 02.03.2006 (Чт) 16:07

Сообщение zodiac » 27.11.2006 (Пн) 15:54

Source array type cannot be assigned to destination array type.

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 27.11.2006 (Пн) 16:06

И что ты этим хочешь сказать? Что исходный массив у тебя массив Object? А тот массив, в который копируем - Char? Повторяю вопрос, какого тебе изначально понадобился массив Object?

И вообще, выкладывай ка код, чем больше, тем лучше и объясняй что же тебе таки надо
Весь мир матрица, а мы в нем потоки байтов!

zodiac
Новичок
Новичок
 
Сообщения: 36
Зарегистрирован: 02.03.2006 (Чт) 16:07

Сообщение zodiac » 27.11.2006 (Пн) 16:17

Щас все бодробно расскажу...
Итак начем, делаю ирк сервисы (просто ради интереса), и столкнулся с проблемой:
Нужно обрабатывать клиентские запросы, например:
:zodiac PRIVMSG OperServ text
где zodiac - ник юзера
PRIVMSG - команда посылающаая текст
OperServ - ник сервиса
text - текст юзера.
так вот, если юзер напишет не text, а допустим "say #blog гы гы гы", то нужно послать эту команду серверу.
Для этого я беру 3-ий элемент массива, проверяю его на равенство say, далее 4-ый элемента массива - это канал, а вот с 5-ого по конец - это текст который нужно послать, и вот с этой проблемой я столкнулся.
Код: Выделить всё
Dim NewStr As String
NewStr = ":zodiac PRIVMSG OperServ say #blog привет"
arraycom = NewStr.Split(New String() {" "}, StringSplitOptions.RemoveEmptyEntries)
arraycom = NewStr.Split(Chr(32))
Array.Copy(arraycom, 2, arraycom_temp, 0, 4)
oth.Text = arraycom_temp"

zodiac
Новичок
Новичок
 
Сообщения: 36
Зарегистрирован: 02.03.2006 (Чт) 16:07

Сообщение zodiac » 27.11.2006 (Пн) 16:20

А, еще забыл:
Dim arraycom
Dim arraycom_temp(1000) As Char

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 27.11.2006 (Пн) 16:25

а объявить массивы As String религия не позволила?
Весь мир матрица, а мы в нем потоки байтов!

zodiac
Новичок
Новичок
 
Сообщения: 36
Зарегистрирован: 02.03.2006 (Чт) 16:07

Сообщение zodiac » 27.11.2006 (Пн) 16:31

Overload resolution failed because no accessible 'Copy' can be called with these arguments:
'Public Shared Sub Copy(sourceArray As System.Array, sourceIndex As Long, destinationArray As System.Array, destinationIndex As Long, length As Long)': Value of type 'String' cannot be converted to 'System.Array'.
'Public Shared Sub Copy(sourceArray As System.Array, sourceIndex As Integer, destinationArray As System.Array, destinationIndex As Integer, length As Integer)': Value of type 'String' cannot be converted to 'System.Array'.
Это раз.
Value of type '1-dimensional array of String' cannot be converted to 'String'.
Это два.

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 27.11.2006 (Пн) 16:39

Нет слов...


алгоритм действий...

1. Делишь исходную строку на массив строк
2. Создаешь из элементов массива, начиная с 5-го строку при помощи метода String.Join (метод обратный Split)
3. Отправляешь полученную строку куда надо


З.Ы. Моя доброта заканчиывается :twisted:
Весь мир матрица, а мы в нем потоки байтов!

След.

Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 105

    TopList