4/30/2012 8:41 PM | |
Joined: 3/24/2009 Last visit: 7/9/2024 Posts: 535 Rating: (112) |
Dear Elonen, the DELETE-function does not set the entire content of the string to 0, but only the first character (see attachment). After the assignment of 'ABC' the 0 is overwritten, so the result is as you wrote. Another way to clear the string is to define an empty string and use the BLKMOVE-function. Best regards, yy1 |
This contribution was helpful to2 thankful Users |
5/2/2012 7:54 AM | |
Joined: 4/11/2012 Last visit: 9/20/2024 Posts: 181 Rating: (34) |
This here is the sample program I created to test the functionality of delete, it will illustrate the problem. This morning I realized, that the problem might not be in the DELETE, but in the way I'm using it. storage.koodi:=DELETE(IN:=storage.koodi,L :=32,P :=1); The delete might return an empty string, but using storage.koodi:=' ' does nothing, it doesn't remove the old conents of the string. So, is there a better way to empty the contents of a string, than using FOR i:= 2 TO 33 DO //characters in koodi start from dbb2. storage.dbb[i]:=2#0; END_FOR; I will now test the BLKMOVE the yy1 mentioned, maybe that will be the solution I'm looking for. Attachmentdelete_problem.zip (438 Downloads) |
Last edited by: Elonen at: 5/2/2012 9:10 AMI just realized, I can''t use the FOR reset for a STRING inside an instance DB, so I''m very open to suggestions on how to clear contents of STRING[32], making it so that the memory area of that string only has 0:s in it. Last edited by: Elonen at: 5/2/2012 9:04 AMI tested the BLKMOV, but didn''''t really get the hang of it. I''''ll use the FOR for now, untill I hear of better a better way to clear a string. |
|
5/2/2012 8:58 PM | |
Posts: 2348 Rating: (264)
|
As a variant - use SFC21 FILL. |
5/4/2012 2:36 PM | |
Joined: 4/11/2012 Last visit: 9/20/2024 Posts: 181 Rating: (34) |
I have an update to this issue. Thank you, Aret and yy1, you were correct, but I didn't have the information required to understand your post. I will now share the information I have gained, hoping to help others in the future. I wanted to have an empty string, AND I wanted to clear the memory area where this string was. I now understand these are 2 different issues. When I tried to delete the string, I monitored in variable table the memory area of the DB where this string was, for the the individual characters. Problem: When I used the delete, or initialization of stringi:='', the individual characters inside the DB did not chance, they remained the same. I now understand that this does not matter. The length of the stringi can be 0, even though the memory area where stringi is saved has random characters, or characters from previous strings. Let's take my original post:
Even though the online variable table shows that the memory area for stringi is still full of previous characters, and these characters show as ABC4567890, the actual stringi is only ABC, with length of 3. New question: How can I clear the memory area, that holds the string? How can I set the individual characters to 2#00000000, by using te SYMBOLIC name for the string? I do not want to use the absolute address, like DB10.dbb2, I want to use db10.stringi. This is important, if stringi is part of an array, and the array might chance in the future, chancing the absolute addresses inside the array. I tried using the REPLACE command, and it worked somewhat. However, when I set the replace the characters one by one with char_to_string(byte_to_char(2#00000000)), the results were mixed. The replace did not work, instead, I got some weird results sometimes. Sometimes the string was filled with character DEC -127, sometimes it had some other weird characters outside of ASCII table. In short, if I used the replace in the manner mentioned above, it did not work. I had to do a workaround of filling the string with ASCII character SPACE (DEC 32). This worked in this case, but I'm still wondering if there is a way to initialize the memory area of the string, by using the symbolic address of the string. Aret, I took a brief look at the FILL, but it requires addresses of type ANY. So that is not really suitable for string only? |
Follow us on