如何对.txt或.csv文件进行排序(matlab)

时间:2014-06-12 21:13:51

标签: matlab sorting

我是matlab的新手。我有一个大型的csv文件,我也可以将其作为文本文件。此文件由整数和符号行组成,例如 - ,:和其他符号。我希望能够读取此文件的每一行并以数字方式对其进行排序。例如:

2000-01-08T16:47:32.200Z,-16.84,-173.93,162.7,kiloMETER,6.7,MB,CMT

我需要将前三组数字视为日期,将T00:00:00视为一天中的时间,然后将线条从最早到最晚排序。每一行都具有完全相同的格式。

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

这是针对您具体案例的解决方案:

my_data=importdata('test_1.txt');
tmp_data= cell(numel(my_data),7);
tmp_data(:,7) = my_data;
for k=1:numel(my_data)
    tmp_datapoint = my_data{k,1};
    tmp_year = str2double(tmp_datapoint(1:4));
    tmp_month = str2double(tmp_datapoint(6:7));
    tmp_day = str2double(tmp_datapoint(9:10));
    tmp_hour = str2double(tmp_datapoint(12:13));
    tmp_minute = str2double(tmp_datapoint(15:16));
    tmp_second = str2double(tmp_datapoint(18:19));    
    tmp_data(k,1:6) = {tmp_year,tmp_month, tmp_day, tmp_hour, tmp_minute, tmp_second};
end
tmp_data = sortrows(tmp_data, [1, 2, 3, 4, 5, 6]);
sorted_data = tmp_data(:,7);

Importdata会保存您的数据,例如

2000-01-08T16:47:32.200Z, -16.84, -173.93, 162.7, kiloMETER, 6.7, MB, CMT
2000-01-04T19:47:32.200Z, -16.84, -193.93, 162.7, kiloMETER, 6.7, MB, CMT
2000-01-08T16:47:35.200Z, -16.84, -173.93, 165.7, kiloMETER, 6.7, MB, CMT
...

最后sorted_data包含您的排序数据,如:

2000-01-04T19:47:32.200Z, -16.84, -193.93, 162.7, kiloMETER, 6.7, MB, CMT
2000-01-08T16:47:32.200Z, -16.84, -173.93, 162.7, kiloMETER, 6.7, MB, CMT
2000-01-08T16:47:35.200Z, -16.84, -173.93, 165.7, kiloMETER, 6.7, MB, CMT
...

事实上,您的数据总是在单元格矩阵中保存为字符串。因此,如果您对地址有任何问题,请检查这些变量类型。