powered by simpleCommunicator - 2.0.36     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / И снова здрасте.))
35 сообщений из 35, показаны все 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
И снова здрасте.))
    #40070177
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1024- это ограничение для inputbox.
Для текстбокса не помню, вроде 64к было. У меня уже много лет нет установленного vb, проверить негде.
Для richtextbox не помню ограничений, но должно быть больше, чем 64к

по поводу костылей это не костыли, это вопрос понимания того ,что вы делаете..
Достичь ожидаемой вами цели код которой работал в vbs, в данном конкретном случае не может.
Это еще одна, в данном случае - отрицательная особенность языка со встроенными преобразованиями.
В данном случае, вместо того, чтобы делать нечто для вас бессмысленное, как раз разумнее выглядела бы ошибка времени выполнения. У медали всегда две стороны.


PS
Старайтесь далее не использовать персональную форму обращения при формулировке своих вопросов.
Во первых, вы отнимаете таким образом возможность ответить тем, кто на самом деле использует inputbox, или хотя бы помнит, что это такое.
А, во вторых, попробуйте принять в расчёт, что вы не можете рассчитывать на мой персональный ответ.
...
Рейтинг: 0 / 0
И снова здрасте.))
    #40070183
Eolt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user-77
booby,

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

Код: 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
И снова здрасте.))
    #40070481
user-77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Eolt,

Ну ты у нас самый умный и продвинутый.. покажи класс. Давай, как надо было???
А заодно и объясни о какой ошибке идет речь? Потому что этот код работает и
прекрасно преобразует тип данных из строки в Long...
Кроме того, я с самого начала говорил, что не программист ни разу.
...
Рейтинг: 0 / 0
И снова здрасте.))
    #40070483
user-77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
booby,

Я как раз об этом и говорил, что есть элементарное правило хорошего тона в IT, и в программировании в частности:

Любая команда должна точно и корректно выполнять возложенную на нее функцию
ИЛИ оповещать пользователя о невозможности ее выполнения в силу тех или иных причин.

Здесь же нет ни того, ни другого. Что CLng кривой, что Round. Впрочем, я не говорю, что VB
плохой. Уверен, что в других средах программирования бреда тоже хватает.
...
Рейтинг: 0 / 0
И снова здрасте.))
    #40070488
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user-77
есть элементарное правило хорошего тона
есть элементарное правило хорошего тона на форумах - создавать темы с адекватными заголовками, проявляя тем самым уважение к тем, кто регулярно просматривает список топиков, чтобы отвечать на них.
Соответственно, прошу впредь его придерживаться.
...
Рейтинг: 0 / 0
И снова здрасте.))
    #40070497
user-77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro,

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

Ну ты у нас самый умный и продвинутый.. покажи класс. Давай, как надо было???


Я не умный, просто в отличие от вас я умею программировать.
Для начала посмотреть в справочнике описание функции Split, какого типа входные параметры ей требуются.
Затем надо продекларировать переменную i.

Код: vbnet
1.
Dim i As String



После чего компилятор вам сообщит, что весь последующий код бред.

авторА заодно и объясни о какой ошибке идет речь? Потому что этот код работает и
прекрасно преобразует тип данных из строки в Long...


Поскольку здесь используете тип Variant, этот говнокод будет валится с ошибкой в зависимости от присвоенного i типа.
Из-за этой ошибки вы создали первый пост
Вроде уже обсудили, что нельзя использовать Variant, и вы снова на те же грабли.


авторКроме того, я с самого начала говорил, что не программист ни разу.

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

В общем, как я и думал... как обычно бла-бла-бла и ноль конкретных примеров.

EoltПоскольку здесь используете тип Variant, этот говнокод будет валится с ошибкой в зависимости от присвоенного i типа.
Из-за этой ошибки вы создали первый пост
Вроде уже обсудили, что нельзя использовать Variant, и вы снова на те же грабли.


1. Так.. по порядку. Если я напишу Dim i As String, то разумеется он будет валиться с ошибкой.
Так как там Variant, то ничего с ошибкой не валится.

2. Если Вы уж называете этот код говнокодом предложите правильный вариант полностью.

3. Предлагается что? Плодить лишние переменные, лишние массивы и занимать (пусть временно), но лишнюю память?
Это предлагается? И это будет не говнокод, а очень
правильно и разумно? По-моему вопрос стоит так - что лучше: много переменных или
использовать Variant. Я выбираю второе. И на этом основании Вы утверждаете, что код говно.
А еще пишете что-то невнятное про "этот говнокод будет валится с ошибкой" и про посмотреть что нужно функции Split.
Ежу понятно, что нужно Split и что у нее на выходе.
И свой первый пост я так же создал не потому что у меня Variant и не потому что он валился с ошибкой, а ровно наоборот:
ПОТОМУ ЧТО он не валился с ошибкой, но и преобразование не работало.
...
Рейтинг: 0 / 0
И снова здрасте.))
    #40070616
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user-77,

Ваше мнение о том, что "Clng не работает" в лучшем случае указывает на то, что вы "ни разу не программист".
Дело ваше, но думаю, что обучать вас с нуля, в предлагаемой вами манере изложения - вряд ли много охотников найдется.
Всё-таки для вас было бы и умнее и осторожнее показывать реальные куски своего кода, а не
"приблизительно похожие" примеры, составленные на откоснись.
Мне кажется, так у вас могло бы быть гораздо больше шансов получать более полезные с практической точки зрения ответы, применительно к вашей конкретной задаче, которую вы ни разу не озвучили.

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

Зачем кому-то мои куски кода? Я никого не прошу писать код за меня.
Зачем его компилировать? Я не прошу меня обучать с нуля. Я просто хотел
увидеть конкретный пример как в VB6 преобразовать массив из строкового
в числовой, вот и все. Как это решается в VB6. Я многого хотел?
На самом деле, странный какой-то форум. На других как то люди отвечают
друг-другу, а тут приходишь и тебя начинают воспитывать, поливать грязью,
а в конце говорят, что ты сам виноват, потому что у тебя манеры какие-то
не такие. Очень странно.

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

Кстати и в интернете эти вопросы всплывают с завидной регулярностью, а
ответов с гулькин хрен, кроме одного, что в VB6 это вроде как невозможно
сделать одной командой, только через цикл, заполняя массив, да и в этом
случае возможны заморочки.

CLng работает только в конкретных случаях, например при сравнениях,
во многих других нет. По-крайней мере, у меня так.
Не знаю, может быть это потому, что я давно занимаюсь скриптами, но ничего
против Variant не имею. Это же в конце концов просто удобно. Да, нужно следить
за тем что у тебя в каждый конкретный момент, за переполнением и т.п., но это
на мой взгляд мелочи, с которыми справится любой новичок.
...
Рейтинг: 0 / 0
35 сообщений из 35, показаны все 2 страниц
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / И снова здрасте.))
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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