You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@openoffice.apache.org by bu...@apache.org on 2022/08/09 18:44:27 UTC
[Issue 128533] New: The BASIC function Str inserts a space before negative numbers
https://bz.apache.org/ooo/show_bug.cgi?id=128533
Issue ID: 128533
Issue Type: DEFECT
Summary: The BASIC function Str inserts a space before negative
numbers
Product: App Dev
Version: 3.3.0 or older (OOo)
Hardware: PC
OS: Windows, all
Status: CONFIRMED
Severity: Minor
Priority: P5 (lowest)
Component: scripting
Assignee: issues@openoffice.apache.org
Reporter: czeslaw.wolanski@gmail.com
Target Milestone: ---
AOO Help on the Str function:
"The Str function converts a numeric variable,
or the result of a calculation into a string.
Negative numbers are preceded by a minus sign.
Positive numbers are preceded by a space
(instead of the plus sign)."
So for a value of 1 and -1 the Str function shall return,
respectively, ' 1' and '-1' (single quotes here are not part
of the returned strings). Nonetheless the following code
sub test_Str
MsgBox "'" & Str(1) & "'" & Chr(13) &_
"'" & Str(-1) & "'"
end sub
displays:
' 1'
' -1'
Only with Option VBASupport 1
or CompatibilityMode(True)
one gets the _expected_ value, i.e. ' 1' and '-1'
And one more inaccuracy - AOO Help on the Format function:
Syntax:
Format (Number [, Format As String])
Format: String that specifies the format code for the number.
If Format is omitted, the Format function works
like the Str function.
Thus Format(Number) should yield the same result as Str(Number)
The following code:
sub test_Format
MsgBox "'" & Format(1) & "'" & Chr(13) &_
"'" & Format(-1) & "'"
end sub
shows:
'1'
'-1'
--
You are receiving this mail because:
You are the assignee for the issue.
[Issue 128533] The BASIC function Str inserts a space before negative numbers
Posted by bu...@apache.org.
https://bz.apache.org/ooo/show_bug.cgi?id=128533
damjan@apache.org changed:
What |Removed |Added
----------------------------------------------------------------------------
Latest|--- |4.2.0-dev
Confirmation in| |
Hardware|PC |All
CC| |damjan@apache.org
OS|Windows, all |All
--- Comment #1 from damjan@apache.org ---
Our StarBasic implementation is in main/basic. In there, built-in functions
like Str() are declared with the form RTLFUNC(Str), and be found with:
$ grep RTLFUNC\(Str * -R
which gives, among others:
runtime/methods.cxx:RTLFUNC(Str)
where we see what it does:
---snip---
1573 RTLFUNC(Str)
1574 {
1575 (void)pBasic;
1576 (void)bWrite;
1577
1578 if ( rPar.Count() < 2 )
1579 StarBASIC::Error( SbERR_BAD_ARGUMENT );
1580 else
1581 {
1582 String aStr;
1583 SbxVariableRef pArg = rPar.Get( 1 );
1584 pArg->Format( aStr );
1585
1586 // Numbers start with a space
1587 if( pArg->IsNumericRTL() )
1588 {
1589 // Kommas durch Punkte ersetzen, damit es symmetrisch zu
Val ist!
1590 aStr.SearchAndReplace( ',', '.' );
1591
1592 SbiInstance* pInst = pINST;
1593 bool bCompatibility = ( pInst && pInst->IsCompatibility()
);
1594 if( bCompatibility )
1595 {
1596 xub_StrLen nLen = aStr.Len();
1597
1598 const sal_Unicode* pBuf = aStr.GetBuffer();
1599
1600 bool bNeg = ( pBuf[0] == '-' );
1601 sal_uInt16 iZeroSearch = 0;
1602 if( bNeg )
1603 iZeroSearch++;
1604
1605 sal_uInt16 iNext = iZeroSearch + 1;
1606 if( pBuf[iZeroSearch] == '0' && nLen > iNext &&
pBuf[iNext] == '.' )
1607 {
1608 aStr.Erase( iZeroSearch, 1 );
1609 pBuf = aStr.GetBuffer();
1610 }
1611 if( !bNeg )
1612 aStr.Insert( ' ', 0 );
1613 }
1614 else
1615 aStr.Insert( ' ', 0 );
1616 }
1617 rPar.Get(0)->PutString( aStr );
1618 }
1619 }
---snip---
Put a breakpoint on SbRtl_Str (which is what RTLFUNC(Str) mangles the name to),
and debugging, line 1587 is true, and line 1594 is false, so a space is
unconditionally appended in line 1615.
Maybe line 1615 should check for bNeg before adding the space, like lines
1611-1612 do?
As for the relationship between Str() and Format(), note that line 1584 calls
pArg->Format(). The built-in Format() function in RTLFUNC(Format) also calls
the Format() method on its arg. These end up in SbxValue::Format() of
main/basic/source/sbx/sbxscan.cxx, and end up converting the double to a
string. Yet Str() adds the space after calling Format(). So it's not accurate
to say "the Format function works like the Str function".
--
You are receiving this mail because:
You are the assignee for the issue.
[Issue 128533] The BASIC function Str inserts a space before negative numbers
Posted by bu...@apache.org.
https://bz.apache.org/ooo/show_bug.cgi?id=128533
--- Comment #2 from Czesław Wolański <cz...@gmail.com> ---
Thank you, damjan, for the code pointer and analysis.
> Maybe line 1615 should check for bNeg before adding the space,
> like lines 1611-1612 do?
Quite recently I came across a bug report submitted to
LibreOffice Bugzilla that is similar to my report.
tdf#146590
"Basic's Str function adding unnecessary blank space
before negative numbers"
https://bugs.documentfoundation.org/show_bug.cgi?id=146590
Please take a look at the comment therein
(I have no idea whether it might bear any relevance to OpenOffice).
--
You are receiving this mail because:
You are the assignee for the issue.