J'ai besoin d'ouvrir des fichiers dbf sur mon Ubuntu 15 et comme je l'ai trouvé, LibreOffice peut le faire. Mais je reçois
Erreur générale. Erreur générale d'entrée / sortie.
Existe-t-il un outil ou un outil logiciel intégré qui peut m'aider?
J'ai besoin d'ouvrir des fichiers dbf sur mon Ubuntu 15 et comme je l'ai trouvé, LibreOffice peut le faire. Mais je reçois
Erreur générale. Erreur générale d'entrée / sortie.
Existe-t-il un outil ou un outil logiciel intégré qui peut m'aider?
Réponses:
Selon le Wiki LibreOffice, vous devriez pouvoir ouvrir des .dbf
fichiers avec LibreOffice Base.
Si vous rencontrez toujours ce problème, réinstallez LibreOffice:
sudo apt-get remove --purge libreoffice*
sudo apt-get clean
sudo apt-get autoremove
sudo apt-get install libreoffice
Vous pouvez également utiliser dbview
pour ouvrir des .dbf
fichiers (ce qui peut être plus difficile à utiliser que LibreOffice Base):
sudo apt-get install dbview
Reportez-vous à la page de manuel pour plus d'informations sur dbview
.
Pour une édition très simple de petits fichiers .dbf, vous pouvez également utiliser GTK DBF Editor
Pour l'installer dans Ubuntu 12.04, j'ai d'abord dû installer cette dépendance:
sudo apt-get install libglade2-0:i386
Ensuite, je pourrais installer le fichier .deb téléchargé avec
sudo dpkg -i Downloads/gtkdbfeditor_1.0.4-7_i386.deb
Mise à jour:
Dans Ubuntu 16.04, avec l'installation par défaut de LibreOffice, je devais aussi
sudo apt install libreoffice-base
Ensuite, les fichiers .dbf peuvent être ouverts dans LibreOffice Calc, et également enregistrés sous .dbf.
J'ai trouvé que la meilleure façon de gérer les fichiers .dbf est d'utiliser PHP pour les convertir en fichiers .csv:
<?php
set_time_limit( 24192000 );
ini_set( 'memory_limit', '-1' );
$files = glob( '/media/d/Data2/files/*.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 );
}
?>
Utilisez ensuite MySQL pour importer le CSV:
LOAD DATA INFILE "/media/d/Data2/files/ZACATECAS.csv" INTO TABLE tbl FIELDS TERMINATED BY ";" ENCLOSED BY '"' LINES TERMINATED BY "\n";