тексты могут странно себя вести - PullRequest
0 голосов
/ 25 августа 2011

Я хочу прочитать текстовый файл вида:

gatcgtacgtcgatgc
gtcgtacgatcgcatg 
cagctgactgatcgatcg 

.Таким образом, каждая строка является строкой, а разделитель равен \n. Предположим, этот файл называется 'data.txt'.Я бы подумал,

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

даст мне 3х1 ячейку с C{1} = 'gatcg....' , C{2} = 'gtcgt....' and C{3} = 'cagctg....'.

Это не тот случай.Это говорит мне C = {3x1 cell}.Тем не менее, я получаю следующее поведение:

C{1}

ans = 

   'gatc...'

   'gtcg...'

   'cagc...'

C{2} 
??? Index exceeds matrix dimensions

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

Что здесь происходит?о_О

Ответы [ 2 ]

1 голос
/ 25 августа 2011

Сначала вы должны добавить следующее:

C =  C{1};

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

Это потому, что в вашем случае TEXTSCAN возвращает массив ячеек C размером 1 на 1, где его первыми элементами является массив ячеек из трех элементов.

0 голосов
/ 25 августа 2011

Выход TEXTSCAN представляет собой массив ячеек, который сам содержит массивы различных входных данных. В вашем случае все данные помещаются в один массив ячеек. Для доступа к каждой записи сделайте это:

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

ans =

gatcgtacgtcgatgc

>> C{1}{2}

ans =

gtcgtacgatcgcatg

>> C{1}{3}

ans =

cagctgactgatcgatcg

Обратите внимание, что вам не нужно указывать \n в качестве разделителя, так как это символ конца строки по умолчанию.

...