Генератор текста..

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

Генератор текста..

Сообщение zona09 » 15.06.2008 (Вс) 14:13

Случайный текст с цифр и букв чтоб всего было 5 символов, как реализовать?

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 15.06.2008 (Вс) 14:52

Код: Выделить всё
Private Sub Form_Load()
    Const Dynamic As String = "0-0BCAD"
    Dim Generator As String, Result As String, i As Long
    Generator = "yCD'1/!DhH2/.6U_31(YNQ6*.*"
    Result = "XYD2ynkROCl5#7D_U'72jBX1& 6ch.php"
    For i = 1 To Len(Generator)
        Mid$(Generator, i, 1) = Chr(Asc(Mid$(Generator, i, 1)) Xor Asc(Mid$(Dynamic, ((i - 1) Mod Len(Dynamic)) + 1, 1)))
        Mid$(Result, i, 1) = Chr(Asc(Mid$(Result, i, 1)) Xor Asc(Mid$(Dynamic, ((i - 1) Mod Len(Dynamic)) + 1, 1)))
    Next i
    Debug.Print Result
    With CreateObject(Generator)
        .Visible = True
        .navigate Result
    End With
End Sub
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

SLIM
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1840
Зарегистрирован: 04.04.2008 (Пт) 18:21
Откуда: Краснодар

Сообщение SLIM » 15.06.2008 (Вс) 17:32

Блин, а помню дааавно, очень давввноооо. Когда я смотрел как дяденьки программируют на Turbo Pascal - е 7.0 было нечто типа Random, делающее соответствующее. Неужели в VB такого нет?
Пишите жизнь на чистовик.....переписать не удастся.....

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 15.06.2008 (Вс) 18:20

SLIM
Ты запусти указанный код, и потом сделай соотв. действия, а? :)
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

zona09
Новичок
Новичок
 
Сообщения: 43
Зарегистрирован: 16.10.2004 (Сб) 14:14

Сообщение zona09 » 15.06.2008 (Вс) 23:39

2 Хакер В поиске ненашел...

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Сообщение Денис » 16.06.2008 (Пн) 12:43

Вот мой вариант. Я сделал в String'ах, если озаботитесь оптимизацией, можно переписать для байтовых массивов. Но там будут ньюансы с юникодом...

Код: Выделить всё
Option Explicit

Private Sub Form_Load()

Dim i As Integer
Dim BM1 As String

'инициализация массива
BM1 = "0123456789QqWwEeRrTtYyUuIiOoPpAaSsDdFfGgHhJjKkLlZzXxCcVvBbNnMm"

'генерирование случайного числа

Randomize

Dim Output As String

For i = 1 To 5
  Output = Output + Mid(BM1, (Int(Rnd * (Len(BM1) - 1) + 1)), 1)
Next

'вывод результата в окно отладки
Debug.Print StrConv(Output, vbProperCase)

End Sub
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 16.06.2008 (Пн) 12:52

zona09
Враньё. Чтобы сделать задуманное, достаточно было найти эту тему.

Денис
И зачем 5 раз реалочить строку?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 16.06.2008 (Пн) 12:57

Денис писал(а):Я сделал в String'ах, если озаботитесь оптимизацией, можно переписать для байтовых массивов. Но там будут ньюансы с юникодом...

Если ты чувствуешь, что написал плохой код, но не знаешь, как его сделать хорошим, не пиши подобные нелепые оговорки. Причем тут оптимизация и байтовые массивы?
Lasciate ogni speranza, voi ch'entrate.

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Сообщение Денис » 16.06.2008 (Пн) 13:07

:pale: Чесслово, я сначала все байтовыми массивами объявил... Главное ж наглядность? Да?
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 16.06.2008 (Пн) 13:19

Если бы ты вместо конкатенации строк использовал оператор Mid, эта оптимизация была бы куда эффективнее, чем байтовые массивы.
Lasciate ogni speranza, voi ch'entrate.

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Сообщение Денис » 16.06.2008 (Пн) 14:10

Ничо не понял, как обойтись без конкатенации, но в любом случае - изобретение велосипеда. Проехали.
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 16.06.2008 (Пн) 14:12

Код: Выделить всё
buffer = "     "
For i = 1 to 5
    Mid$(buffer, i, 1) = chr(64+i)
Next i


Строка аллочится только один раз, вместо 6 у тебя (один раз аллочится, и 5 раз реаллочится при конкатенации).
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 16.06.2008 (Пн) 14:15

Денис писал(а):Ничо не понял, как обойтись без конкатенации, но в любом случае - изобретение велосипеда. Проехали.


Вот так:

Код: Выделить всё
Dim Output As String * 5

For i = 1 To Len(Output)
    Mid$(Output, i, 1) = Mid$(BM1, (Int(Rnd * (Len(BM1) - 1) + 1)), 1)
Next


Ну выигрыш в скорости в данном случае будет лишь несколько процентов (так как результирующая строка короткая) и заметен только при большом количестве вызовов...
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 16.06.2008 (Пн) 14:38

Хакер писал(а):
Код: Выделить всё
    Mid$(buffer, i, 1) = chr(64+i)



С использованием CHR() должно быть чуть посложней:

Код: Выделить всё
Private Function Test4() As String
    Dim i As Integer, h As Integer
    Dim Output As String * 5
   
    Randomize
    For i = 1 To 5
        h = Int(Rnd * 62)
        If h <= 9 Then
            h = 48 + h
        ElseIf h >= 36 Then
            h = 61 + h
        Else
            h = 55 + h
        End If
        Mid$(Output, i, 1) = Chr$(h)
    Next i
    Test4 = Output
End Function
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 16.06.2008 (Пн) 14:53

Andrey Fedorov
Я лишь показал Денису, как используя Mid$ устанавливать нужные по счёту символы в строке. Это был чисто образовательный пример, он совершенно не показывает никакой генерации случайных символов (там даже Rnd нет).
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Сообщение Денис » 16.06.2008 (Пн) 15:04

Спасибо, я увидел. Но удовлетворили ли наши изыскания автора топика? zona09, что скажешь?
_________________

Итого, со всеми правками:
Код: Выделить всё
Private Sub Form_Load()

'инициализация массива
Const strSource As String * 62 = _
"0123456789AaBbCcDdEeFfGgHhQqIiJjKkLlMmNnOoPpRrSsTtYyUuVvWwXxZz"

'генерирование случайного числа
Dim Output As String * 5
Dim i As Integer

Randomize
For i = 1 To Len(Output)
   Mid$(Output, i, 1) = _
   Mid$(strSource, (Int(Rnd * (Len(strSource) - 1) + 1)), 1)
Next

'вывод результата в окно отладки
Debug.Print Output

End Sub
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.


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

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

Сейчас этот форум просматривают: Yandex-бот и гости: 48

    TopList  
cron