2016-05-27 3 views
0

У меня есть матрица, как показано ниже:вставить/вкладку пространства для отдельного поля в элементе столбца MATLAB

615319419701102123000000 000000 000000 000000 000000 000000 000000 000003 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 

Матрица имеет 24 столбца. В 1-й колонке 7 цифр представляют (т.е. 6153194) идентификатор stattion, следующие 4-значные годы (1970), следующий 2-значный месяц (11, т. Е. Ноябрь), следующая 2-значная цифра представляет день месяца (например, в 1st столбец 02 означает 2-й день), тогда 123 - это флаг, обозначающий временные ряды скорости осаждения и последние шесть цифр (т. е. 000000 - количество осадков). В последнем 23 столбце указаны данные о часах дождя в мм.

Я хочу, чтобы отделить поле 1-го столбца и станции ID, год, месяц, день и значение кормить в программу, что-то вроде этого:

6153194 1970 11 02 123 000000 000000 000000 000000 000000 000000 000000 000003 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 000000 

И, наконец, временные ряды аналогичным образом:

6153194 1970 11 2 123 0 
6153194 1970 11 2 123 0 
6153194 1970 11 2 123 0 
.................. 
................. 
6153194 1970 11 2 123 0 
6153194 1970 11 2 123 0 

Моя основная проблема заключается в том, как отделить поля, используя вкладку/пространство, от первого столбца, а затем, как построить тайм-аут из этого? Любая помощь/предложения по этому вопросу

ответ

0

Код, приведенный ниже, должен содержать вывод, который, я считаю, вы хотите произвести. Однако я не совсем уверен, полностью ли я понял ваш вопрос. Пожалуйста, дайте мне знать, если вам нужны данные в другом формате, и я изменю код.

После запуска кода charMatrix будет содержать данные в виде массива символов с первым столбцом, указанным в примере в вашем вопросе. numMat - это массив, который содержит числовые данные, соответствующие charMatrix.

%% Subdivision of the first column. 

% Read the data. 
fid = fopen('file.txt'); 
charCell = textscan(fid, '%s', 'delimiter', '\n'); 
charCell = charCell{1}; 

% Split by whitespace. 
charCell = cellfun(@strsplit, charCell, 'UniformOutput', false); 

% Split the first column. 
charCell = cellfun(... 
    @(charMatrixRow) { ... 
    charMatrixRow{1}(1 : 7) ... 
    charMatrixRow{1}(8 : 11) ... 
    charMatrixRow{1}(12 : 13) ... 
    charMatrixRow{1}(14 : 15) ... 
    charMatrixRow{1}(16 : 18) ... 
    charMatrixRow{2 : end} ... 
    }, ... 
    charCell, ... 
    'UniformOutput', false ... 
    ); 

% Join individual columns with a whitespace delimiter. 
charMatrix = cellfun(... 
    @strjoin, charCell, 'UniformOutput', false ... 
    ); 

% If you would like to get the values in the form of a character array: 
charMatrix = cell2mat(charMatrix); 

%% Numeric representation of the columns. 
% If you would like to get the individual columns in the form of numeric 
% arrays, use the code below. 

charCell = vertcat(charCell{:}); 

numMat = cell2mat(cellfun(@str2num, charCell, 'UniformOutput', false)); 
+0

Привет, спасибо, что обратились за помощью! Данные находятся в цифровом формате, а не в виде массива символов. Я могу открыть его непосредственно с помощью команды importdata из текстового поля. В этом случае я получаю ошибку в foll. line: charCell = cellfun (@strsplit, charCell, 'UniformOutput', false); – Poulomi

+0

Спасибо за ваш комментарий. Я думаю, что вам нужно преобразовать данные в массив символов формы, указанной в 'charMatrix', потому что в противном случае у вас будут проблемы с точностью для хранения первого столбца исходного набора данных. Максимальное целое число, поддерживаемое MATLAB, равно 18446744073709551615 (uint64). Если вы можете загрузить файл данных, я могу предоставить полное решение. – user1391279

+0

Привет, я попытался прочитать данные с помощью текстового сканирования: X = textscan (fileID, '% s', 24, 'Delimiter', '\ n'); Есть 24 столбца, поэтому я ставлю 24 здесь. Затем я попытался преобразовать массив ячеек в массив символов, используя команду char. Я получил ошибку «Элементы ячейки должны быть массивами символов». Любое предложение, как мне следует продолжить? – Poulomi

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