dryant así es porque getline lee hasta el separador (en tu caso ;) así que lee desde el último ; de la primera línea hasta el primero de la segunda quedando algo así como:
Para el ejemplo que pusiste.
Quita el ; en getline (para que lea las líneas sin el ;) luego separa los datos que te quedan en el string resultante.
Saludos.