LO Basic. Странное поведение функции Format

Автор ost, 4 июля 2021, 13:31

0 Пользователи и 1 гость просматривают эту тему.

ost

Доброго, помогите, пож., разобраться.
Почему в sResultText получаю строку "1"? Ожидал получить "001". При этом в sResultDate получаю ожидаемое, те строку "2021-07-03"
Спасибо.


aData = split("44380 001")
aFormat = split("YYYY-MM-DD @")

sSourceDate = aData(0)
sSourceText = aData(1)

sFormatDate = aFormat(0)
sFormatText = aFormat(1)

sResultDate = format(sSourceDate, sFormatDate)
sResultText = format(sSourceText, sFormatText)


На борту:
Version: 7.2.0.0.beta1 (x64) / LibreOffice Community
Build ID: c6974f7afec4cd5195617ae48c6ef9aacfe85ddd
CPU threads: 2; OS: Windows 6.1 Service Pack 1 Build 7601; UI render: Skia/Raster; VCL: win
Locale: ru-RU (ru_RU); UI: ru-RU
Calc: threaded

bigor

Если я правильно понял, то Format(obj, format) первый параметр Format не строка, так что Ваш sSourceText="001", преобразуется в 1.
Поддержать наш форум можно здесь

ost

Спасибо.
Да. Сейчас в справке прочитал:


Syntax:
Format (Number [, Format As String])
Return value:
String
Parameters:
Number: Numeric expression that you want to convert to a formatted string.
Format: String that specifies the format code for the number.

Только для чисел оно выдумано. Сори за переполох. =)

sokol92

#3
К сожалению, документация версии 7.1 в части описания функций Basic содержит многочисленные ошибки (я писал баг про Msgbox). В документации к версии 7.2 ошибки (потихоньку) исправляются - в частности, описание Format поправлено (по сравнению с вариантом из #2). Посмотрел внимательно - документация по Format  и в 7.2 явно ущербна - не описаны форматы для дат, текстового представления чисел ([Natnum*]), хотя функция Format это поддерживает. Создам баг по этому поводу (если такого нет  :) ).

Высший арбитраж по описанию параметров функций здесь.
Владимир.

eeigor

#4
И здесь немного (по функциям рабочего листа), которые тоже можно вызывать в коде через FunctionAccess.
Ubuntu 18.04 LTS • LibreOffice 7.5.1.2 Community

mikekaganski

Цитата: sokol92 от  4 июля 2021, 14:41
документация по Format  и в 7.2 явно ущербна - не описаны форматы для дат, текстового представления чисел ([Natnum*]), хотя функция Format это поддерживает.

Вы хотите в описании функции увидеть полный дубль статьи Number Format Codes, которая там указана в ссылках?
С уважением,
Михаил Каганский

sokol92

Цитата: mikekaganski от  4 июля 2021, 15:35Вы хотите в описании функции увидеть полный дубль статьи Number Format Codes, которая там указана в ссылках

Да, правильнее было бы просто сослаться на указанную Вами статью с указанием того, что следует применять только нелокализованные символы форматирования. Иначе пытливый читатель должен мучительно искать разницу межу двумя текстами (если таковая существует).
Владимир.

mikekaganski

С уважением,
Михаил Каганский

sokol92

 Честное слово, не подглядывал!  :-\
Владимир.

mikekaganski

Цитата: sokol92 от  4 июля 2021, 16:11
Честное слово, не подглядывал!  :-\

:beer: Естественно. Я четыре года назад успокоился на том, что ссылка появилась. Вы можете пойти дальше - поправить текст, чтобы описание форматов ограничивалось дополнительной ссылкой плюс списком предустановленных форматов.
С уважением,
Михаил Каганский

sokol92

#10
Хорошо!

Кстати, насчет  "Numeric expression" (в первом параметре) тоже сомнения:  :)

Msgbox Format("Это не число!", ">")
Владимир.

mikekaganski

Цитата: sokol92 от  4 июля 2021, 16:30Кстати, насчет  "Numeric expression" (в первом параметре) тоже сомнения

Да, "число" в справке - преувеличение: там Variant. Но если там строка, то она сперва преобразуется в число, и если получается - работа идёт с числом.

Функция SbxValue::Format реализует функционал. Там можно увидеть и спецформаты "<"/">"/"c"/"n"/"nn"/"w"/"y"/"General Date", и вызов SbxBasicFormater::isBasicFormat / SbxBasicFormater::BasicFormat, где проверяются форматы "General Number"/"Currency"/"Fixed"/"Standard"/"Percent"/"Scientific"/"Yes/No"/"True/False"/"On/Off".
С уважением,
Михаил Каганский

sokol92

Владимир.

mikekaganski

#13
С уважением,
Михаил Каганский

ost

Мир имеет шанс. Есть люди, которые, вслушиваясь в междометия, формулируют идею.