2016-07-19 2 views
0

У меня есть большой файл csv (6.5millions x 25) и попытка загрузить его в Matlab. Я уже пробовал xlsread, csvread, но не могу получить удовлетворительные результаты. Я читал, что могу достичь этого, используя textscan.Чтение большого .csv файла MATLAB с запятыми

Мои данные выглядят следующим образом:

date_time;writetime;F1;F2;F3;R1;h12;b12;h_main; 
01.01.2016 0:00:01;504910801075;1;1;1;3,94;799;1515;3,877; 
01.01.2016 0:00:02;504910802314;1;1;1;3,96;795;1516;3,857; 

Первая строка заголовка. Другие строки - это данные. Все остальные строки имеют одинаковый формат.

Мой код:

fileID = fopen('value1.csv','r'); 
formatSpec = '%s; \n'; 

formatSpec1 = '%s%f %f %f %f %f %f %f %f %f %f\n'; 
A1 = fscanf(fileID, formatSpec); 

A2 = textscan(fileID, formatSpec1,'Delimiter',{';', ','}); 

Я прочитал заголовок A1 это нормально:

A1 = 
date_time;writetime;F1;F2;F3;R1;h12;b12;h_main; 

и считывать данные A2 тоже.

A2 = 
    {1x1 cell} [5.0491e+11] [1] [1] [1] [3] [94] [799] [1515] [3] [877] 

Но как читать 3,94 значения? Потому что это может быть только 4 или 0,064 значение в этой колонке.

Надейтесь на помощь!

+0

Эти цифры всегда имеют десятичный разделитель? например, 4,00 – Finn

+1

Ваши поля разделяются символом ';', поэтому не используйте запятую ',' как разделитель полей. –

+0

@ Finn no, это может быть просто '4'. –

ответ

1

Я бы рассматривал их как строку. Следующие работы.

fileID = fopen('value1.csv','r'); 
formatSpec = '%s; \n'; 
A1 = fscanf(fileID, formatSpec); 
formatSpec1 = '%s%f %f %f %f %s %f %f %s\n'; 
A2 = textscan(fileID, formatSpec1,'Delimiter',{';'}); 
A2{6} = str2double(strrep(A2{6},',','.')); 
A2{end} = str2double(strrep(A2{end},',','.')); 

{1x1 cell} [5.0491e+11] [1] [1] [1] [3.94] [799] [1515] [3.8770] 
+1

Я пошел так же! Не слышал о 'strrep' раньше, спасибо! –

+0

У меня есть одно уточнение для вашего решения: мы не можем использовать 'strrep (char (A2 {12}), ',', '.'); Ошибка при использовании strrep Строки ввода должны иметь одну строку. ' Но мы можем пойти' str2double (strrep (A2 {12}, ',', '.')); ' –

+0

? размер массива A2 равен 9, правильно? Кроме того, A2 {end} является строкой, правильно? – giosans

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