0

我有一个逗号分隔的文件,格式如下:

Col1Name,Col1Val1,Col1Val2,Col1Val3,...Col1ValN,Col2Name,Col2Val1,...Col2ValN,...,ColMName,ColMVal1,...,ColMValN

我的问题是,如何将此文件转换为 Matlab 可以视为矩阵的东西,以及如何在文件中使用该矩阵?我想我可以使用一些脚本语言将文件格式化为 matlab 矩阵格式并复制它,但文件相当大(~7mb)。

谢谢!

抱歉编辑:

文件格式为:

Col1Name;Col2Name;Col3Name;...;ColNName
Col1Val1;Col2Val2;Col3Val3;...;ColNVal1
...
Col1ValM;Col2ValM;Col3ValM;...;VolNValM

以下是一些实际数据:

Press;Temp.;CondF;Cond20;O2%;O2ppm;pH;NO3;Chl(a);PhycoEr;PhycoCy;PAR;DATE;TIME;excel.date;date.time
0.96;20.011;432.1;431.9;125.1;11.34;8.999;134;9.2;2.53;1.85;16.302;08.06.2011;12:01:52;40702;40702.0.5
1;20.011;433;432.8;125;11.34;9;133.7;8.19;3.32;2.02;17.06;08.06.2011;12:01:54;40702;40702.0.5
1.1;20.012;432.7;432.4;125.1;11.34;9;133.8;8.35;2.13;2.2;19.007;08.06.2011;12:01:55;40702;40702.0.5
1.2;20.012;432.8;432.5;125.2;11.35;9.001;133.8;8.45;2.95;1.95;21.054;08.06.2011;12:01:56;40702;40702.0.5
1.3;20.012;432.7;432.4;125.4;11.37;9.002;133.7;8.62;3.17;1.87;22.934;08.06.2011;12:01:57;40702;40702.0.5
1.4;20.007;432.1;431.9;125.2;11.35;9.003;133.7;9.48;4.17;1.6;24.828;08.06.2011;12:01:58;40702;40702.0.5
1.5;19.997;432.3;432.2;124.9;11.33;9.003;133.8;8.5;3.84;1.79;27.327;08.06.2011;12:01:59;40702;40702.0.5
1.6;20;432.8;432.6;124.5;11.29;9.003;133.6;8.57;3.22;1.86;30.259;08.06.2011;12:02:00;40702;40702.0.5
1.7;19.99;431.9;431.9;124.4;11.28;9.002;133.6;8.79;3.7;1.81;35.152;08.06.2011;12:02:02;40702;40702.0.5
1.8;19.994;432.1;432.1;124.4;11.28;9.002;133.6;8.58;3.41;1.84;39.098;08.06.2011;12:02:03;40702;40702.0.5
1.9;19.993;433;432.9;124.6;11.3;9.002;133.6;8.59;3.45;5.53;45.488;08.06.2011;12:02:04;40702;40702.0.5
2;19.994;433;432.9;124.8;11.32;9.002;133.5;8.6;2.76;1.99;50.646;08.06.2011;12:02:05;40702;40702.0.5
4

1 回答 1

1

如果您不知道前面的行数和列数,则不能使用以前的解决方案。改用这个。

7 Mb 不是很大,很小。这是21世纪。

要读入 matlab 矩阵:

    text = fileread('file.name'); % a string with the entire file contents in it.  7 Mb is no big deal.
    NAMES = {}; % we'll record column names here
    VALUES = []; % this will be the matrix of values

    while text(end) = ','
        text(end)=[]; % elimnate any trailing commas
    end

    commas = find(text==','); % Index all the commas
    commas = [0;commas(:);length(commas)+1] % put fake commas before and after text to simplify loop

    col = 0; % which column are we in

    I = 1;
    while I<length(commas) 
        txt = text(commas(I)+1:commas(I+1)-1);
        I = I+1;
        num = str2double(txt);
        if isnan(num) % this means it must be a column name
            NAMES{end+1,1} = txt;
            col = col+1; % can you believe Matlab doesn't support col++ ???
            row = 1; % back to the top at each new column
            continue % we have dealt with this txt, its not a num so ... next
        end

        % if we made it here we have a number
        VALUES(row,col) = num;
    end

然后,您可以将您的 matlab 矩阵VALUES以及标题名称(如果您希望它们以 matlab 格式保存NAMES到 matlab 格式文件中)

    save('mymatrix.mat','VALUES','NAMES'); % saves matrix and column names to .mat file

当您想要从文件中获取内容时,您可以通过以下方式将内容返回到 matlab:

    load mymatrix.mat; % loads VALUES and NAMES from .mat file

一些限制:

您不能在列标题名称中使用逗号。

您不能“命名”一列,例如“898.2”或任何可以读取为双数的内容,它将被读取为一个数字。

如果您的列具有不同的长度,则较短的列将用零填充到最长列的长度。

这就是我能想到的。

于 2012-06-22T01:33:53.433 回答