Exacto, esa conversión no dice nada. A menos que haya varios ejemplos y uno se pueda dar la idea de que ya existe un patrón.
Pero bueno, si quieres una idea, la mía es esta:
La siguiente función nada más se encarga de descomponer tu cadena hasta cierto punto, pues después ya no se me ocurre cómo está el patrón, justamente lo que dice OscarL. Pero bueno, es un ejemplillo.
Código PHP:
<?
$original = "1;1;4010.39.00.000F;0,1916;9999,99;1;9,58;7;0,00";
//la función parseadora hace el trabajo sucio
$parseada = parseadora($original);
echo $parseada; //imprime: 00000114010.39.00.000F (finaliza en espacio)
//faltan términos, tienes que ver qué patrón siguen tus conversiones.
?>
Y esta es la función comentada hasta donde me fue posible.
En la expresión regular, hay un momento en el que pongo '.*', y desde ahí hay que seguir capturando términos y parseando.
Código PHP:
<?
function parseadora($entrada){
//Consideraciones:
//Te ayudo con la primera parte, lo que sigue es seguir fabricando
//la expresión regular correcta.
//para ahorrar código, meteré esto que se usa con frecuencia en $nl
//la parte de las letras la metí por la F que aparece en tu ejemplo
$nl = "[0-9a-zA-Z]+";
//La siguiente línea comentada muestra qué es lo que estaría extrayendo la expr.reg.
// 1; 1; 4010. 39. 00. 000F; y continúas
$expresion_regular = "^($nl);($nl);($nl)\.($nl)\.($nl)\.($nl);.*";
//nos ayudará a separar los pedazos en $pedazos[1], $pedazos[2]...
ereg($expresion_regular,$entrada,$pedazos);
//CONSTRUYENDO POCO A POCO LA EXPRESIÓN 'RESULTADO'
//concatenamos los primeros tres pedazos
$resultado = $pedazos[1].$pedazos[2].$pedazos[3];
//ahora se rellenan con ceros a la izquierda hasta tener un número de 11 dígitos
$resultado = str_pad($resultado,11,0,STR_PAD_LEFT);
//bien, ahora los siguientes tres pedazos nada más se concatenan con puntos...
$resultado .= '.'.$pedazos[4].'.'.$pedazos[5].'.'.$pedazos[6].' ';
//hay que seguir...
return $resultado;
}//end function
?>