2015-11-12 2 views
0

Мне нужно прочитать текстовый файл, как это (столбцы могут быть 6,9,12 и т.д ..):Чтение матрицы строки

R,R,S,S,T,T 
R,R,S,T,S,T 
R,R,S,T,T,S 
R,R,T,S,S,T 
R,R,T,S,T,S 
R,R,T,T,S,S 
R,S,R,S,T,T 
R,S,R,T,S,T 
R,S,R,T,T,S 
R,S,S,R,T,T 
R,S,S,T,R,T 

и помещает данные в матрицу строку (без запятых) ,

Я пробовал с mat=dlmread(file_name), но я думаю, что он работает только с числами.

Я также попытался это:

mat=fileread(filename); 
mat(mat==',') = '' 

но выход странно, mat 1 По 72

==== ==== EDIT

примера вывода (матрица 11By6):

RRSSTT 
RRSTST 
RRSTTS 
RRTSST 
RRTSTS 
RRTTSS 
RSRSTT 
RSRTST 
RSRTTS 
RSSRTT 
RSSTRT 
+1

Что еще вы пробовали? http://www.mathworks.com/help/matlab/ref/fileread.html? http://www.mathworks.com/help/matlab/ref/textscan.html? – Dan

+0

да, я могу читать файл с 'text = fileread (filename)', но после того, как мне нужно удалить запятые –

+0

«Мне нужно удалить запятые» - тривиально в MATLAB. Попробуйте сами и добавьте код на свой вопрос, показывающий, где вы застряли. – Dan

ответ

2

Я чувствую себя шлюхой, но это одно из многих возможных решений.

Предполагая, что файл называется test.csv -

fileID = fopen('test.csv'); 
C = textscan(fileID,'%s %s %s %s %s %s' ,'Delimiter',','); 

==== ==== EDIT

, если вы не хотите писать% S 6 раз - делать:

formatSpec = '%s'; 
N = 6; 
C = textscan(fileID, repmat('%s', [1 N]),'Delimiter',','); 

Опять же, это всего лишь один из многих * способов сделать это.

Это будет генерировать структуру ячеек 1 x 6, где каждая из 6 ячеек представляет столбец вашей строки. Теперь вы можете индексироваться фигурные скобки:

>> C{1} 
>>ans = 

'R' 
'R' 
'R' 
'R' 
'R' 
'R' 
'R' 
'R' 
'R' 
'R' 
'R' 

Если вы хотите полную ячеистую структуру, где есть только один Char в каждой клетке, вы просто должны сделать:

V = horzcat(C{:}); %// size of V is 11x6 

V = 

'R' 'R' 'S' 'S' 'T' 'T' 
'R' 'R' 'S' 'T' 'S' 'T' 
'R' 'R' 'S' 'T' 'T' 'S' 
'R' 'R' 'T' 'S' 'S' 'T' 
'R' 'R' 'T' 'S' 'T' 'S' 
'R' 'R' 'T' 'T' 'S' 'S' 
'R' 'S' 'R' 'S' 'T' 'T' 
'R' 'S' 'R' 'T' 'S' 'T' 
'R' 'S' 'R' 'T' 'T' 'S' 
'R' 'S' 'S' 'R' 'T' 'T' 
'R' 'S' 'S' 'T' 'R' 'T' 

==== = ВТОРАЯ EDIT =====

чтобы преобразовать в массив символов: использование мангалов

T = reshape(char(V(:)),size(V)) %// size of T is now 11*6 Char 

>> T = 
RRSSTT 
RRSTST 
RRSTTS 
RRTSST 
. 
. 
+0

Да, я сделал это, но если столбцы больше, мне нужно вручную изменить ''% s% s% s% s% s% s'', я отредактировал с добавлением этой детали, извините. –

+0

Я сэкономлю вам смущение от фактического продвижения этого в этом случае;) Хорошее объяснение – Adriaan

+0

@PietroZ. Я отредактировал решение, чтобы включить метод, в котором вам не нужно писать% s несколько раз. – GameOfThrows

Смежные вопросы