powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Упрощение кода
25 сообщений из 93, страница 3 из 4
Упрощение кода
    #38911349
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
потому что этот набор цифр, точек, минусов и точек запятой VB затруднился преобразовать в Single
...
Рейтинг: 0 / 0
Упрощение кода
    #38911356
vdekameron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Proпотому что этот набор цифр, точек, минусов и точек запятой VB затруднился преобразовать в Single
Я из excel пробую. Там нет никаких точек с запятой. Обычные цифры. пробовал и с точкой и с запятой в качестве разделителя.
...
Рейтинг: 0 / 0
Упрощение кода
    #38911372
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Считай строку в переменную и выведи ее на экран.
Потом прочитай, что я тебе написал, как действовать
...
Рейтинг: 0 / 0
Упрощение кода
    #38911375
vdekameron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Хочу по-своему)) Так же тоже правильно как я привел. Уже разобрался. Дело не в том что VB затруднился распознать минусы, точки. Я убрал Line и оставил только Input и прекрасно определили данные как single
...
Рейтинг: 0 / 0
Упрощение кода
    #38911384
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vdekameronЯ убрал Line и оставил только Inputа, да, а я и забыл про эту возможность
...
Рейтинг: 0 / 0
Упрощение кода
    #38911397
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vdekameronХочу по-своему)) Так же тоже правильно как я привел. Уже разобрался. Дело не в том что VB затруднился распознать минусы, точки. Я убрал Line и оставил только Input и прекрасно определили данные как single


а теперь смени региональные установки на английский и посмотри что у тебя случиться
...
Рейтинг: 0 / 0
Упрощение кода
    #38911434
vdekameron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Konst_One
а теперь смени региональные установки на английский и посмотри что у тебя случиться
Включил , все работает.
...
Рейтинг: 0 / 0
Упрощение кода
    #38911436
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Konst_Oneа теперь смени региональные установки на английский и посмотри что у тебя случитьсяобрати внимание на скрин - у него там точка в качестве разделителя.

Вполне возможно, что в прочитанном массиве уже только целая часть числа.... или у него и так стоит английский


vdekameron, нельзя полагаться на неявную конверсию чисел, она будет работать по-разному при различных региональных настройках в виндузе
...
Рейтинг: 0 / 0
Упрощение кода
    #38911437
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vdekameronВключил , все работает.работает.... ошибок не выдает. А ты смотрел, ЧТО ИМЕННО попало в массив?
...
Рейтинг: 0 / 0
Упрощение кода
    #38911440
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vdekameronKonst_One
а теперь смени региональные установки на английский и посмотри что у тебя случиться
Включил , все работает.

не верю

Код: vbnet
1.
2.
3.
4.
5.
6.
'a - значение из файлика csv
Dim a as String
Dim b as Single

a = "12.052"
b = CSng(a)
...
Рейтинг: 0 / 0
Упрощение кода
    #38911450
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Konst_Oneне верю

Код: vbnet
1.
2.
3.
4.
5.
6.
'a - значение из файлика csv
Dim a as String
Dim b as Single

a = "12.052"
b = CSng(a)

это код будет корректно работать в английском варианте, а в русском выдаст ошибку

Но кто сказал, что в Input используется CSng? Скорее уж что-то типа Val, который не дает ошибку (но может не увидеть дробную часть)
...
Рейтинг: 0 / 0
Упрощение кода
    #38911453
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProKonst_Oneне верю

Код: vbnet
1.
2.
3.
4.
5.
6.
'a - значение из файлика csv
Dim a as String
Dim b as Single

a = "12.052"
b = CSng(a)


это код будет корректно работать в английском варианте, а в русском выдаст ошибку

Но кто сказал, что в Input используется CSng? Скорее уж что-то типа Val, который не дает ошибку (но может не увидеть дробную часть)Даже наврал.
Val корректно работает именно с точкой, так что тут, похоже, все ок
...
Рейтинг: 0 / 0
Упрощение кода
    #38911456
vdekameron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
У меня тут пару минут осталось работать) Но не поленюсь скрины сделать)
Это скрин при Нормальных настройках - Россия
...
Рейтинг: 0 / 0
Упрощение кода
    #38911458
vdekameron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
бл. спешу) не тот. На первом скрине Русские, втором - Англ.
...
Рейтинг: 0 / 0
Упрощение кода
    #38911459
vdekameron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
...
Рейтинг: 0 / 0
Упрощение кода
    #38911466
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а вот теперь подумай, что будет если на русском компе сохранят файлик, а на английском компе попытаются его открыть
...
Рейтинг: 0 / 0
Упрощение кода
    #38911520
vdekameron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Konst_Oneа вот теперь подумай, что будет если на русском компе сохранят файлик, а на английском компе попытаются его открыть
А это не тоже самое что делал я на одном и том же компе? Сохранил файл. Поменял рег. настройки на англ. и открыл.
...
Рейтинг: 0 / 0
Упрощение кода
    #38911921
vdekameron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.ProСчитываешь одну строку, делишь функцией Split и записываешь в массив
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Private Sub Form_Load()
 Dim g As String
 Dim separate() As String
 Dim A1(0 To 4) As Double
 Dim i As Integer
  Open App.Path & "\1.txt" For Input As #1
   Input #1, g
   separate = Split(g, ";")
    For i = 0 To 4
     A1(i) = CDbl(separate(i))
    Next
End Sub


Запись в строку и биение сплитом ведь не спасет при изменении рег. настроек

Почему Type mismach? Ведь и cdbl определяет как double и массив задан как double
...
Рейтинг: 0 / 0
Упрощение кода
    #38911927
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vdekameronЗапись в строку и биение сплитом ведь не спасет при изменении рег. настроекНет. Сплит не нужен, я просто забыл, что можно читать не целиком строку.


vdekameronПочему Type mismach? Ведь и cdbl определяет как double и массив задан как doubleCDbl не понимает точку в качестве десятичного разделителя. Ему нужно то, что настроено в панели управления как десятичный разделитель.

То есть нужно либо использовать Val, либо предварительно заменять в тестовой строке точку на текущий десятичный разделитель.
...
Рейтинг: 0 / 0
Упрощение кода
    #38911930
vdekameron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.ProТо есть нужно либо использовать Val
Val не подойдет. Т.к. он не работает при значениях меньше 1
Shocker.Proлибо предварительно заменять в тестовой строке точку на текущий десятичный разделитель.

А как приказать менять точку именно на ТЕКУЩИЙ десятичный разделитель?
...
Рейтинг: 0 / 0
Упрощение кода
    #38911938
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vdekameronVal не подойдет. Т.к. он не работает при значениях меньше 1с чего ты взял? продемонстрируй.
vdekameronА как приказать менять точку именно на ТЕКУЩИЙ десятичный разделитель?вопрос сводится к тому, как получить текущий десятичный разделитель. Покури функцию Format$
...
Рейтинг: 0 / 0
Упрощение кода
    #38911950
vdekameron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
Private Sub Command1_Click()
Dim a As String
 a = "0,12"
 Debug.Print Val(a)
 Debug.Print CDbl(a)
  a = "0.12"
  Debug.Print Val(a)
  Debug.Print CDbl(a)
End Sub


Не знал, что CDbl работает только с текущим разделителем. Также думал что Val в любом случае не работает с значением меньше 1, оказывается что не работает только с тек. разделителем. Возвращая значение - 0. А если точка стоит , то норм.

Конечно мне проще использовать в данном случае Val , но я же не знаю что такое Format$ Поэтому почитаю про нее и попробую сделать вторым вариантом
...
Рейтинг: 0 / 0
Упрощение кода
    #38911954
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vdekameronчто не работает только с тек. разделителемя выше писал, но ты прохлопал. Val работает с ТОЧКОЙ. CDbl/CSng - с текущим разделителем.

Допустим, если у тебя всегда точка в исходном файле, то тебе достаточно Val.

Костя поднял другой вопрос - что будет, если кто-то поправит файл так, что там будут запятые, а не точки.
Если такого не предполагается (файл ты будешь править сам и блокнотом), то и ок.

Можно делать проверки при чтении файла (все зависит от уровня дистрибуции - если пользуешься программой сам и для себя, можно и забить, если планируешь, что ее будет кто-то эксплуатировать - обязательно надо делать проверки при чтении файла (что есть все, что надо, что нет ничего лишнего, что правильные разделители, что значения попадают в приемлемый диапазон и т.п.)
...
Рейтинг: 0 / 0
Упрощение кода
    #38911961
vdekameron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.ProМожно делать проверки при чтении файла (все зависит от уровня дистрибуции - если пользуешься программой сам и для себя, можно и забить, если планируешь, что ее будет кто-то эксплуатировать - обязательно надо делать проверки при чтении файла (что есть все, что надо, что нет ничего лишнего, что правильные разделители, что значения попадают в приемлемый диапазон и т.п.)
Спасибо за этот совет. Не думал об этом.
Код: vbnet
1.
2.
3.
4.
5.
6.
Private Sub Command1_Click()
Dim a As String
a = Format(1.1)
 a = Mid(a, 2, 1)
 Debug.Print a
End Sub



Я конечно был знаком с ф-ей Format , но думал что у нее узкая функциональность, сейчас читаю и очень интересно склько много может.
...
Рейтинг: 0 / 0
Упрощение кода
    #38911962
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
все проще
Код: vbnet
1.
Format$(.1, ".")
...
Рейтинг: 0 / 0
25 сообщений из 93, страница 3 из 4
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Упрощение кода
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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