Чтение большого .csv файла MATLAB с запятыми

matlab csv readfile bigdata

229 просмотра

1 ответ

4093 Репутация автора

У меня есть большой CSV-файл (6,5 миллионов x 25) и пытаюсь загрузить его в Matlab. Я уже пытался xlsread, csvreadно не могу получить удовлетворительные результаты. Я прочитал, я могу достичь этого с помощью textscan.

Мои данные выглядят так:

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значение в этом столбце.

Надеюсь на вашу помощь!

Автор: Mikhail_Sam Источник Размещён: 19.07.2016 08:01

Ответы (1)


1 плюс

855 Репутация автора

Решение

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

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]
Автор: giosans Размещён: 19.07.2016 08:50
Вопросы из категории :
32x32