Тексты могут странно себя вести
Я хочу прочитать текстовый файл формы:
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
в качестве разделителя, так как это символ конца строки по умолчанию.