有效地从MATLAB中的多个文件夹中读取文本文件

时间:2015-12-28 17:08:20

标签: matlab file-io cell-array

我正在尝试在我的工作区中导入GeoLife GPS trajectory dataset。包含此数据的文件夹为每个被跟踪用户提供182个子文件夹,每个子文件夹具有.plt格式的用户特定轨迹文件。轨迹文件的数量不固定,每个用户可能不同。此外,列不仅包含一种数据类型。前5列的类型是float,最后2列的类型是string(日期和时间)。我的目标是将此数据存储在大小为182的数组中,其中每个数组槽包含用户特定的轨迹。为此,我使用了给定here的getAllFiles函数。然后,我访问了从此函数返回的所有文件,并按如下方式存储它们:

fileList = getAllFiles('C:\...\MATLAB\HmMDTW\Data');

i = 1;
k = 1;

trj = [];
trjAll = cell(182,1);
pid = '000';

while i < length(fileList)
    fileDir = cell2mat(fileList(i));
    index = strfind(fileDir, 'Trajectory') + 11;

    if any(index)
        fid = fopen(fileDir);
        t = textscan(fid, '%f %f %f %f %f %s %s', 'Delimiter', ',', 'HeaderLines', 6, 'CollectOutput', 1);
        cid = fileDir(45:47);

        if ~strcmp(cid, pid)
            trjAll{k} = trj;
            trj = [];
            k = k + 1
        end

        pid = cid;
        trj = [trj;t];
        fclose(fid);
    end

    i = i + 1;
end

上面,我刚检查了所有文件,如果这个文件是一个轨迹,我读取该文件中的相关数据并将其添加到trj(当前用户的轨迹列表)。如果用户id(000,...,181)在下一个文件中发生变化,我在trjAll(所有用户轨迹数组)中添加了trj并初始化了trj。因此,trjAll包含所有trj-s。但是,花了很长时间(约4-5分钟)。有没有更有效的方法来实现我想做的事情?我认为我可能会在getAllFiles函数中读取文件,但我不认为这会节省大量时间。提前谢谢。

0 个答案:

没有答案