循环读取大数据文件
Looping to read in large data files
我知道,已经有很多问题被问到这个 topic.Somehow 我遗漏了一些导致我得到错误结果的东西。那么有人可以告诉我哪里错了吗。
我在同一个目录中有一批大 .txt
文件(500 MB - 900MB),序列号如下。
EXPORT.001.txt,EXPORT.002.txt,EXPORT.003.txt,...... EXPORT.032.txt
我想读取每个文件并按顺序存储变量。
我的密码是
files = dir('*.txt');
for file = files'
[time.file.name,Y_bt.file.name,Y_bc.file.name,X_bt.file.name,X_bc.file.name,X_C.file.name,Y_C.file.name,N_ot_an.file.name,N_ot_dig.file.name,n.file.name,n2.file.name] = import_file(file.name,startRow);
end
import_file 是我创建的另一个函数,用于读取每个文件。
function [Time,Y_bt,Y_bc,X_bt,X_bc,X_C,Y_C,N_ot_an,N_ot_dig,n,n2] = import_file(filename,startRow)
delimiter = {'\t',' '};
formatSpec = '%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f';
fileID = fopen(filename,'r');
dataArray = textscan(fileID,formatSPec,'Delimiter','MultipleDelimsAsOne',true'EmptyValue',NaN,'HeaderLines',startRow-1,'ReturnOnError',false);
EXPORT = [dataArray{1:end}];
%Defining Individual channels
Time = EXPORT(:,2);
.
.
.
.
n2 = EXPORT(:,21);
fclose(fileID);
clear file ID;
当我 运行 程序时,我只从最后一个文本文件 EXPORT.032.txt
中获取数据,其余文件未被读取。
我想用我的程序做的就是为所有 .txt 文件中的所有变量创建一个结构数组。例如 Time.file.name
应该创建一个名称为 Time
的结构,并包含来自所有数据集的所有时间变量。我想使用这些数据结构将不同的变量调用到我程序的同一个脚本中。
提前致谢。
您将在每次循环迭代时覆盖所有变量。
for ii = 1:10
A = ii;
end
将导致 A
成为值为 10 的标量。
for ii = 1:10
A(ii) = ii;
end
将导致 A
是一个范围从 1 到 10 的数组。
使用循环变量file
将其追加到您想要的每个结构上。您似乎有多个嵌套结构,我不确定您要将其存储在哪个结构中,但 time(file.name)
似乎是您要查找的内容。
清理代码的一个好方法是将所有内容存储在函数中的 单个 结构中,这样您就可以在脚本中调用单个结构作为输出,使其成为更具可读性,更不容易出错。
我知道,已经有很多问题被问到这个 topic.Somehow 我遗漏了一些导致我得到错误结果的东西。那么有人可以告诉我哪里错了吗。
我在同一个目录中有一批大 .txt
文件(500 MB - 900MB),序列号如下。
EXPORT.001.txt,EXPORT.002.txt,EXPORT.003.txt,...... EXPORT.032.txt
我想读取每个文件并按顺序存储变量。
我的密码是
files = dir('*.txt');
for file = files'
[time.file.name,Y_bt.file.name,Y_bc.file.name,X_bt.file.name,X_bc.file.name,X_C.file.name,Y_C.file.name,N_ot_an.file.name,N_ot_dig.file.name,n.file.name,n2.file.name] = import_file(file.name,startRow);
end
import_file 是我创建的另一个函数,用于读取每个文件。
function [Time,Y_bt,Y_bc,X_bt,X_bc,X_C,Y_C,N_ot_an,N_ot_dig,n,n2] = import_file(filename,startRow)
delimiter = {'\t',' '};
formatSpec = '%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f%f';
fileID = fopen(filename,'r');
dataArray = textscan(fileID,formatSPec,'Delimiter','MultipleDelimsAsOne',true'EmptyValue',NaN,'HeaderLines',startRow-1,'ReturnOnError',false);
EXPORT = [dataArray{1:end}];
%Defining Individual channels
Time = EXPORT(:,2);
.
.
.
.
n2 = EXPORT(:,21);
fclose(fileID);
clear file ID;
当我 运行 程序时,我只从最后一个文本文件 EXPORT.032.txt
中获取数据,其余文件未被读取。
我想用我的程序做的就是为所有 .txt 文件中的所有变量创建一个结构数组。例如 Time.file.name
应该创建一个名称为 Time
的结构,并包含来自所有数据集的所有时间变量。我想使用这些数据结构将不同的变量调用到我程序的同一个脚本中。
提前致谢。
您将在每次循环迭代时覆盖所有变量。
for ii = 1:10
A = ii;
end
将导致 A
成为值为 10 的标量。
for ii = 1:10
A(ii) = ii;
end
将导致 A
是一个范围从 1 到 10 的数组。
使用循环变量file
将其追加到您想要的每个结构上。您似乎有多个嵌套结构,我不确定您要将其存储在哪个结构中,但 time(file.name)
似乎是您要查找的内容。
清理代码的一个好方法是将所有内容存储在函数中的 单个 结构中,这样您就可以在脚本中调用单个结构作为输出,使其成为更具可读性,更不容易出错。