I had effectively the same approach as above, but I would probably nest all the position information unless you need to save that information. The ones below should work as long as the data you have follows the style shown in your original post. I did use two steps for Exchange Rate so that the code wasn't as wide when posting it.
grade = scan(substr(narration, index(narration,'Grade:')+6),1,'"');
invoice = scan(substr(narration, index(narration,'No.')+3),1,' ');
qty = input(scan(substr(narration, index(narration,'Qty.')+4),1,' '),best12.);
Amount = scan(substr(narration,index(narration,'$')),1,' ');
_ER = scan(substr(narration, index(narration,'Rate')+4),1,':');
ExchRate = substr(_ER,1,length(_ER)-1);