2015-07-24 5 views
-1

J'ai un fichier .xls et je veux l'importer dans Matlab par la fonction xlsread .. Je reçois NaNs pour les nombres avec la notation d'ingénierie .. comme je reçois NaNS pour 15.252 B ou 1.25 M Des suggestions?Importer des données avec la notation d'ingénierie dans Matlab

Mise à jour: Je peux utiliser [num,txt,raw] = xlsread('...') et le brut est exactement ce que je veux, mais comment puis-je remplacer le Ms avec (* 10)?

Répondre

0

D'abord, vous pouvez extraire tout à partir d'Excel dans un réseau de cellules en utilisant

[~,~,raw] = xlsread('MyExcelFilename.xlsx') 

Ensuite, vous pouvez écrire une fonction simple qui renvoie un numéro de la chaîne en fonction de « B », « M » et ainsi de suite. Voici un exemple:

function mynumber = myfunc(mystring) 
% get the numeric part 
my_cell = regexp(mystring,'[0-9.]+','match'); 
mynumber = str2double(my_cell{1}); 
% get ending characters 
my_cell = regexp(mystring,'[A-z]+','match'); 
mychars = my_cell{1}; 
% multiply the number based on char 
switch mychars 
    case 'B' 
     mynumber = mynumber*1e9; 
    case 'M' 
     mynumber = mynumber*1e6; 
    otherwise 
end 

end 

Bien sûr, il existe d'autres méthodes pour diviser la chaîne numérique du reste, utilisez ce que vous voulez. Pour plus d'informations, voir la documentation regexp. Enfin utiliser cellfun pour convertir réseau de cellules à un tableau numérique:

my_array = cellfun(@myfunc,raw); 
+0

Merci Andrei .. Je voulais savoir est-il une fonction intégrée pour le formatage, il semble qu'il n'y a pas un tel F .... – MDBX

+0

votre code fonctionne bien pour un tableau de cellules (notre brut importé) seulement si toutes les cellules ont des caractères (M ou B) et si nous avons un raw = {'50M', '2.22M', 20 '5.258B', 50, 10} où il y a des éléments sans char ? merci – MDBX

+0

Vous pouvez faire une vérification isempty: 'if isempty (my_cell) mychars = ''; sinon mychars = my_cell {1}; end' L'interrupteur ira dans la condition contraire et ne fait rien avec le numéro. – Andrei

0

EDIT:

Matlab ne propose pas intégré le formatage des chaînes au format d'ingénierie.

Source: http://se.mathworks.com/matlabcentral/answers/892-engineering-notation-printed-into-files

Dans la source, vous trouverez également la fonction qui serait utile pour vous.

+0

Hi..yes 1,25M signifie 1.25x 10^-6..I've obtenu peu d'expérience dans la programmation et je sais comment le faire le disque façon Excel mais je veux savoir quel est le truc dans matlab! – MDBX

+0

Je vois. De mon expérience nous avons toujours appelé les numéros de notation d'ingénierie dans un format comme: 2.7e-6. Je ne connais aucune fonction qui puisse vous aider. Vous pouvez écrire votre propre fonction en la chargeant comme une chaîne et en la changeant. Bonne chance! –

+0

2.7e-6 est en notation scientifique .. merci mais je ne perdrai pas espoir pour une solution plus simple .. vous connaissez son matlab! – MDBX