Hola @Jhon_Numpaque,
con esa estructura y teniendo que buscar por el identificador, podrías hacer algo así:
function modificarComprobantes($id, $dato1, $dato2){
$archivo = '../comprobanteC.txt';
$a = file($archivo); // lo carga a un vector
foreach($a as $k => $l){
// recorre el vector pareseando las líneas
$ll = explode('|', $l);
if ($ll[0] == $id){
// si encuentra la línea, modifica
$ll[1] = $dato1;
$ll[2] = $dato2;
// rearma la cadena
$tmp = implode('|', $ll);
// la asigna al vector en la posición orginal
$a[$k] = $tmp;
// sale del foreach, porque no tiene sentido seguir buscando.
break;
}
}
// Guarda el vector resultado sobreescribiendo el archivo
// Unir archivo
$contenido = implode(PHP_EOL,$a);
$abrir = fopen($archivo,'w');
fwrite($abrir,$contenido);
fclose($abrir);
return true;
}
Para usar la función, la llamás pasándolo los 3 parámetros.
Tal vez se me haya colado algún error de sintaxis, porque escribí el código directamente acá, pero lo importante es la idea.
Como variación a tu código, estoy cargando el archivo origen directamente en un vector, porque es más cómodo y eficiente para la recorrida.
Observación: manejar un archivo de texto se vuelve muy ineficiente a medida que crece. Por qué no tenés una tabla con estos 3 valores, y en caso necesario, generás el archivo con un proceso de exportación de la tabla a texto? Esto te permitiría hacer las actualizaciones de forma mucho más ágil e independiente del tamaño del archivo, a la vez que exportarlo cada vez que haga falta.
Saludos cordiales!