2015-04-09 7 views
0

У меня есть несколько файлов базы данных DBF, которые я хотел бы преобразовать в CSV. Есть ли способ сделать это в Linux или в PHP?Преобразование DBF в CSV

Я нашел несколько методов для преобразования DBF, но они очень медленные.

ответ

1

Измените переменную файлов на путь к вашим файлам DBF. Убедитесь, что расширение файла соответствует случаю ваших файлов.

set_time_limit(24192000); 
ini_set('memory_limit', '-1'); 

$files = glob('/path/to/*.DBF'); 
foreach($files as $file) 
{ 
    echo "Processing: $file\n"; 
    $fileParts = explode('/', $file); 
    $endPart = $fileParts[key(array_slice($fileParts, -1, 1, true))]; 
    $csvFile = preg_replace('~\.[a-z]+$~i', '.csv', $endPart); 

    if(!$dbf = dbase_open($file, 0)) die("Could not connect to: $file"); 
    $num_rec = dbase_numrecords($dbf); 
    $num_fields = dbase_numfields($dbf); 

    $fields = array(); 
    $out = ''; 

    for($i = 1; $i <= $num_rec; $i++) 
    { 
     $row = @dbase_get_record_with_names($dbf, $i); 
     $firstKey = key(array_slice($row, 0, 1, true)); 
     foreach($row as $key => $val) 
     { 
      if($key == 'deleted') continue; 
      if($firstKey != $key) $out .= ';'; 
      $out .= trim($val); 
     } 
     $out .= "\n"; 
    } 

    file_put_contents($csvFile, $out); 
} 
0

Использование @ кода Kohjah, вот Обновление кода с использованием лучшего (ИМХО) fputcsv подход:

// needs dbase php extension (http://php.net/manual/en/book.dbase.php) 

function dbfToCsv($file) 
{ 
    $output_path = 'output' . DIRECTORY_SEPARATOR . 'path'; 
    $path_parts = pathinfo($file); 
    $csvFile = path_parts['filename'] . '.csv'; 
    $output_path_file = $output_path . DIRECTORY_SEPARATOR . $csvFile; 

    if (!$dbf = dbase_open($file, 0)) { 
     return false; 
    } 

    $num_rec = dbase_numrecords($dbf); 

    $fp = fopen($output_path_file, 'w'); 
    for($i = 1; $i <= $num_rec; $i++) { 
     $row = dbase_get_record_with_names($dbf, $i); 
     if ($i == 1) { 
      //print header 
      fputcsv($fp, array_keys($row)); 
     } 
     fputcsv($fp, $row); 
    } 
    fclose($fp); 
} 
Смежные вопросы