Home   Archive   Permalink

replace last character

How do I replace the last character of a string ?
e.g if I have c: 'abcdef'
and I want to change the last character to 'z'
so that c becomes 'abcdez'
I was trying change/part c 'z' length? c
it did not work.

posted by:   change last text       8-Dec-2016/22:23:06-8:00

str/(length? str): "z"
That's clunky, but works.

posted by:   Sunanda       9-Dec-2016/1:52:35-8:00

Another way would be:
change back tail c "z"

posted by:   Chris       9-Dec-2016/2:25:18-8:00

Another way:
poke c length? c #"z"

posted by:   Nick       9-Dec-2016/6:34:20-8:00

BTW, your original way also works, if you use double quotes:
change/part c "z" length? c

posted by:   Nick       9-Dec-2016/6:40:21-8:00

@nick, when I use double quote it changes the whole string into z , rather than abcdez. pls see below
c: "abcdef"
== "abcdef"
>> change/part c "z" length? c
== ""
>> c
== "z"

posted by:   change last text       9-Dec-2016/23:20:32-8:00

@sunanda, getting an error when trying str/(length? str): "z"
>> c: "abcdef"
== "abcdef"
>> c/(length? c): "z"
** Script Error: Invalid argument: z
** Where: halt-view
** Near: c/(length? c): "z"

posted by:   change last text       9-Dec-2016/23:24:03-8:00

@nick - poke c length? c #"z" works.
>> c: "abcdef"
== "abcdef"
>> poke c length? c #"z"
== #"z"
>> c
== "abcdez"
To all of you, thanks a lot for helping out.

posted by:   change last text       9-Dec-2016/23:27-8:00

Sunanda's example works if you change the "z" string to a #"z" character:
c/(length? c): #"z"

posted by:   Nick       10-Dec-2016/7:44:45-8:00

thanks Nick.
for my own learning process, what does the # mean?
I did a search on the site to see what # mean, the only place I could find something is in rebolcore-16.html.    
is it converting to binary in c/(length? c): #"z"
and poke c length? c #"z"

posted by:   change last text       10-Dec-2016/8:28:42-8:00

I also saw # being used as char in chapter 4 - http://www.rebol.com/docs/core23/rebolcore-4.html#section-3

posted by:   change last text       10-Dec-2016/9:22-8:00

The # symbol is used to refer to the char! datatype (a single character). The string and character datatypes are different, so if a function expects a char!, and gets a string!, you'll get an error.
BTW, you can cast a char! from a single character string using:
to-char "z"
== #"z"

posted by:   Nick       10-Dec-2016/9:53:52-8:00