Taking the last word in a field and putting it into a new field

69 views
Skip to first unread message

Jalen MichalsLevy

unread,
Apr 12, 2020, 6:11:45 PM4/12/20
to TiddlyWiki
Hi there, 

I have many tiddlers (of the same unique type), which contain the field "senses". The 'senses' field contains values that look something like this: "Darkvision 60ft., passive Perception 12". Now, it has come to my attention that it would be far more useful for Passive Perception to be its own field with its own numeric value. Instead of doing this manually, as there are hundreds of tiddlers like this, I want to make a button that will do this by batch. Basically, I want to take the last word (which is actually a number in all cases) from the 'senses' field and put it into a new "passive-perception field". I have played around with the list widget and filter notation, trying to use the 'enlist' operator and the 'last' operator, and was able to make it work for a single tiddler (see below). But I think I am definitely missing something that ties it all together and makes it work for a batch. Any help would be appreciated. Bonus points if you can also tell me how to delete the words 'passive Perception ##' from the end of the 'senses' field. Thank you!

Code for a single tiddler:
<$list filter = "[{Boar!!senses}split[ ]last[1]]" variable = 'x'>

<<x>> <!-- this is so I could verify that the variable 'x' held the correct value -->

<$button set = "Boar!!passiveperception" setTo = <<x>> >
Change Boar's Passive Perception
</$button>

</$list>

Thank you!

-Jalen

TonyM

unread,
Apr 12, 2020, 9:30:39 PM4/12/20
to TiddlyWiki
Jakwn

Put the list inside the button and place action widgets inside the list. The button title follows the list.

I always use a seperate list with the same filter to display what will be impacted by the button.

Regards
Tont

Mark S.

unread,
Apr 12, 2020, 9:41:44 PM4/12/20
to TiddlyWiki
Be sure to have a backup file before trying this!

This method requires you to hit a button twice. First to populate "passiveperception", and then again to trim the end of senses.
This is because you might not want to push the second button.

Note that the second part in particular will be very sensitive to typos. If it's wrong even by case or extra white space, it will change "sense" to nothing!
Sorry, there should be a fail safe mechanism, but it would take too long. Putting in a fail safe is left to the
student as an exercise. ;-)

Good luck!

\define passiveperception() passive Perception $(x)$
<$button>Change All Passive Perception

<$list filter="[has[senses]]">
<$list filter = "[<currentTiddler>get[senses]split[ ]last[1]]" variable = 'x'>
<$action-setfield  passiveperception=<<x>>/>

<!-- <<x>> <br/
>this is so I could verify that the variable 'x' held the correct value -->
</$list>
</
$list>

</$button>

<$button>Change Senses

<$list filter="[has[senses]]">
<$list filter = "[<currentTiddler>get[senses]split[ ]last[1]]" variable = 'x'>
<$action-setfield  senses={{{[<currentTiddler>get[senses]removesuffix<passiveperception>] }}}/
>

<!-- <<x>> <br/>this is so I could verify that the variable 'x' held the correct value -->
</$list>
</
$list>

</$button>


Jalen MichalsLevy

unread,
Apr 13, 2020, 5:20:12 PM4/13/20
to tiddl...@googlegroups.com
Thanks for your help! I see that nested lists are very useful. And I didn't know about transcluding in filter notation like that. I see what you're saying about the second part being sensitive to typos. I realized that in making these tiddlers that I am trying to change, I have used many short-hands for referring to 'passive Perception'. I have used 'passive perception', 'passive Perception', 'PP', and 'pp'. Very sloppy of me, I will admit, though i have never been formally trained in coding so I am learning the housekeeping as I go. Because of this, I decided to try your assigned exercise! I don't think I was able to include a fail-safe, but rather made it more fool proof. Check out what I have:

<!-- Edit: Forgot to include the following line in this original post -->
\define suffix() $(y)$ $(x)$

__''Step 1'': Select precise language used in "senses" field:__

<$select tiddler = "$:/TempPassivePerceptionTest" >
<option>---</option>
<option>passive perception</option>
<option>passive Perception</option>
<option>PP</option>
<option>pp</option>
</$select>

<hr>

__''Step 2'': Grab passive Perception from "senses" field and put it in its own field:__

<$set name = 'y' value = {{$:/TempPassivePerceptionTest}}>
<$button>Create Passive Perception Fields

<$list filter="[regexp:senses<y>]">
<$list filter = "[<currentTiddler>get[senses]split[ ]last[1]]" variable = 'x'>
<$action-setfield  pp=<<x>>/>

</$list>
</$list>
</$button>
<$set>

<hr>


__''Step 3'': Get rid of the 'passive Perception' and score from the "senses" field:__

<$set name = 'y' value = {{$:/TempPassivePerceptionTest}}>
<$button>Change Senses
<$list filter = "[regexp:senses<y>]">
<$list filter = "[<currentTiddler>get[senses]split[ ]last[1]]" variable = 'x'>

<$action-setfield  senses={{{[<currentTiddler>get[senses]removesuffix<suffix>] }}}/>

</$list>
</$list>
</$button>
</$set>

<hr>
<!-- List of tiddlers and relevant values -->

<span style = "color:darkred;"> ''List of affected tiddlers | Last Item in the "senses" field | Contents of "pp" field'' </span>

<$set name = 'y' value = {{$:/TempPassivePerceptionTest}}>
<$list filter = "[regexp:senses<y>]">
<$list filter = "[<currentTiddler>get[senses]split[ ]last[1]]" variable = 'x'>
<br><$link to = {{!!title}}> {{!!title}} </$link> | <<x>> | {{!!pp}}
</$list>
</$list>
</$set>

Mark S.

unread,
Apr 13, 2020, 5:38:56 PM4/13/20
to TiddlyWiki
It looks like you're catching on fast.

The one thing that concerns me is that with this code:

removesuffix<suffix>

I don't see where variable "suffix" was defined anywhere. So "senses" will be wiped out by it. Pardon me if I've missed something, my eyes aren't what they used to be.


On Monday, April 13, 2020 at 2:20:12 PM UTC-7, Jalen MichalsLevy wrote:
Thanks for your help! I see that nested lists are very useful. And I didn't know about transcluding in filter notation like that. I see what you're saying about the second part being sensitive to typos. I realized that in making these tiddlers that I am trying to change, I have used many short-hands for referring to 'passive Perception'. I have used 'passive perception', 'passive Perception', 'PP', and 'pp'. Very sloppy of me, I will admit, though i have never been formally trained in coding so I am learning the housekeeping as I go. Because of this, I decided to try your assigned exercise! I don't think I was able to include a fail-safe, but rather made it more fool proof. Check out what I have:

Jalen MichalsLevy

unread,
Apr 13, 2020, 6:46:01 PM4/13/20
to TiddlyWiki
Ah, yes, good catch. I edited/updated the last post with a line at the beginning defining "suffix". This was present in my tiddler, just didn't copy/paste it over correctly.

Thanks again for all the help (now on two different questions).

Best,
Jalen
Reply all
Reply to author
Forward
0 new messages