2012-09-26 3 views
2

je compte lire des fichiers au format .txt avec 5 colonnes et organisée de la manière suivante:Comment lire une entrée formatée dans matlab/octave?

0 1:0.007477 2:0.000000 3:1.000000 id:10002 #we = GX008-86-4444840 an = 1 asd = 0.086622 
0 1:0.603738 2:0.000000 3:1.000000 id:10002 #we = GX037-06-11625428 an = 0.0031586555555558 asd = 0.0897452 
0 1:0.214953 2:0.000000 3:0.000000 id:10002 #we = GX044-30-4142998 an = 0.00841930701072746 asd = 0.0999735 

Je prévois me lire le contenu de ces fichiers dans une matrice où chaque élément sera pris sous forme de chaîne. Après avoir lu avec succès dans une matrice, je prévois d'utiliser des fonctions de manipulation de chaîne en octave pour supprimer l'inutile comme id: etc

Cependant, je ne suis pas capable de lire le fichier correctement. J'ai essayé textscan, fscanf et d'autres commandes etc.

Pour exemple:

[sam,count]=fscanf(fid,'%d %*s %*s %*s %*s %*s',[5,inf]) 

retours sam = [] (0x1) ??? et count = 0. J'essaie de lire la documentation sur ce sujet mais c'est très peu. Toute aide serait appréciée.

Répondre

0

En utilisant fopen et fgetl, vous pouvez lire chaque ligne du fichier dans une matrice de cellules MATLAB/OCTAVE.

Un exemple rapide serait

fid=foepn('c:\path\to\file.txt') %# open the file for reading 

%#Loop through the file reading one line at a time 
i=0; 
while ~feof(fid) 
    i=i+1; 
    cellContents{i,1}=fgetl(fid); 
end 

Maintenant, chaque élément de cellContents est le contenu d'une ligne dans votre fichier.

3

Ceci est un exemple de travail utilisant SMScan. En Matlab ça marche. Je ne l'ai pas testé avec Octave.

>> fid = fopen('test.txt') 
>> A = textscan(fid,'%f 1:%f 2:%f 3:%f id:%f %*[^\n]') 

A = 

    Columns 1 through 4 

    [3x1 double] [3x1 double] [3x1 double] [3x1 double] 

    Column 5 

    [3x1 double] 

>> A{2} 

ans = 

    0.0075 
    0.6037 
    0.2150 

edit: pour le convertir en une matrice:

cell2mat(A) 
Questions connexes