Posts: 128
Threads: 17
Joined: Apr 2022
Reputation:
10
I'm all about keeping backward compatibility. So, would something as simple as ending the fixed length strings in CHR$(0) instead of CHR$(32) break many programs? If so, make it optional like metacommand? Default to legacy, add '_FIXEDSTRINGSZERO ON'
I don't mind rolling my on LEN() function, but it is difficult to tell if that space at the end of the string was put there by your code, or was part of the initialization.
Code: (Select All)
DIM a AS STRING * 8
PRINT "t.a = "; t.a
a = "01234 " ' <--- intentional space for whatever reason, but you want it have a trailing space.
As pointed out by Pete, in the case of INKEY$, k is going to get filled with 2 spaces regardless if you hit the space bar.
Code: (Select All)
DIM k AS STRING * 2
k = INKEY$
'How do you detect the space bar?
Regardless, It seems that there is little or no interest in this issue, and that I'm the oddball. Again, I'm not dying on this hill.
Posts: 2,177
Threads: 222
Joined: Apr 2022
Reputation:
104
@ justsomeguy
If I had to make a workaround in my code, I'd need to do this...
Code: (Select All)
Type tt
' Use 2 bytes to capture 2 byte combinations
k As String * 2
End Type
Dim As tt t
Do
_Limit 30
t.k = Chr$(0) + Chr$(0) ' This line and the MID$() line below clears up the issue. Space bar can now be detected.
Mid$(t.k, 1, 2) = InKey$
If t.k <> Chr$(0) + Chr$(0) Then
Print Mid$(t.k, 1, 1), Mid$(t.k, 2, 1), Asc(Mid$(t.k, 1, 1)), Asc(Mid$(t.k, 2, 1))
End If
Loop
Pete
Posts: 2,698
Threads: 327
Joined: Apr 2022
Reputation:
217
Why not just use variable length strings and not have the worry over it?
Fixed length strings are set to a fixed length -- like a "foot long sub".
Variable length strings are set the the length of the contents -- like a "sub" can be 4 inch, 6 inch, or 12 inches.
It just seems odd, to me, to basically be asking for, "Hi. I'd like to order a four inch, foot-long sub!"
"What? Would you like the four inch? Or the foot long?"
"I want the four inch, foot long sub!"
You know, I might just try that the next time I go into my local sub shop. I'd love to see the expression on their faces!
Posts: 2,177
Threads: 222
Joined: Apr 2022
Reputation:
104
Steve, I'm sorry to hear what you call a foot long is only 4-inches, but I also hear they have pills for that problem.
My work-around method seems to work, but since I don't use fixed strings for keyboard input I won't stake my life on it. I was fun to take a poke at, but it would also be nice to find out if there is a specific and unique purpose for using a fixed length variable, or is this solely meant as a coding style, in this case using a TYPE declaration.
Oh, and thanks to Bidenflation, what you used to pay for a foot long now only buys you a 4-inch sub, and it doesn't matter how you use it, it's still too damn small!
Pete
Posts: 128
Threads: 17
Joined: Apr 2022
Reputation:
10
@SMcNeill
Quote:Why not just use variable length strings and not have the worry over it?
We finally come full circle. https://qb64phoenix.com/forum/showthread.php?tid=2889 and https://github.com/QB64-Phoenix-Edition/...issues/524
@Pete
(07-31-2024, 06:50 PM)Pete Wrote: @justsomeguy
If I had to make a workaround in my code, I'd need to do this...
Code: (Select All)
Type tt
' Use 2 bytes to capture 2 byte combinations
k As String * 2
End Type
Dim As tt t
Do
_Limit 30
t.k = Chr$(0) + Chr$(0) ' This line and the MID$() line below clears up the issue. Space bar can now be detected.
Mid$(t.k, 1, 2) = InKey$
If t.k <> Chr$(0) + Chr$(0) Then
Print Mid$(t.k, 1, 1), Mid$(t.k, 2, 1), Asc(Mid$(t.k, 1, 1)), Asc(Mid$(t.k, 2, 1))
End If
Loop
Pete
Good job! It works well.
Posts: 3,978
Threads: 177
Joined: Apr 2022
Reputation:
220
@justsomeguy If you need an input with garanteed len = 1 check this out
Code: (Select All) Do
k$ = Input$(1)
If k$ <> "" Then Print k$, Asc(k$), Len(k$)
_Limit 30
Loop
It can differentiate from esc and space and enter with ASC() help and still detect but not describe 2 len arrow keys.
b = b + ...
Posts: 2,177
Threads: 222
Joined: Apr 2022
Reputation:
104
@ justsomeguy
Glad you have a use for it. Yep, my mediocre solutions are always Amazing Steve!
Pete
Posts: 128
Threads: 17
Joined: Apr 2022
Reputation:
10
@bplus
Code: (Select All) k$ = Input$(1)
That is very clever, I never knew that was an option.
There a bunch of workarounds for fixed length strings and input, but that is, what it is, a "workaround". Why do we use workarounds, because something doesn't work right, or as expected, but we are also avoiding the underlying issue.
I'm using fixed string variables in a UDT, because its a workaround for the potential crashing issues that arise from variable length string in a UDT. That will eventually get fixed, and I appreciate the time it takes for the maintainers and the developers to address all the issues and concerns, so I can be patient.
Posts: 3,978
Threads: 177
Joined: Apr 2022
Reputation:
220
I admire your faith in developers getting around to it.
Don't think I have the patience to wait, I could die tomorrow and the world would have to suffer the loss of my perspective, that would be a shame. ;-))
b = b + ...
Posts: 1,002
Threads: 50
Joined: May 2022
Reputation:
27
Interesting topic . . . What is it actually about?
In a record type, also called UDT, only strings with a fixed length are accepted; manual for Quick Basic 4.5. So why create a use for strings with variable length? That would no longer be compatible with QB.
|