prova così... l'ho scritto velocemente e con pochi test quindi controllalo bene...
Codice PHP:
<?php 
/* impostiamo il db*/
$db_txt 'file.txt';

/*se il file non esiste fermi tutti!!!*/
if(!file_exists($db_txt)){
    exit(
'il database non può essere aperto perchè non esiste');
    }
    
/*costruiamo un array con i righi del db e contiamo i righi presenti*/
$array_righi file($db_txt);
$count_righi count($array_righi);

/*impostiamo quanti righi per ogni pagina*/
$per_page 5;
/*calcoliamo il numero di pagine necessarie per l'impagginazione */
$numero_pagine ceil($count_righi $per_page);

/*intercettiamo la pagina corrente tramite GET altrimenti è pagina 1*/
$page_corrente = ( isset($_GET['pos']) AND intval($_GET['pos']) ) ? min($numero_pagineintval($_GET['pos'])) : 1;

/*estraiamo il sotto-array che vogliamo visualizzare*/
$righi_da_visualizzare array_slice($array_righi, ($page_corrente-1)*$per_page$per_page);

/*... e mostriamo questi righi...*/
$output_content '';
foreach(
$righi_da_visualizzare as $key => $rigo){
    
/*ogni rigo contiene due parti separati da | 
    e li isoliamo così da potermi stampare separatamente*/
    
list($parte_a$parte_b) = explode('|'$rigo);
    
$output_content .= $parte_a ' ' $parte_b '
'
;
    }

/*semplice pagination due pagine successive e due pagine precedenti*/
$inizio_pag max(1, ($page_corrente-2));
$fine_pag min($numero_pagine, ($page_corrente+2));
$output_pagination '<div id="pagination">';
for(
$i=$inizio_pag$i<=$fine_pag$i++ ){
    if(
$i!=$page_corrente){
        
$output_pagination .= '[url="' .$_SERVER['PHP_SELF']. '?pos=' $i '"]' .$i '[/url] ';
        }
    else{
        
$output_pagination .= $i .' ';
        }
    }
$output_pagination .= '</div>';

/*mandiamo l'output prodotto*/
echo $output_content;
echo 
$output_pagination;
 
?>