LTrim Questions ? Problems
LTrim Questions ? Problems
I have a incoming String 12 chr long. I have been trying to handle this and it is not working the way i though it would :roll: Could i be doing something wrong
If do this it works
A$="00050140000;"
LTrim(A$,"0")
debug A$
Debug prints out 00050140000
but if i do it this way
a$ = LTrim("0050140000;","0")
debug a$
Why and if so how do i do it ... thanks John
If do this it works
A$="00050140000;"
LTrim(A$,"0")
debug A$
Debug prints out 00050140000
but if i do it this way
a$ = LTrim("0050140000;","0")
debug a$
Why and if so how do i do it ... thanks John
Re: LTrim Questions??? Problems
the first one is false, should use in this way:
There is no inplace change
greetings
Thomas
Code: Select all
A$="00050140000;"
A$ = LTrim(A$,"0")
Debug A$

greetings
Thomas
Re: LTrim Questions??? Problems
Ok but i am reading this from the RS232 and take the input in to A$ . Now i want to Show A$ to the User and i would like to clean off the 0000 at the start and the ";" at the end .. so i need to edit the string ... any thoughs?
ts-soft wrote:the first one is false, should use in this way:There is no inplace changeCode: Select all
A$="00050140000;" A$ = LTrim(A$,"0") Debug A$
![]()
greetings
Thomas
Re: LTrim Questions??? Problems
Use different vars:
or i have misunderstand your problem
Code: Select all
A$="00050140000;"
B$ = LTrim(A$,"0")
Debug B$
Debug A$
Re: LTrim Questions??? Problems
It might be me the way i was asking ... here is the Code that i am using. It work grate the only problem i have is that i would like to remove all leading 00000000000 and on the end of the string the ";" from the end. The Text2.s ends up with
"0050140000;" i wanted to clean it up look for "0" at the start could be 4,3,2,1 or none and the ";" from the end just would look better .. NOW any thoughs?
"0050140000;" i wanted to clean it up look for "0" at the start could be 4,3,2,1 or none and the ";" from the end just would look better .. NOW any thoughs?

Code: Select all
result=WriteSerialPortString(1, "FA;"+Chr(13))
Delay(100)
x=AvailableSerialPortInput(1)
Delay(100)
Text2.s =""
Buffer$=""
While AvailableSerialPortInput(1)>0
If ReadSerialPortData(1, @Buffer, 1) ; Read Byte
Text2.s = Text2.s + Chr(Buffer)
EndIf
Wend
Re: LTrim Questions??? Problems
Something like this(?):John-G wrote: i wanted to clean it up look for "0" at the start could be 4,3,2,1 or none and the ";" from the end just would look better .. NOW any thoughs?![]()
Code: Select all
Procedure.s cleanup(Text.s)
Protected number_of_zeros=0,i=0
For i=0 To Len(Text.s)
If Mid(Text.s,i,1)="0"
number_of_zeros+1
Else
Break
EndIf
Next
If number_of_zeros=0 : number_of_zeros+1 : EndIf
ProcedureReturn Mid(Text.s,number_of_zeros,Len(Text.s)-number_of_zeros)
EndProcedure
Text.s = "0050140000;"
AfterCleanup.s = cleanup(Text.s)
Debug AfterCleanup.s
actually, there is easier way:
Code: Select all
Text.s = "0050140000;"
AfterCleanup.s = Str(Val(Text.s))
Debug AfterCleanup.s
Re: LTrim Questions??? Problems
Thanks .. I knew there was a quick way ... that is want i needed .. Again thanks ..
Re: LTrim Questions??? Problems
Working verry good .. but one more problem i need to put a point every 3 letters counting from the right to the left
50.140.000
144.225.000
Any thoughts?
50.140.000
144.225.000
Any thoughts?

Re: LTrim Questions??? Problems
Code: Select all
a.s = "1234"
b.s = ""
p = Len(a.s)
While p > 0
b = Mid(a,p,1)+b
If (p+1) % 3 = 0
b = "."+b
EndIf
p = p-1
Wend
Debug b.s
( PB6.00 LTS Win11 x64 Asrock AB350 Pro4 Ryzen 5 3600 32GB GTX1060 6GB)
( The path to enlightenment and the PureBasic Survival Guide right here... )
( The path to enlightenment and the PureBasic Survival Guide right here... )
Re: LTrim Questions??? Problems
John-G wrote:Working verry good .. but one more problem i need to put a point every 3 letters counting from the right to the left
50.140.000
144.225.000
Any thoughts?
Code: Select all
number$="1123456789"
Procedure.s FormatNum(string$, formatchar$=",")
length=Len(string$)
loops=Round(length/3, #PB_Round_Up)
For i=1 To loops
If length-(3*i)+1 <= 0
lenr=length-(3*i)+3
Else
lenr=3
EndIf
If i <> loops
temp$=formatchar$+Mid(string$,length-(3*i)+1,3)+temp$
Else
temp$=Mid(string$,length-(3*i)+1,lenr)+temp$
EndIf
Next
ProcedureReturn temp$
EndProcedure
Debug FormatNum(number$)


Re: LTrim Questions??? Problems
although the problem seems to be solved already, here is what i had just on my disc
..but it's for number input, not for strings.

Code: Select all
; formatByteSize.pbi
; changelog:
; StrQ() -> Str() [pb430b4]
Procedure.s formatByteSize(n.q)
Protected s.s=Str(n)
Protected len=Len(s)
Protected ret.s
Protected i.l
For i=0 To len-1
If i And Not i%3 :: ret="."+ret :: EndIf
ret= Mid(s,len-i,1) +ret
Next
ProcedureReturn ret
EndProcedure
; [merge_end]
; ;[another version with optional seperator selection and check for effectiveness]
;
; Procedure.s formatByteSize( n.q, sep.s="." )
; If n<1000
; ProcedureReturn Str(n)
; Else
; Protected s.s=Str(n)
; Protected len=Len(s)
; Protected ret.s
;
; For i=0 To len-1
; If i And Not i%3 :: ret=sep+ret :: EndIf
; ret= Mid(s,len-i,1) +ret
; Next
;
; ProcedureReturn ret
; EndIf
; EndProcedure
; Debug "---- EXAMPLE - formatByteSize.pbi"
; Debug formatByteSize(1)
; Debug formatByteSize(12)
; Debug formatByteSize(123)
; Debug formatByteSize(1234)
; Debug formatByteSize(12345)
; Debug formatByteSize(123456)
; Debug formatByteSize(1234567)
; Debug formatByteSize(12345678)
; Debug formatByteSize(123456789)
; Debug formatByteSize(1234567890)
; Debug formatByteSize(4294967295)
; Debug ""
; DisableDebugger
; t=ElapsedMilliseconds()
; For i=0 To 500000
; formatByteSize(i)
; Next
; t=ElapsedMilliseconds()-t
; EnableDebugger
; Debug t
; Debug "----"
-
- Enthusiast
- Posts: 781
- Joined: Fri Apr 25, 2003 6:51 pm
- Location: NC, USA
- Contact:
Re: LTrim Questions??? Problems
This Windows API example may give you a bit more control.
Code: Select all
; -FYI - NUMBERFMT Structure
; Structure NUMBERFMT
; NumDigits.l
; LeadingZero.l
; Grouping.l
; lpDecimalSep.l
; lpThousandSep.l
; NegativeOrder.l
; EndStructure
Global NumberF.NUMBERFMT
;-Preferred Number Format - Set up my preferred number format settings
Global Thousand$ = ","
Global Decimal$ = "."
NumberF\NumDigits = 0 ; No of digits following the decimal <---- set as desired
NumberF\LeadingZero = 0 ; Value Meaning <---- set as desired
; 0 No leading zeros
; 1 Leading zeros
NumberF\Grouping = 3 ; How many digits in each group <---- set as desired
NumberF\lpDecimalSep = @Decimal$
NumberF\lpThousandSep = @Thousand$
NumberF\NegativeOrder = 2 ; Value Meaning <---- set as desired
; 0 (1.1)
; 1 -1.1
; 2 - 1.1
; 3 1.1-
; 4 1.1 -
; -FYI - FORMATTING Structure for internal use
A$ = "00000561400;"
Buffer.s = Space(256)
result = GetNumberFormat_(#LOCALE_SYSTEM_DEFAULT, 0, Str(Val(A$)), @NumberF, @Buffer, Len(Buffer))
If result
MessageRequester("Results returned",B$ + #LF$ + Buffer, #MB_ICONINFORMATION)
Else
error = GetLastError_()
Select error
Case #ERROR_INSUFFICIENT_BUFFER
Msg$ = "Insufficent buffer space"
Case #ERROR_INVALID_FLAGS
Msg$ = "Invalid flags"
Case #ERROR_INVALID_PARAMETER
Msg$ = "Invalid parameter"
EndSelect
MessageRequester("Error",Msg$, #MB_ICONERROR)
EndIf
End