powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / локальные настройки языка
18 сообщений из 18, страница 1 из 1
локальные настройки языка
    #39033814
sboyko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем добрый день! Есть ПБ10.5.
имею строку текста, содержащее число. формат неизвестен, разделитель между целой и дробной частью - тоже(из Эксель-русской или английской версии).
Хочу знать, как на клиентской машине определить "правильный формат" числа из настроек ОС. ясно - для того, чтобы переформатировать строку с числом в правильный вид и преобразовать во внутренний формат.
Нигде не видел программ связи с национальной поддержкой языков(в ПБ).
Хотя бы где копать!
...
Рейтинг: 0 / 0
локальные настройки языка
    #39033938
Dim2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
21.08.2015 11:54, sboyko пишет:

> имею строку текста, содержащее число. формат неизвестен, разделитель
> между целой и дробной частью - тоже(из Эксель-русской или английской
> версии).
> Хочу знать, как на клиентской машине определить "правильный формат"

Перечитал 3 раза, ничего не понял :). Что такое правильный формат?

Если что, Decimal Separator и т.п. можно получить с помощью GetLocaleInfo().
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
локальные настройки языка
    #39034303
Фотография spas2001
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще простой метод
Код: sql
1.
2.
3.
4.
ls_format = string(1.1)
if pos(ls_format,',') then
    MessageBox('','Разделитель запятая')
end if


Но это только то, что касается децимального разделителя.
...
Рейтинг: 0 / 0
локальные настройки языка
    #39034304
Фотография spas2001
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Немножко ошибся:)
Код: sql
1.
if pos(ls_format,',') > 0 then...
...
Рейтинг: 0 / 0
локальные настройки языка
    #39034348
sboyko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
spas2001,

у меня string(1.1) сразу дает ошибку. я и пытался решить задачу таким способом. а вот string(1,1) работает прекрасно хотя ОС английская. точно также isnumber(1,1) прекрасно понимает - хотя вроде не должна.
...
Рейтинг: 0 / 0
локальные настройки языка
    #39034349
sboyko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dim2000,
а я 3 раза переписывал чтобы было понятно - так стараться и все же не понятно.
под правильным я понимаю набор символом в строке после которого преобразователь типа DEC(string) ГАРАНТИРОВАННО не даст ошибку. обычно мы над этим и не думаем - все делает ДВ и editmask. а тут пришлось обрабатывать строки экселя и возникла трудность с которой я давно не встречался.
...
Рейтинг: 0 / 0
локальные настройки языка
    #39034352
sboyko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dim2000,
а у меня в ПБ105 нет такой функции. :-( . или это виндовая функция?
...
Рейтинг: 0 / 0
локальные настройки языка
    #39034388
Фотография Raven A
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sboyko

" у меня string(1.1) сразу дает ошибку. ..." это, простите, как?
...
Рейтинг: 0 / 0
локальные настройки языка
    #39034518
sboyko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Raven A,
при трансляции
...
Рейтинг: 0 / 0
локальные настройки языка
    #39034529
sboyko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
прошу прощения - нечистый попутал.
ls="1.1"
isnumber(ls) - дает false,

ls="1,1"
isnumber(ls) - дает true
isnumber("1,1")-дает true

string(1.1) - все нормально
string(1,1) - ошибка трансляции

ld = 1.1 - все нормально
ld = 1,1 - ошибка трансляции
...
Рейтинг: 0 / 0
локальные настройки языка
    #39034635
Фотография Raven A
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sboyko,

Вы уж больше не пугайте так, а то я было подумал, что грибочки в супе у меня были не те :)

К сожалению, вашу постановку задачи я то-же не понял, туплю наверное.
Если вопрос о определении десятичного разделителя, УСТАНОВЛЕННОГО в ОС, то spas2001 дал Вам один из
самых простых способов его определения, да и Вы сами уже нашли свой вариант:
Код: vbnet
1.
2.
3.
4.
5.
  ls="1.1"
  isnumber(ls) - дает false
  ls="1,1" 
  isnumber(ls) - дает true
  isnumber("1,1")-дает true


Компилятор всегда в качестве разделителя в явно заданных числовых значениях/constant использует точку.
Разделитель, установленный в региональных настройках, используется только при преобразованиях string => numeric
при вводе информации (например при вводе в поле DW) и некоторых функциях ( f.e. IsNumber(S) )

По задаче: если формат входных данных не определён, "гарантированно" преобразовать строку в числа весьма "интересная" задачка.
...
Рейтинг: 0 / 0
локальные настройки языка
    #39035102
sboyko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Raven A,
Про грибочки - виноват.
По задаче: если формат входных данных не определён, "гарантированно" преобразовать строку в числа весьма "интересная" задачка.
Но ведь надо!
...
Рейтинг: 0 / 0
локальные настройки языка
    #39035110
sboyko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Raven A,
что меня неприятно удивило - 1.1 - внутренний формат числа - НО- isnumber с этим не согласен. ему нравится 1,1
есть мысль - а не связано это с тем что при работе используется русская раскладка? может в английской раскладке isnumber и 1.1 понравится...
...
Рейтинг: 0 / 0
локальные настройки языка
    #39035147
Mykola
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
decimal lc_ret
string ls_sep, ls_wrong_sep

RegistryGet("HKEY_CURRENT_USER\Control Panel\International","sDecimal", RegString!, ls_sep)

choose case ls_sep
case ","
ls_wrong_sep = "."
case "."
ls_wrong_sep = ","
case else
ls_sep = ","
ls_wrong_sep = "."
end choose
if isnull(as_dec) or trim(as_dec) = "" or trim(as_dec) = "0" then return 0

int li_pos
li_pos = pos(as_dec,ls_wrong_sep,1)
if li_pos > 0 then
as_dec = replace(as_dec, li_pos, 1, ls_sep)
lc_ret = dec(as_dec)
return lc_ret
else
return dec(as_dec)
end if


return 0
...
Рейтинг: 0 / 0
локальные настройки языка
    #39035150
Mykola
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PS:
string as_dec - аргумент функції,
...
Рейтинг: 0 / 0
локальные настройки языка
    #39035222
Dim2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
22.08.2015 13:48, sboyko пишет:

> а у меня в ПБ105 нет такой функции. :-( . или это виндовая функция?

Это WinAPI. MSDN в помощь :).
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
локальные настройки языка
    #39035248
Фотография Raven A
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sboyko,

Грибочки соберём новые :)

>"... что меня неприятно удивило - 1.1 - внутренний формат числа - НО- isnumber с этим не согласен. ему нравится 1,1 "

Для компилятора, вне зависимости от установленного в системе разделителя
Код: vbnet
1.
2.
3.
 real lr_Value
 lr_Value = Real( 1.1 )  // Ok
 lr_Value = Real( 1,1 )  // ERROR. Bad argument for function


Разделител, установленный в системе используется при преобразовании, явном или нет.
Если у Вас, как мне кажется, разделителем является <запятая> , то верно следующее утверждение
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
IsNumber( '1.1' ) // == FALSE
IsNumber( '1,1' ) // == TRUE

string ls_NumericStr_point = '1.1'
string ls_NumericStr_comma = '1,1'

IsNumber( ls_NumericStr_point ) // == FALSE
IsNumber( ls_NumericStr_comma ) // == TRUE
...
Рейтинг: 0 / 0
локальные настройки языка
    #39037527
sboyko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dim200022.08.2015 13:48, sboyko пишет:

> а у меня в ПБ105 нет такой функции. :-( . или это виндовая функция?

Это WinAPI. MSDN в помощь :).

спасибо конечно, НО Микрософт так часто меняет все в разных версиях винды, что не хочется напрямую обращаться Винапи.
у меня должно все работать от WinXP до Win8.1 и разной разрядности процессора.
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / локальные настройки языка
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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