2016-06-29 5 views
0

Я пытаюсь импортировать файл, созданный с помощью программы Fortran, которая включает в себя четыре столбца: атомный символ, положение X, положение Y, позиция Z. Вот пример входного файла:Вставить вкладку с разделителем в MATLAB с символами И номерами

Zn    0.00000000000  0.00000000000  0.00000000000 
Zn    0.00000000000  0.00000000000  0.25000000000 
Zn    0.00000000000  0.00000000000  0.50000000000 
Zn    0.00000000000  0.00000000000  0.75000000000 
Zn    0.00000000000  0.05000000000  0.00000000000 
Zn    0.00000000000  0.05000000000  0.25000000000 
Zn    0.00000000000  0.05000000000  0.50000000000 
Zn    0.00000000000  0.05000000000  0.75000000000 

Теперь, если я импортировать это в Excel и экспорта в виде файла CSV, а затем использовать csvread (имя файла), ошибка получается, предположительный, поскольку первый столбец имеет входы символов. (Я уверен, что есть способ, чтобы импортировать файлы, разделенные табуляцией непосредственно без этого промежуточного шага, но я использовал этот метод.)

Вещи, которые я пробовал:

  1. Удаление первого столбца перед импортом в MATLAB. Проблема с этим я буду иметь дело с соединениями, которые имеют несколько типов атомов, и я хочу иметь возможность отслеживать их.
  2. Я знаю, что я могу использовать двойные (переменные) и char (переменные) для перевода с символов на числовой массив, но мне все же нужно иметь возможность импортировать файл до того, как я сменил первый столбец на числовой массив.

Я ценю любые предложения.

+0

Возможно использование [importdata] (http://www.mathworks.com/help/matlab/ref/importdata.html?searchHighlight=importdata)? Вы можете легко разделить текстовые данные и цифры, чтобы обрабатывать их отдельно. –

+0

Мне не удалось получить импортную информацию для работы за то, что мне нужно. –

ответ

0

вы можете попробовать это

fid = fopen('test.dat'); 
%one string and 3 numbers 
format= '%s %f %f %f'; 
C = textscan(fid); 
fclose(fid); 
% C is now [{8x1cell} {8x1double} {8x1double} {8x1double}] 
%get the content from C(1) and make a cell array out of C(2:4) 
C= [C{:,1} num2cell([C{2:4}])]; 
+0

Пойдите немного дальше. Это читается во всем в массиве ячеек. Как бы вы преобразовали последние три столбца в числовую матрицу для использования? – rayryeng

+0

Это, кажется, шаг в правильном направлении, но это создает ячейку 1x3 'C', где каждая ячейка, в свою очередь, является ячейкой 3200x1 (поэтому у меня есть вложенная ячейка в каждом пятне C). Как я могу заставить C быть ячейкой 3200x4, и каждая строка будет строкой из входного файла? –

+0

я вижу. ну, 3200x4 часть легко, я отредактирую свой ответ, но как вы хотите перейти оттуда? есть ли у вас файл с другим форматом? вы хотите, чтобы они были отсортированы по элементам или построили трехмерное изображение? знаете ли вы о различных типах в matlab (cell, struct, matrix)? отредактируйте вопрос, чтобы мы могли найти лучшее решение – Finn

0

%% Вы можете импортировать данные непосредственно с помощью readtable (он принимает .txt, .dat или .csv и табличные форматы).

% Импорт данных в виде таблицы с использованием readtable

data = readtable('filename.txt', 'Delimiter', 'tab'); 

%% См http://www.mathworks.com/help/matlab/ref/readtable.html для дополнительной информации о функции.

%% См. http://www.mathworks.com/help/matlab/tables.html для получения более подробной информации о таблице.

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