MATLAB Answers

0

Problem reading a csv file

Asked by Erik Börjesson on 3 Feb 2019
Latest activity Commented on by Satoshi Kobayashi on 4 Feb 2019
Hello,
I am having problem reading in this file to matlab.
filename = 'Aluminum3.2_RawData_1.csv';
deliminator = ',';
Matvarden = dlmread(filename, deliminator,[ 50 0 10000 4]);
I want to get the all the numeric data from the file, trying to use dlmread. Here just as a test i tried row 50 --> 10000.
But just keep on getting "Mismatch between file and format character vector.
Trouble reading 'Numeric' field from file (row number 1, field number 3) ==> ;0,00;0,00000;-340,00\n"
And I just dont get it, there should only be Numeric values from row 50--> 10 000.
Does anyone have a solution to this?

  0 Comments

Sign in to comment.

Tags

2 Answers

Answer by Jeremy Hughes on 3 Feb 2019

Your CSV is a semicolon delimited file with comma as the decimal separator character.
This ought to work
opts = detectImportoptions(filename,'Delimiter',';')
opts = setvartype(opts,'double');
opts = setvaropts(opts,'DecimalSeparator',',');
opts.DataLines = [50 10000]; % if you want just those rows.
T = readtable(filename,opts);
And if you want a matrix
A = T.Variables

  0 Comments

Sign in to comment.


Answer by Satoshi Kobayashi on 3 Feb 2019

Your csv file includes semicolons in the range.
Dlmread cannot use two deliminators.
I recommend you to use textscan.
fileID = fopen(filename);
c = textscan(fileID,'%s','EndOfLine','\r\n','Delimiter',{',',';'},'HeaderLines',26);
fclose(fileID);
C = reshape(c{1},8,[])';
M = str2double(C);

  3 Comments

does not really work,
Product of known dimensions, 8, not divisible into
total number of elements, 156318.
that is the message i got from it.
problem is, it does not get correctly divided into the right columns. It seems like i just get a mix of everything.
if i use '/t' instead everything jumps in the same column.. So then i need to get them into four diffrent columns..
c = textscan(fileID,'%s','EndOfLine','\r\n','Delimiter',{'\t',''},'HeaderLines',26);
does someone have an idea on how? If i put
';' in delimiter
Everythings just gets really messy and there is no order.
If the total number of elements is 156318, the data is not regular.
You can get whole data as cells. You can get any infomation from it.
fileID = fopen(filename);
C01=textscan(fileID,'%s','EndOfLine','\r\n');
fclose(fileID);
for p=1:length(C01{1})
C02=textscan(C01{1}{p},'%s','Delimiter',{',',';'});
C(p,1:length(C02{1}))=C02{1}';
end

Sign in to comment.