I am still thining about the use of LEN.
Yes, it handles more than "length of a dynamic string"... specifically PB documents it to support scalar variables, types and unions as an equivalent to SIZEOF(), and ASCIIZ variables as "Number of bytes of data up to but not including the first $NUL" (that's my wording, which is better than that in the help file).
But if I recall correctly, LEN() had to do all that, because SIZEOF() was not added to the compiler line until sometime later.
That is, the introduction of the SIZEOF() function made certain capabilities of LEN() redundant, but since no publisher likes to 'deprecate' any feature, PowerBASIC didn't.
Well, maybe others will join me in considering it 'good programming practice" to use LEN() only to get the length of a dynamic string, and SIZEOF() to get the size of any variable.
I suppose it would be OK to use LEN() against an ASCIIZ string variable, although personally I'd suggest the lstrlen() WinAPI function.
MCM
Announcement
Collapse
No announcement yet.
Need help on Data Type and long line formula
Collapse
X
-
Thank Michael Mattias for your good help on LEN(FORMAT$(Numbervar))
Can Le
Leave a comment:
-
LEN() is for use with dynamic strings, not scalar variables.
Frankly I don't know why LEN() is even allowed with non-string variables; IMNSHO it should be a compile-time error to do so. SIZEOF() is the correct function to use for scalar variables.
However, the SIZEOF() a numeric variable is unrelated to its magnitude.
To count decimal digits of the value of a numeric variable, you can use LEN(FORMAT$(Numbervar))
Leave a comment:
-
Thank you all for your helps,
I tried your lines and it works, my errors were Data Type.
Now I have another problem: I counted a number for numbers of digits, I was working OK in PBCC 4.0 but when I changed data type, I can't count a number any more
Example
Local Num1, Num2 AS EXT
local LenNum1, LenNum2 as BYTE
Num1=123.25
Num2=1.75
LenNum1=LEN(Num1)
LenNum2=LEN(Num2)
PRINT LenNum1, LenNum2
My new problem are: All the answers equal =10, I checked SIZEOF(Num1)=10!
10 10
It should be 6 and 4. I can't count the total number of digits or characters of a number or a string !
Please help
Can Le
Leave a comment:
-
Another good reason to break up the formula in parts is that many times partial values change less often or remain constant. These intermediate values can be placed in outer for/next or do/loops.
Leave a comment:
-
I just had a thought on this. Well, two thoughts...
One formula should read as:
b12= (c1+d2 +................................................. .................................................. ..............................a4)/(a1+c1 +................................................. .................................................. ................................a3+a4)
Thought Two: you are in this deep anyway; why not use some temp variables so you can hold all the source code in field of view?
Eg instead of a line so long, use something like
Code:Temp1 = A1 + B2 + ........... Temp2 = C1 + C2 + .... ... Answer = Temp1 + Temp2 [ +Tempn]...
MCM
Leave a comment:
-
1. Do I have the continue line for formmula entry such as _ for continue as in print ?
2. Do I have to change to another new data type for longer than 12 digits, so what is the Data Type should be used ??
MCM
Leave a comment:
-
Need help on Data Type and long line formula
Hi
I need help on data type for a long line formula
I had my program worked OK on PB DOS 3.5, but I have wrong number when I changed to PBCC 4.0.
I have problem of data type, because I have a long line formula, so I have to break it into 2 lines.
When I run in PBCC 4.0 I had error in data type sine new value=-32768, in PBDOS the real value was about 20.
My break line the old variable N is now treated as a NEW DEFINITION
I have my program now in PBCC 4.0 susch as
FUNCTION PBMAIN AS LONG
LOCAL a1, a2, b1, b2,.....AS INTEGER
LOCAL c1, c2, d1, d2,....., N, b12 AS LONG
''''' N was not defined in PBDOS 3.5, and N is treated as (a NEW DEFINITION) AS INTEGER in PBCC 4.0
' examle of my 1 formula in 2 lines
a1=10: c1=22: d2=30.......
N = a1+c1+......................................................................................................a3+a4
b12= (c1+d2+..................................................................................................a4)/N
print b12
END FUNCTION
====================
I have now number N exceed limit, I checked new number in PBCC 4.0 with N = -32768.
So my new result is a wrong number for b12! which is b12 = -2123456789 or so
One formula should read as:
b12= (c1+d2 +.................................................................................................................................a4)/(a1+c1 +...................................................................................................................................a3+a4)
My questions are:
1. Do I have the continue line for formmula entry such as _ for continue as in print ?
2. Do I have to change to another new data type for longer than 12 digits, so what is the Data Type should be used ??
Thank you for your help
Can LeLast edited by Can Le; 14 Jul 2008, 05:20 PM.Tags: None
Leave a comment: