Как сделать вот такое:

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
IgorA
Начинающий
Начинающий
 
Сообщения: 7
Зарегистрирован: 14.10.2004 (Чт) 20:34

Как сделать вот такое:

Сообщение IgorA » 14.10.2004 (Чт) 20:39

Здравствуйте все.
Подскажите в таком вопросе, я в ВБ только начинаю и пока не разобрался до конца.
есть строка в массиве и я ее разбиваю во временный массив так:
arr = Split(mass(i, n), " ", 3)
в arr(1) у меня получается название месяца (например так: "октября")
Как из названия перевести в цифры? т.е. из "октября" в 10 ?

A.A.Z.
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3035
Зарегистрирован: 30.06.2003 (Пн) 13:38

Сообщение A.A.Z. » 14.10.2004 (Чт) 21:29

Думаю, что единственный вариант - Select Case...
Select Case Arr(1)
Case "января", "январь" 'и т.п.
MonthNumber = 1
Case ...
...
End Select

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 15.10.2004 (Пт) 8:33

На всякий случай, рассечь дату на компоненты очень просто:
Код: Выделить всё
Debug.Print Day(CDate("15 октября 2004"))
Debug.Print Month(CDate("15 октября 2004"))
Debug.Print Year(CDate("15 октября 2004"))
Изображение

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 15.10.2004 (Пт) 8:36

A.A.Z. писал(а):Думаю, что единственный вариант - Select Case...

Не единственный:
Код: Выделить всё
Debug.Print Switch(Arr(1) = "января", 1, Arr(1) = "февраля", 2, Arr(1) = "марта", 3)

Но Select Case быстрее.
Изображение

Sirik
Perspicaz
Perspicaz
Аватара пользователя
 
Сообщения: 2280
Зарегистрирован: 19.02.2004 (Чт) 16:09
Откуда: Бердичев, Украина

Сообщение Sirik » 15.10.2004 (Пт) 9:28

Да, но индекс и есть искомое число :lol:

Ruslan Demidow
Мужчина!
Мужчина!
Аватара пользователя
 
Сообщения: 987
Зарегистрирован: 25.03.2004 (Чт) 13:39
Откуда: N.Novgorod

Сообщение Ruslan Demidow » 15.10.2004 (Пт) 9:34

Sirik писал(а):Да, но индекс и есть искомое число :lol:
Для примера могу привести свою функцию, которая возвращает строку с датой отформатированной так как мне надо.
На входе тоже строка, но не стандартная: типа 10 oct 2004 12:11:54

Код: Выделить всё
Public Function GetDate(StringDate As String, strFormat As String) As String
    Dim intMonth As String
    Dim intDay As String
    Dim intYear As String
    Dim intTime As String
    Dim strTemp As String
    On Error GoTo ErrSub
    If Len(Trim$(strFormat)) = 0 Or Trim$(strFormat) = "0" Then
        GetDate = ""
        Exit Function
    End If
    intDay = Left$(StringDate, 2)
    intMonth = Mid$(StringDate, 4, 3)
    intYear = Mid$(StringDate, 8, 2)
    intTime = Mid$(StringDate, 12, 8)
   
    Select Case UCase$(intMonth)
        Case "JAN"
            intMonth = "01"
        Case "FEB"
            intMonth = "02"
        Case "MAR"
            intMonth = "03"
        Case "APR"
            intMonth = "04"
        Case "MAY"
            intMonth = "05"
        Case "JUN"
            intMonth = "06"
        Case "JUL"
            intMonth = "07"
        Case "AUG"
            intMonth = "08"
        Case "SEP"
            intMonth = "09"
        Case "OCT"
            intMonth = "10"
        Case "NOV"
            intMonth = "11"
        Case "DEC"
            intMonth = "12"
        Case "ЯНВ"
            intMonth = "01"
        Case "ФЕВ"
            intMonth = "02"
        Case "МАР"
            intMonth = "03"
        Case "АПР"
            intMonth = "04"
        Case "МАЙ"
            intMonth = "05"
        Case "ИЮН"
            intMonth = "06"
        Case "ИЮЛ"
            intMonth = "07"
        Case "АВГ"
            intMonth = "08"
        Case "СЕН"
            intMonth = "09"
        Case "ОКТ"
            intMonth = "10"
        Case "НОЯ"
            intMonth = "11"
        Case "ДЕК"
            intMonth = "12"
    End Select
        intDay = IIf(Not IsNumeric(intDay), intDay = "01", intDay)
        intMonth = IIf(Not IsNumeric(intMonth), intMonth = "01", intMonth)
        intYear = IIf(Not IsNumeric(intYear), intYear = "00", intYear)
        strTemp = intDay & "." & intMonth & "." & intYear & " " & intTime
        GetDate = Format(strTemp, strFormat, vbUseSystemDayOfWeek) ', vbUseSystem)
    Exit Function
ErrSub:
    GetDate = ""
End Function


Слишком растянуто, конечно, но.... :)
Это Ж-ж-ж-ж неспроста (с) Винни-Пух

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 15.10.2004 (Пт) 9:46

Sirik писал(а):Да, но индекс и есть искомое число :lol:

Ты внимательно прочитал мой пример?
Видимо, нет - там нет массивов, а значит, нет и индексов.
Изображение

Sirik
Perspicaz
Perspicaz
Аватара пользователя
 
Сообщения: 2280
Зарегистрирован: 19.02.2004 (Чт) 16:09
Откуда: Бердичев, Украина

Сообщение Sirik » 15.10.2004 (Пт) 10:01

tyomitch писал(а):
Sirik писал(а):Да, но индекс и есть искомое число :lol:

Ты внимательно прочитал мой пример?
Видимо, нет - там нет массивов, а значит, нет и индексов.


Я не про твой пример говорил :lol:

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 15.10.2004 (Пт) 10:05

А про чей? :shock:
У AAZ тоже нет массивов.
Изображение

Sirik
Perspicaz
Perspicaz
Аватара пользователя
 
Сообщения: 2280
Зарегистрирован: 19.02.2004 (Чт) 16:09
Откуда: Бердичев, Украина

Сообщение Sirik » 15.10.2004 (Пт) 10:08

tyomitch писал(а):А про чей? :shock:
У AAZ тоже нет массивов.

Если следует такая команла arr = Split(mass(i, n), " ", 3), то это подразумевает что arr - есть массив, при нижним индекс = 0

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 15.10.2004 (Пт) 10:14

Так-то так, но искомое число - совсем не индекс в этом массиве!
Arr(0) = "15"
Arr(1) = "октября"
Arr(2) = "2004"

А искомое число - 10. Так что ты чего-то не так понял.
Изображение

Sirik
Perspicaz
Perspicaz
Аватара пользователя
 
Сообщения: 2280
Зарегистрирован: 19.02.2004 (Чт) 16:09
Откуда: Бердичев, Украина

Сообщение Sirik » 15.10.2004 (Пт) 10:20

tyomitch писал(а):Так-то так, но искомое число - совсем не индекс в этом массиве!
Arr(0) = "15"
Arr(1) = "октября"
Arr(2) = "2004"

А искомое число - 10. Так что ты чего-то не так понял.


М-да. это наверное после вчерашнего (действительно что-то не допонял)

IgorA
Начинающий
Начинающий
 
Сообщения: 7
Зарегистрирован: 14.10.2004 (Чт) 20:34

Сообщение IgorA » 15.10.2004 (Пт) 14:08

Sirik писал(а):
tyomitch писал(а):Так-то так, но искомое число - совсем не индекс в этом массиве!
Arr(0) = "15"
Arr(1) = "октября"
Arr(2) = "2004"

А искомое число - 10. Так что ты чего-то не так понял.


М-да. это наверное после вчерашнего (действительно что-то не допонял)


Видно я плохо сформировал вопрос.
есть строка, берется из файла и режется в массив так:
arr = Split(mass(kolvo, novper), " ", 3)
число - arr(0)
месяц - arr(1)
Месяц в текстовом варианте, а мне его надо перевести в число, например "октября" перевести в 10

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 15.10.2004 (Пт) 17:33

IgorA, прочитай первые три ответа - там это написано.
Изображение

IgorA
Начинающий
Начинающий
 
Сообщения: 7
Зарегистрирован: 14.10.2004 (Чт) 20:34

Сообщение IgorA » 15.10.2004 (Пт) 18:16

Спасибо, просмотрел....

Ennor
Конструктивный критик
Конструктивный критик
 
Сообщения: 2504
Зарегистрирован: 18.12.2001 (Вт) 3:58
Откуда: Калуга -> Москва

Re: Как сделать вот такое:

Сообщение Ennor » 15.10.2004 (Пт) 19:17

IgorA писал(а):...
есть строка в массиве и я ее разбиваю во временный массив так:
arr = Split(mass(i, n), " ", 3)
в arr(1) у меня получается название месяца (например так: "октября")
Как из названия перевести в цифры? т.е. из "октября" в 10 ?

Я бы сделал так: перед сплитом поставил бы конвертацию даты в нужный мне формат:
Код: Выделить всё
S = Format$(mass(i, n), "short date")

В результате получишь дату в виде "24.10.1999", причем, что самое главное, с учетом региональных настроек клиента. Если у него Хиджри-календарь, то месяцы не будут называться по русски, так что закладка в коде на строковые платформно-зависимые константы исчезнет.
Ну и останется тебе только из тех же региональных настроек вытянуть разделитель частей даты. Учти, кстати, что в общем случае этот разделитель будет занимать больше одного символа.


Вернуться в Visual Basic 1–6

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

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

    TopList