powered by simpleCommunicator - 2.0.36     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / И снова здрасте.))
25 сообщений из 35, страница 1 из 2
И снова здрасте.))
    #40068168
user-77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Короче... решил поюзать VB6, потому что он читает .bas и т.п. Нашел в сети какую-то portable сборку.
Решил посмотреть как себя поведет эта штука при переносе в нее vbscript.
В общем не знаю че не так, но такой вот код не пашет:

Код: vbnet
1.
2.
3.
4.
5.
i = Split(i, ",")

For x = 0 To UBound(i)
i(x) = CLng(i(x)): MsgBox ("i = " & i(x) & " " & TypeName(i(x)))
Next



Суть в том, что преобразование типа не работает. Говорит, что тип данных String.
Это говносборка такая или я что-то не так делаю???




*** "Лучший копилятор - это мозг…" © ***
...
Рейтинг: 0 / 0
И снова здрасте.))
    #40068181
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Значение в переменной i нам предлагается угадать?

Но вообще - говнокод голимый, конечно.
...
Рейтинг: 0 / 0
И снова здрасте.))
    #40068188
Eolt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user-77,

Это не говносборка. Просто код - бред сумасшедшего.
...
Рейтинг: 0 / 0
И снова здрасте.))
    #40068191
Eolt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Много повидал на этом форуме, но вот это

Код: vbnet
1.
i = Split(i, ",")



просто вишенка на торте
...
Рейтинг: 0 / 0
И снова здрасте.))
    #40068206
user-77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Eolt,

Нормальный код. i - естественно строка, которую мы превращаем в массив через Split. Че непонятного? Я же писал, что изначально был скрипт. А на счет MsgBox - он тупо должен показать тип переменной, которая должна была стать Long, а она остается String. Какого?
...
Рейтинг: 0 / 0
И снова здрасте.))
    #40068210
user-77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,

тоже мне спецы.. мля. лишь бы пакость сказать не по делу.
...
Рейтинг: 0 / 0
И снова здрасте.))
    #40068227
Eolt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user-77
Eolt,

Нормальный код. i - естественно строка, которую мы превращаем в массив через Split. Че непонятного? Я же писал, что изначально был скрипт. А на счет MsgBox - он тупо должен показать тип переменной, которая должна была стать Long, а она остается String. Какого?


Если "нормальный" код почему ошибка? Повторюсь твой код - бред сумасшедшего.
...
Рейтинг: 0 / 0
И снова здрасте.))
    #40068228
Eolt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user-77
Akina,

тоже мне спецы.. мля. лишь бы пакость сказать не по делу.


Тебя пытаются заставить думать. А не просто тупо копировать код, работу которого ты не понимаешь.
Из-за этого у тебя возникают ошибки.
...
Рейтинг: 0 / 0
И снова здрасте.))
    #40068231
user-77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Eolt,

Ну опять... типа я не понимаю как работает собственный скрипт, который прекрасно работал/работает сам по себе. Я лишь пытаюсь перенести его в VB. И там он не работает.

В VB6 не работает x = CLng(x)? Надо как-то иначе преобразовывать тип? Или неправильно работает TypeName(x) и он показывает неверные данные?
...
Рейтинг: 0 / 0
И снова здрасте.))
    #40068236
x1ca4064
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user-77


Суть в том, что преобразование типа не работает. Говорит, что тип данных String.
Это говносборка такая или я что-то не так делаю???


У меня есть большие сомнения, что VB поддерживает массив из элементов разного типа: попробуйте создать новый массив нужного типа, а в него уже кидайте результат конвертации строки.
...
Рейтинг: 0 / 0
И снова здрасте.))
    #40068237
Eolt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user-77
Eolt,

Ну опять... типа я не понимаю как работает собственный скрипт, который прекрасно работал/работает сам по себе. Я лишь пытаюсь перенести его в VB. И там он не работает.


1. Кто тебе сказал, что VBScript и VB6 полностью совместим между собой на уровне переноса кода?
2. Подумай какого типа в VB6 оказалась переменная i после твоего переноса из VBScript
3. Какого типа вернула массив функция Split
4. Почему в дальнейшем операции над этим типом приводят к ошибке.


авторВ VB6 не работает x = CLng(x)? Надо как-то иначе преобразовывать тип? Или неправильно работает TypeName(x) и он показывает неверные данные?

У плохих программистов всегда виноват компилятор или операционная система. Исправляйте кривые руки.
...
Рейтинг: 0 / 0
И снова здрасте.))
    #40068238
user-77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
user-77,

Все уже работает.. но код мне не нравится. Пришлось везде прописать CLng. Т.е. везде вообще, и при сравнениях и при записи в массив и т.д.
Вместо

Код: vbnet
1.
2.
3.
For x = 0 To UBound(i)
i(x) = Clng(i(x))
Next



Т.е. когда ты проходишь весь массив, преобразуя по ходу тип данных. Т.е. вместо того, чтобы
это преобразование выполнить один раз для всего массива пришлось везде добавлять
дурацкий CLng. А там очень много таких мест. Почему так???

Может быть можно как-то преобразовать массив целиком не через цикл?
...
Рейтинг: 0 / 0
И снова здрасте.))
    #40068240
user-77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Eolt,

Split естественно выполняется над строкой, над чем же еще? Соответственно в массиве
оказывается тип String - может я неправильно понимаю, но по-моему так.
CLng об ошибке преобразования типа не сообщал, значит тип должен был быть
преобразован. А вот TypeName говорит, что не преобразован. И собственно далее все
работало неправильно.
Вообще по сравнению со скриптом VB просто выбесил. Мало того, что ему везде подавай
Dim вместо (перед) a = так еще и CLng весь код засрал.. фу.
Я конечно пока точно не знаю все ли там работает как надо.. но сам код стал ужасный
с этими дебильными костылями.

Блин. Может есть скриптовые языки (только не ява) у которых есть формы и которые
более удобные для переноса??? На что бы перейти. Я только из-за форм.
...
Рейтинг: 0 / 0
И снова здрасте.))
    #40068241
Eolt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user-77
user-77,

Все уже работает.. но код мне не нравится. Пришлось везде прописать CLng. Т.е. везде вообще, и при сравнениях и при записи в массив и т.д.
Вместо

Код: vbnet
1.
2.
3.
For x = 0 To UBound(i)
i(x) = Clng(i(x))
Next



Т.е. когда ты проходишь весь массив, преобразуя по ходу тип данных. Т.е. вместо того, чтобы
это преобразование выполнить один раз для всего массива пришлось везде добавлять
дурацкий CLng. А там очень много таких мест. Почему так???

Может быть можно как-то преобразовать массив целиком не через цикл?


Трындец. Ты хоть понял в чем твоя ошибка? Зачем ты лепишь CLng в коде не понимая причины происходяещего?
...
Рейтинг: 0 / 0
И снова здрасте.))
    #40068242
Eolt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user-77
Eolt,

Соответственно в массиве
оказывается тип String - может я неправильно понимаю, но по-моему так.


Разумеется нет. Не String. Странно что ты этого не понимаешь.
...
Рейтинг: 0 / 0
И снова здрасте.))
    #40068244
user-77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Eolt,

Ты по делу скажи лучше.. Я вообще не программер. Показывает String, а не variant, если что.

Откуда я знаю в чем там ошибка с типом данных??? Ну может есть у VB нюанс при передаче переменных из функции в функцию? Я без понятия.
...
Рейтинг: 0 / 0
И снова здрасте.))
    #40068245
Eolt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне кажется user-77 так и не поймет в чем причина его ошибки. Попробую объяснить чтобы было понятно непрограммисту.

VBScript - язык бестиповый (точнее с одним типом Variant), с автоматическим приведением типа во всех функциях.
VB6 - язык с типами (Variant тоже есть) с автоматическим и явным приведением типов в зависимости от ситуации.

Делая объявление переменной Dim i в VBScript ты просто объявляешь переменную.
В VB6 объявление Dim i равнозначно Dim i as Variant т.е. ты получаешь не String а Variant !

Из за этого будет куча проблем в последствии, когда множество функций будут валится с ошибкой несоответствия типа.
Функция хочет String, а ты пихаешь в нее Variant, из за этого ошибка. Которую ты перекрываешь операцией явного приведения типа Clng например, или Cstr и т.д.

Чтобы побороть эту ошибку не используй тип Variant. Это слишком коварный тип для новичков, который таит в себе кучу граблей в операциях автоматического приведения типа. Объявляй нужный тебе тип явно, например String или Long и будет тебе счастье.
...
Рейтинг: 0 / 0
И снова здрасте.))
    #40068246
user-77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Eolt,

Я вроде это как бы знаю.. но возможно не совсем.)) Я действительно объявлял как вариант.
Только делал это специально, потому что..
Dim a, b, c, d написать проще чем a As ... b As.. и т.д. А переменных там до хрена.

i - изначально был пользовательский ввод через InputBox. Поэтому там строка, а не вариант.
Т.е. было так:

Dim i: i = InputBox -> и поехали...

Затем Split -> получаем массив.
Но поскольку этот ввод это цифры, то далее мне требуется привести это к числу.
И это приведение я делал через цикл, но оно почему-то не работает. Поэтому пришлось
юзать CLng.

Возможно мне столо привести другие переменные к конкретике, но это долго, потому что
они по ходу дела меняются неоднократно. У меня не хватает фантазии их придумывать, а
тупое d1, d2, d3... и т.д. меня не устраивает.

Еще эти переменные катаются между разными функциями, где эта зараза тоже просила
Dim. Т.е. там тоже пришлось бы объявлять их с As..
...
Рейтинг: 0 / 0
И снова здрасте.))
    #40068247
Eolt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Во всех советах по VB6 советуют не использовать Variant, это очень плохой тип для разработки программ

Избегайте использования переменных типа Variant
...
Рейтинг: 0 / 0
И снова здрасте.))
    #40068248
user-77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Eolt,

Ладно. Проверим. Заменю потом для одного из массивов начальный тип и посмотрим как сработает потом преобразование в цикле.
...
Рейтинг: 0 / 0
И снова здрасте.))
    #40068375
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user-77, избранная вами манера общения по сути не позволяет давать вам вменяемые советы.

user-77
... типа я не понимаю как работает собственный скрипт, который прекрасно работал/работает сам по себе. Я лишь пытаюсь перенести его в VB. И там он не работает.
...

Если бы вы понимали, у вас и вопроса вашего не возникло.
Чтобы понять, что происходит, достаточно увидеть результат выполнения вот такого кода:

Код: vbnet
1.
2.
i = Split(i, ",")
MsgBox( Typename(i))



В VB/VBA код
Код: vbnet
1.
2.
3.
4.
5.
i = Split(i, ",")

For x = 0 To UBound(i)
i(x) = CLng(i(x)): MsgBox ("i = " & i(x) & " " & TypeName(i(x)))
Next


такого вида бессмысленный .
Он в принципе не может достигнуть нужной вам цели.
Массив с типом элемента строка в принципе никогда не превращается в массив с элементом длинное целое.
Ни за какое количество Clng.

И вы не можете там (в VB/VBA) результат выполнения split присвоить массиву с типом элемента Variant.
Вот и всё.
...
Рейтинг: 0 / 0
И снова здрасте.))
    #40068399
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вчитался в вопрос и всё фычеркнул наф.
...
Рейтинг: 0 / 0
И снова здрасте.))
    #40070168
user-77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
booby,

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

А если по вашему это не бред - ответьте ПОЧЕМУ, НЕ КОНВЕРТИТ? В чем проблема то?
Мог бы и отконвертить, если бы этот VB нормальные люди писали.

А работает только вот так (через костыли):

Код: vbnet
1.
2.
3.
4.
5.
tmp = Split(i, ";"): ReDim i(UBound(tmp)) As Long

  For x = 0 To UBound(i)
  i(x) = tmp(x)
  Next



Проблема была только в том, что мне не хотелось прибегать к дополнительным
переменным.
...
Рейтинг: 0 / 0
И снова здрасте.))
    #40070169
user-77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
booby,

boobyuser-77, избранная вами манера общения по сути не позволяет давать вам вменяемые советы.

Дайте совет пожалуйста! Можно ли в VB6 как-то обойти ограничение на ввод в 1024 знака?
Или это зашито намертво и никакой библиотекой вопрос с multiline textbox на много букофф
не решается?
...
Рейтинг: 0 / 0
И снова здрасте.))
    #40070172
user-77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
booby,

Блин.. заработался, пардон перепутал копипасты. Это про другое было.

А на счет манеры общения. Что не так с моей манерой? Разве тот вариант, что я в предыдущем посте написал мне не могли подсказать? Конечно могли! Но не захотели...
Вместо этого пошел флуд на тему "какой он дебил, какой говнокод" и т.п. Так что я
полагаю, проблема не во мне, друзья.
...
Рейтинг: 0 / 0
25 сообщений из 35, страница 1 из 2
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / И снова здрасте.))
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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