1] read lines into records with metadata [key, value] (mark value as optional for separator ####)
2] use Reformat component to translate [key, value] into [id, key, value] (ignore separator lines, but increment id when occurs). So your data will look like:
0|firstname|bob
0|lastname|lyons
0|address1|123 yellow brick road
0|city|Emerald City
0|state|AZ
0|zip|34344
1|firstname|jane
1|lastname|doe
1|address1|54321 long street Street
1|address2|aprtment 5
1|city|Springville
1|state|OH
1|zip|55555
3] use http://doc.cloveretl.com/documentation/ … pivot.html for translation into records (Key=id Field defining output field name=key Field defining output field value=value). Output records must have metada like: [firstname, lastname, address1, …]