2011-08-24 5 views
0

Je veux lire un fichier texte du formulaire:comportement étrange textscan

gatcgtacgtcgatgc 
gtcgtacgatcgcatg 
cagctgactgatcgatcg 

. Chaque ligne est donc une chaîne et le délimiteur est \n. Supposons que ce fichier s'appelle 'data.txt'. Je pense

fid = fopen('data.txt') 
C = textscan(fid, '%s', 'delimiter', '\n') 
fclose('data.txt') 

me donner cellule 3x1 avec C{1} = 'gatcg....' , C{2} = 'gtcgt....' and C{3} = 'cagctg....'.

Ce n'est pas le cas. Il me dit C = {3x1 cell}. Cependant, j'ai le comportement suivant:

C{1} 

ans = 

    'gatc...' 

    'gtcg...' 

    'cagc...' 

C{2} 
??? Index exceeds matrix dimensions 

C{3} 
??? Index exceeds matrix dimensions. 

Que se passe-t-il ici? o_O

+0

BTW l'appel à FCLOSE doit être: 'fclose (fid)' – Amro

Répondre

0

La sortie de TEXTSCAN est un tableau de cellules qui contient lui-même des tableaux des différentes entrées de données. Dans votre cas, toutes les données sont stockées dans un seul tableau de cellules. Pour accéder à chaque entrée faire:

 
>> C = textscan(fid, '%s'); 
>> C{1}{1} 

ans = 

gatcgtacgtcgatgc 

>> C{1}{2} 

ans = 

gtcgtacgatcgcatg 

>> C{1}{3} 

ans = 

cagctgactgatcgatcg 

Notez que vous n'avez pas besoin d'indiquer \n comme séparateur comme c'est la fin par défaut de caractère de ligne.

1

Vous devriez ajouter ce qui suit d'abord:

C = C{1}; 

%# then you can use 
C{1} 
C{2} 
C{3} 

C'est parce que dans votre cas, textscan retourne une matrice de cellules 1 par 1 C, où ses premiers éléments est une matrice de cellules de trois éléments.