J'ai googlé et recherché via Matlab Central, mais je ne trouve aucun moyen d'ouvrir les fichiers DBF directement dans Matlab. Il existe des références à la fonction DBFraire dans l'échange de fichiers TMW, mais il n'est plus disponible. Est-ce vraiment un problème? p>
J'ai une boîte à outils de base de données, mais je n'ai pas trouvé de support DBF là-bas. p>
Je ne veux pas utiliser Excel ou d'autres outils pour convertir des fichiers en dehors de Matlab, car j'ai beaucoup de fichiers à traiter. ODBC n'est pas bon, j'ai besoin du code pour travailler sous Mac et Unix. p>
aide s'il vous plaît. P>
3 Réponses :
La façon dont je le vois, vous avez deux options:
Ceci nécessite la boîte à outils de la base de données P>
driver = 'sun.jdbc.odbc.JdbcOdbcDriver'; url = 'jdbc:odbc:DRIVER={Microsoft dBase Driver (*.dbf)};DBQ=x:\path;DefaultDir=x:\path'; conn = database('DB', '', '', driver, url); ...
Les classes JDBC & MATLAB sont la voie à suivre. Cachez votre code de plate-forme et Java derrière quelques classes Matlab et vous êtes prêt à partir. J'ai beaucoup de code de production pour le travail dépendant de la base de données, et il est trivialement multi-plate-forme (Dev / Test sur Win, Test / Exécuter sous Linux). Aussi simple que, déplacez le code sur, exécutez-le, pas de problèmes. Nous avons essayé ODBC, avec des DBS bien connus (Oracle, PostgreSQL) et il nécessitait une fidélisation sans fin - les implémentations ODBC étaient légèrement i> différentes.
Vous n'avez pas besoin d'avoir la boîte à outils de base de données pour la méthode 1. Cela pourrait faciliter la vie, mais vous pouvez créer une connexion JDBC sans la boîte à outils de base de données.
Merci pour la réponse. Je vais certainement essayer de mettre en œuvre la fonction à l'aide de la bibliothèque Java. C'est tellement étrange une telle chose n'a pas déjà été faite.
@MARC: Vous avez raison, il se trouve que je ne pouvais pas trouver un pilote JDBC gratuit pour dbase, vous pouvez peut-être vous aider avec ça .. @Adrian: J'ai utilisé la boîte à outils parce que l'OP a déjà mentionné l'avoir
@Amro: Désolé pour la question de Newbie: qu'est-ce qu'OP signifie? Alors Slang? :)
J'ai contacté avec Brian Madsen, l'auteur de la fonction DBFRAIAD, qui a été supprimé de l'échange de fichiers, probablement parce que les mathworks vont inclure cette fonction à Matlab dans une nouvelle version future. Brian aimablement m'a donné la permission de publier cette fonction ici. Toutes les informations sur le droit d'auteur laissées intactes. Je n'ai que modifié les lignes 3338 pour autoriser dbfread de lire le fichier de travail en dehors du répertoire de travail.
function out = str2double2cell(in) % Translate IN, an M-by-N array of class char, to an M-by-1 column vector % OUT, of class double. IN may be blank- or null-padded. If IN(k,:) does % not represent a valid scalar value, then OUT(k) has value NaN. if isempty(in) out = {[NaN]}; return end out = cellfun(@str2double,cellstr(in),'UniformOutput',false);
Vient de trouver ceci. Fonctionne magnifiquement encore. DBF était illisible dans ma version actuelle de Matlab (8.0.0.783 (R2012B))
@yuk vient d'essayer la fonction et malheureusement, cela ne fonctionne pas pour moi. Pourrait-il être à cause de mes données ou est-ce juste obsolète?
@Max: Je ne l'ai pas utilisé pendant un certain temps, je ne suis donc pas sûr que cela fonctionne avec de nouvelles versions MATLAB. Qu'est-ce qui ne va pas exactement? Vous voudrez peut-être ouvrir une nouvelle question ou contacter Brian Madsen. J'ai entendu dire qu'il travaille dans Mathworks maintenant.
Si vous n'êtes intéressé que dans des valeurs numériques, essayez xlsread em> commande. p>