ID:170522
![]() Jan 14 2005, 2:58 pm
|
|
How would I search for text in a string and replace it with other text. What I want to do is make hub://Sgeo.build type URLs work.
|
How come, when you try to search through large lists, it crashes DS? I wanna do something with my project, but it involves searching through long lists to replace things.
|
Sgeo wrote:
How would I search for text in a string and replace it with other text. What I want to do is make hub://Sgeo.build type URLs work. Ok, using my updated stringreplace(), this should work: var/pos = findtext(string, "hub://") [edit] Yes it is 3:40am and it was broken before! |
Artekia wrote:
How come, when you try to search through large lists, it crashes DS? I wanna do something with my project, but it involves searching through long lists to replace things. It's a recursive function, so if the strings are huge it will run out of memory. But why it's related to lists, I don't know. Does it crash even with the updated version? Post some code if you want, I'll take a look! /Gazoot |
Bah, I don't really know what I'm doing.. this whole replacing text stuff really confuses me. I tried to make it search through the string to find letters and replace them with other letters but with the updated version I couldn't really figure out how to do it. I just don't understand how replacement procs work really.
|
Is there a way to replace things all at once or something so that if I replaced "A" with "B" it wouldn't replace that "B" with "C", for example.
|
I've taken Gazoot's proc and made a little demo for you:
proc [edit]1/15/04: Fixed full_stringreplace(). Before, it crashed the program (length(string) was changing, of course, as the string was replaced). [edit]1/19/04: Realized that there was no need for full_stringreplace(). |
Wizkidd0123 wrote:
Gazoot, instead of if(pos==0), you should have if(!pos) there =P. Nah, I wanted to be strict about the returned type. A habit from the string search in PHP, where the first position of the found string could be 0, which is considered the same as null if you do loose typing. (It's one of those occasions where you need to use the peculiar "===" operator) Of course in Byond it doesn't matter because the first pos is returned as 1, but I wanted to be consistent. :P /Gazoot |
Artekia wrote:
Is there a way to replace things all at once or something so that if I replaced "A" with "B" it wouldn't replace that "B" with "C", for example. Can you explain a bit more what you're trying to do? Doing what you want takes some modifications to the stringreplace function, but maybe there is another way of doing it...? /Gazoot |
Like if I had a list of words I wanted to replace like this
var/list/ReplaceThese=list("A","B") If I used a replacement proc and put in "A" it'd return "E", since it replaces "A" with "B" and than it does it again and replaces that "B" with "E". |
Artekia wrote:
If I used a replacement proc and put in "A" it'd return "E", since it replaces "A" with "B" and than it does it again and replaces that "B" with "E". Yes I understand that concept, but it was a quite special request, so maybe the whole thing that you're doing could be done in another way? I just got that feeling. Anyway, to do it you need an exception list. Add the searched characters to the list, then check before replacing if the searched char is in that list. /Gazoot |
A free-for-all snippet I wrote a while ago:
[edit] (Be careful using it on huge strings though)
[edit 2] Yes, it was a while ago. It is optimized now.