Тексты могут странно себя вести

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

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 ответа

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

C =  C{1};

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

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

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

>> C = текстовое сканирование (fid, '%s');
>> C{1}{1}

ANS =

gatcgtacgtcgatgc

>> C {1} {2}

ANS =

gtcgtacgatcgcatg

>> C {1} {3}

ANS =

cagctgactgatcgatcg

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

Другие вопросы по тегам