Supongamos que ya tenés en la variable "Texto" todo ese contenido (cómo llegue ahí es cosa tuya.. no se si lo leés de un TXT o de una BD)
A "Texto" le hacés un Replace para eliminarle todos los saltos de línea.
Texto = Replace(Texto, VBCrLf, "")
Con esto ya lo tenés concatenado.
Ahora, podés separar los registros y meterlos en un array aplicándole un Split.
Texto = Split(Texto, "!")
También podrías volver a aplicar un Split por cada elemento del array anterior para separar en campos:
For j = 0 to UBound(Texto)
Campos = Split(Texto(j), "%")
Next
Claro que, con un poco de modificaciones, podrías usar esto para simplemente imprimir todo ese chorizo de información de una manera más legible o, si querés, para guardarlo en un BD de manera más ordenada.
Por ejemplo, para presentarlo en una tabla de manera ordenada:
Response.Write "<table border=1>"
Texto = Replace(Texto, VBCRLF, "")
Texto = Split(Texto, "!")
For i = 0 to UBound(Texto)
Response.Write "<tr>"
Campos = Split(Texto(i), "%")
For j = 0 to UBound(Campos)
Response.Write "<td>"
Response.Write Campos(j)
Response.Write "</td>"
Next
Response.Write "</tr>"
Next
Response.Write "</table>"
Para insertar ese contenido en una BD, dejo que lo trabajes un poquito
espero te sirva