Witam,

Zlecono mi napisane skryptu sprawdzającego poprawność pliku (ASCII) zawierającego tłumaczenia pewnego systemu. Skrypt ma zwracać numer linii i wyrażenie, w którym wystąpił błąd.

Główna składnia tłumaczenia to:

tekst_oryginalny1=tekst_przetłumaczony1 ;
tekst_oryginalny2=tekst_przetłumaczony2 ;
itd...

Standardowy błąd, który muszę wykrywać to oczywiście brak ";" lub "=" w wyrażeniu. Wykombinowałem coś takiego:

  1. <?php
  2. function file_check($input_path){
  3.        
  4.    $file = fread(fopen($input_path,"r"), filesize($input_path));
  5.    $file_array = array();
  6.    $file_array = explode(";",$file);
  7.    
  8.  
  9.    $error_list = array();
  10.    $j = 0;
  11.        
  12.    for($i=0; $i<count($file_array); $i++){
  13.    
  14.        if( substr_count($file_array[$i], '=') != 1 ){
  15.            
  16.            $error_list[$j][1] = $file_array[$i];
  17.            $error_list[$j][2] = 1; // typ błędu
  18.            $j++;
  19.            
  20.        }
  21.        
  22.    }
  23.  
  24. return $error_list;
  25.    
  26. }
  27. ?>


Funkcja działa poprawnie tylko mam problem ze zwróceniem nr linii w pliku. Problem wynika głównie z tego, że jedno wyrażenie to niekoniecznie jedna linia... Np:


tekst
oryginalny=tłumaczenie
tekstu;


To wyrażenie jest również poprawne. Co więcej EOL \n jest istotny dla samego systemu. Domyślam się, że samo założenie przepisywania pliku do zmiennej i rozbijania do tablicy jest w tym przypadku 1. nieeleganckie 2. nieefektywne. Pomożecie sezonowemu programiście smile.gif ?