• Администрация SafeZone приветствует вас на нашем форуме!
    Если вы больше не желаете видеть рекламу при просмотре тем и сообщений - то достаточно просто зарегистрироваться. Для зарегистрированных пользователей реклама не отображается.

VB 6 Не преобразуется тип данных.

Кирилл

Команда форума
Администратор
Сообщения
13,313
Симпатии
5,865
#1
Привет.

Мне кажется, решение где то на поверхности - но я его пропускаю.

Имеется:
Чтение файла, построчно.
Когда достигается определенная строка в цикле - присваиваем значение label.
Когда пытаюсь число типа 123 123 из string преобразовать через val - то получаю только 123
Если через cdbl - несовпадение типов.
Это странно - потому что раньше так работало....

Код:
Dim MyFile, FIO As String, i As Integer, y(76) As Integer
    Dim r(9) As Long, u As Long
    
   
        MyFile = FreeFile
        Open ("C:\Logg\planlog.txt") For Input As MyFile
            For i = 0 To 76
            y(i) = i
                  Line Input #MyFile, FIO
                  FIO = Strings.Format$(FIO, "0,0")


...............

                  If i = 63 Then Label95.Caption = FIO
                  If i = 64 Then Label96.Caption = FIO

                  Label103.Caption = CDbl(Label96.Caption)  - CDbl(Label95.Caption)

                  
            Next i
      Close #MyFile
В файле C:\Logg\planlog.txt - строки и символы
Запись производится верно, число отображаются строковым типом с разделением по разрядам.
Как производить арифметические операции с ними тогда?
 

Кирилл

Команда форума
Администратор
Сообщения
13,313
Симпатии
5,865
#3
Пробел есть.
На аналоничном блоке строка из 123 123 преобразуется в 123123 через cdbl
Я просто не пойму почему сейчас не работает...
 

Кирилл

Команда форума
Администратор
Сообщения
13,313
Симпатии
5,865
#4
Решение нашел.
Логически объяснить не могу...
Label103.Caption = CDbl(Label96.Caption) - CDbl(Label95.Caption)
Эту строку выносим за пределы Close #MyFile
Тогда работает.
 

Dragokas

Very kind Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
5,647
Симпатии
5,529
#5

Кирилл

Команда форума
Администратор
Сообщения
13,313
Симпатии
5,865
#6
Лично я не знаю такого типа числа :)
А что ты ожидаешь получить в результате преобразования? И какой тип данных хочешь получить, челый, дробный, ...?
Ну я имел ввиду ни тип данных, а слово типа - т.е. например.
В результате преобразования я должен получить числа, где то до одного десятка, где то без них.
Вид чисел - разделение по разрядам, то есть пробел через три цифры.
Как и говорил чуть выше - преобразование через cdbl работает, если делать это после закрытия файла.
 

Dragokas

Very kind Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
5,647
Симпатии
5,529
#7
Если достаточно десятые, то используй тип данных single.
Если пробел - это просто разделитель, то тебе его нужно сперва удалить его перед преобразованием в число. Кроме того, если число с плавающей запятой, то нужно учесть региональные стандартны, иначе получишь ошибку.
Код:
Dim sngResult as single
sngResult = CSng(replace(replace(Label1.Caption),",",".")," ","")
а вот здесь я честно говоря не знаю что ты делаешь, зачем отнимаешь одно число от другого:
Код:
Label103.Caption = CDbl(Label96.Caption) - CDbl(Label95.Caption)
Ну а вообще в таких случаях перед преобразованием (вызовом CSng) лучше сперва проверять, является ли строка числом, функцией IsNumeric()
 
Последнее редактирование:
Сверху Снизу