My example has several lines in one cell like how you described. For tokenat you just need the text so that will be the array position. Work out how you are changing the array position, array.at(x,y) is what you need. In my example I pull the row from an instance variable on the NPC. I don't see why that would be different.
tokenat(text,index,separator) is what you need. The index to move across the string is the chatpos variable. The separator is the underscore. You should have all you need really. For choices I hardcoded it to certain rows, so you can do that with list item, if list item 1 is picked then use this row of the array, i.e. set a variable to that row for array.at(var).
Look at how I change the Y variable based on text object clicked, you would do that with list item instead, that's probably the only change from my example. If you don't want to set it on the NPC (I was doing this to track it better for bugs), you set the dialogue directly in the list object instead of the NPC.