2016-12-05 2 views
-1

Я создал файл ячейки в matlab.(matlab) написать csv файл из данных ячейки

This is the cell the name is "Table". In this Table,{1,1} is name of city, {1,2}&{1,3} are longitude and latitude values. {1,4},{1,6},{1,8},{1,10} has the name(characters), and {1,5},{1,7},{1,9},{1,11} has the number with the range which is shown in the picture.

Я хотел бы создать файл CSV из этой таблицы. Сначала я попробовал функцию «csvwrite», но в этой ситуации он не работает.

Кроме того, я также создаю файлы в зависимости от столбцов.

for i=1:25 
County_value(i,1) = Table{1,1+(i-1)*11}; 
County_lon(i,1) = Table{1,2+(i-1)*11}; 
County_lat(i,1) = Table{1,3+(i-1)*11}; 

D_apt(:,1+2*(i-1)) = Table{1,4+(i-1)*11}; 
D_apt{:,2*i} = num2cell(Table{1,5+(i-1)*11}) 

end 

мне удалось County Value, Lon, Lat и D_apt (:, 1 + 2 * (я-1)). Однако есть ошибка, когда я пытаюсь создать D_apt {:, 2 * i} ...

Мне нужна ваша помощь !!

Благодарим вас и большое вам спасибо!

ответ

0

Согласно mathworks docs

csvwrite (имя файла, М) записывает матрицу М в виде файла значений, разделенных запятой. Ввод имени файла представляет собой вектор символов, указанный как текст, заключенный в одинарные кавычки, например, «csvlist.dat».

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

  1. Вы не указали размер векторов в County_value, County_lon и Count_lat. Что еще более важно, County_value, похоже, хранит строки, которые могут иметь разную длину, а assingmente County_value(i,1) = Table{1+(-1)*11} может вызывать ошибки.
  2. Вы не инициализируете ячейку D_apt. В частности, ваш sintax D_apt(:,1+2*(i-1)) = Table{1,4+(i-1)*11}; пытается изменить размер переменной D_apt на двумерную ячейку, значения которой указаны в элементах Table.
  3. Непонятно, как вы хотите записать данные в файл csv.

Чтобы записать файл CSV, используя ячейку, поставки у вас есть два варианта:

  1. Используйте оператор fprintf с форматом строкой, подходящей для ваших потребностей.
  2. Тинкер с ячейкой для получения матриц, которые можно корректно обрабатывать csvwrite.

Я бы выбрал первый вариант для решения вашей конкретной проблемы, но имейте в виду, что если вы можете изменить код, создавший ячейку, если может быть чище или проще разбить ячейку на отдельные переменные для числовых и строковых значений.

csvfile = fopen('csvfilename.csv','w'); 
delimiter = ','; 
if isunix 
    newline = '\n'; 
else 
    newline = '\r\n'; 
end 
for i = 1:length(Table) 
    index11 = mod(i-1/11)+1; 
    if index11==1 % City 
     fprintf(csvfile,['%s',delimiter],Table{i}); 
    elseif index11==2 || index==3 % Lon or Lat 
     fprintf(csvfile,['%f',delimiter],Table{i}); 
    elseif mod(index11,2)==0 % Pair indeces: Names 
     fprintf(csvfile,['%s',delimiter],Table{i}); 
    else % Impair indeces: Values 
     if index11<11 
      fprintf(csvfile,['%s',delimiter],mat2str(Table{i})); 
     else 
      fprintf(csvfile,['%s',newline],mat2str(Table{i})); 
     end 
    end 
end 

Я извиняюсь, если я не успел понять, что вы имели в виду с

{1,5}, {1,7}, {1,9}, {1,11} имеет номер с диапазон, который показан на рисунке.
, но изображение не было действительно разборчивым.

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