2010-08-27 6 views
1

J'ai un gros problème pour acquérir un bloc de données structuré d'une manière particulière. Voilà comment les données doivent être acquises (est un txt):Acquérir des données à partir de fichiers texte dans MATLAB

V|0|0|0|t|0|1|1|4|11|T4|H13|||||||||||| 
P|40|0.01|10|1|1|0|40|1|1|1||1|*||0|0|0 
*|A1|A1|A7|A16|F|F|F|F|F|F||||||||||||| 
*|codserv|area|codice|nome|tnom|tmin|tmax|pc|qc|susc||||||| 
*|||||kV|kV|kV|MW|MVAR|S|||||||||||| 
N|I|1|N01|N01|132|125.4|138.6|0|0|||||||| 
N|I|1|N02|N02|20|19|21|0|0||||||||||||| 
N|I|1|N03|N03|20|19|21|1.013532234|0.49087611|||||||| 
N|I|1|N04|N04|20|19|21|0.390791617|0.189269056|||||||| 
N|I|1|N05|N05|20|19|21|0.180634542|0.121387171|||||||| 
N|I|1|N06|N06|20|19|21|0.709472564|0.343613323|||||||| 
N|I|1|N07|N07|20|19|21|0.103495727|0.069549543|||||||| 
N|I|1|N08|N08|20|19|21|0.351712456|0.170342158|||||||| 
N|I|1|N09|N09|20|19|21|0.097697904|0.06565339|||||||| 
N|I|1|N10|N10|20|19|21|0.162165157|0.078540184|||||||| 

L'algorithme doit:

  • sauter les 3 premiers rangs

  • sauter cinquième rangée

  • La quatrième rangée

    *|codserv|area|codice|nome|tnom|tmin|tmax|pc|qc|susc||||||| 
    

    enregistrer chaque chaîne dans un vecteur vide

    codeserv=[] 
    area=[] 
    codice=[] 
    nome=[] 
    tnom=[] 
    tmin=[] 
    tmax=[] 
    pc=[] 
    qc=[] 
    susc=[] 
    
  • vecteurs de remplissage avec des données et des chaînes dans les lignes suivantes la quatrième

    codeserv=[N N N N N N N N N N ....] 
    area=[I I I I I I I ....] 
    codice=[1 1 1 1 1 1 ...] 
    nome=[N01 N02 N03 N04 N05 ] 
    tnom=[N01 N02 N03 N04 N05] 
    tmin=[132 20 20.....] 
    tmax=[125.4 19 19 19 ....] 
    pc=[138.6 21 21 21....] 
    qc=[0 0 1.013532234 ....] 
    susc=[0 0 0.49087611] 
    

Répondre

0

Quel est le motif de Matlab? Si vous êtes dans le milieu universitaire, vous pourriez avoir accès à LabVIEW, ce qui pourrait être plus facile à apprendre pour quelque chose comme ça. Vous devrez utiliser le VI Lire à partir d'un fichier texte, puis analyser la chaîne. Bien sûr, vous devrez utiliser le "|" caractères pour séparer les données (utilisez le VI Match Pattern). Vous pourriez éventuellement vouloir restructurer la façon dont les données sont stockées dans le fichier texte - utilisez des touches de texte plutôt que |. Quelque chose comme:

codserv N area | codice 1 nome N01 tnom 20 etc ...

Désolé pour ne pas fournir une réponse à une source Matlab, mais je considère LabVIEW si elle est une option.

+0

Cela fait partie d'un projet où ils sont tenus d'avoir à utiliser Matlab. En fait, les données seront acquises dans un algorithme dans MATLAB. J'aurais aussi préféré utiliser Labview mais je ne peux pas. – Marietto85

+0

OK, bien vous pouvez vouloir remplacer le | avec des onglets (ou des virgules). Ensuite, ouvrez le fichier texte en tant que matrice délimitée par des tabulations (ou CSV si vous utilisez des virgules). Bonne chance. – gary

2

jeter un oeil à textscan

avez-vous un contrôle sur le format du fichier texte?

EDIT

est ici une façon assez hackish pour obtenir le résultat

function readtest() 

fid = fopen('test.txt'); 

%skip 3 lines, save 4th, skip 5th 
for i = 1:4 
    names = fgetl(fid); 
end 
fgetl(fid); 

% separate out names 
names = textscan(names,'%s','delimiter','|'); 

% read the data 
data = textscan(fid,'%s %s %d %s %s %d %d %f %f %f %[| ]','delimiter','|'); 

fclose(fid); 




for i = 1:size(data,2)-1 
    values = (data{i}(1:end)); 
    if(iscell(values)) 
     values = cell2mat(values); 
    end 

    name = names{1}{i+1}; 

    % very basic error checking 
    if(~strcmp(name, '')) 

     %save the value in the calling work space 
     assignin('caller', name, values) 
    end 
end 
+0

Je suis d'accord ... la restructuration du format peut être nécessaire si vous séjournez à Matlab. – gary

+0

Je pense que la restructuration du format peut être nécessaire pour faciliter la tâche dans n'importe quelle langue - même avec LabVIEW. – Jonas

+0

Je vous remercie pour l'aide que j'essaie la solution que vous avez faite. vous êtes vraiment un excellent programmeur en second lieu !!! – Marietto85

Questions connexes