如何使用 MATLAB textscan 函数读取此结构?
How read this structure using MATLAB textscan function?
我在一个名为 my_file.txt
.
的文本文件中有这个结构
# Codelength = 3.74556 bits.
1:1:1:1 0.000218593 "v12978"
1:1:1:2 0.000153576 "v1666"
1:1:1:3 0.000149092 "v45"
1:1:1:4 0.000100329 "v4618"
1:1:1:5 5.1005e-005 "v5593"
1:1:1:6 3.53112e-005 "v10214"
1:1:1:7 3.36297e-005 "v10389"
1:1:1:8 2.85852e-005 "v2273"
1:1:1:9 2.63433e-005 "v13253"
1:1:1:10 2.41013e-005 "v10109"
1:1:1:11 2.01778e-005 "v9204"
1:1:1:12 1.73753e-005 "v16508"
1:1:1:13 1.34519e-005 "v335"
这是该文本文件的一小部分。主文件有超过 600,000 行。我想要一个具有以下属性的数组:
First column : 1 1 1 1 1 1 1 ... (left values in txt file)
Second column : 1 1 1 1 1 1 1 ...
Third column : 1 1 1 1 1 1 1 ...
Fourth column : 1 2 3 4 5 6 ...
Fifth column : 0.000218593 0.000153576 000149092 000100329 ....
和一个包含最后右侧文本文件项的字符串("v12978"、"v1666" ...)。我如何在 MATLAB 中执行此操作?
假设textfile.txt
是你的数据文件,那么
fid = fopen('textfile.txt', 'r');
oC = onCleanup(@() any(fopen('all')==fid) && fclose(fid) );
data = textscan(fid,...
'%d:%d:%d:%d %f %q',...
'Headerlines', 1);
fclose(fid);
会给
data =
[13x1 int32] [13x1 int32] [13x1 int32] [13x1 int32] [13x1 double] {13x1 cell}
这已经符合您对所需输出格式的描述。
现在,您可以继续将数字连接成一个数组,其中您应该注意 MATLAB downcasts 默认情况下:
numbers = cellfun(@double, data(1:end-1), 'UniformOutput', false);
numbers = [numbers{:}];
但是,这完全取决于您的具体用例。
您可能希望将 reading/processing 分成几块,比如 10,000 行,因为一次读取 600k 行会耗尽您的 RAM。阅读有关 textscan
如何执行此操作的文档。
我在一个名为 my_file.txt
.
# Codelength = 3.74556 bits.
1:1:1:1 0.000218593 "v12978"
1:1:1:2 0.000153576 "v1666"
1:1:1:3 0.000149092 "v45"
1:1:1:4 0.000100329 "v4618"
1:1:1:5 5.1005e-005 "v5593"
1:1:1:6 3.53112e-005 "v10214"
1:1:1:7 3.36297e-005 "v10389"
1:1:1:8 2.85852e-005 "v2273"
1:1:1:9 2.63433e-005 "v13253"
1:1:1:10 2.41013e-005 "v10109"
1:1:1:11 2.01778e-005 "v9204"
1:1:1:12 1.73753e-005 "v16508"
1:1:1:13 1.34519e-005 "v335"
这是该文本文件的一小部分。主文件有超过 600,000 行。我想要一个具有以下属性的数组:
First column : 1 1 1 1 1 1 1 ... (left values in txt file)
Second column : 1 1 1 1 1 1 1 ...
Third column : 1 1 1 1 1 1 1 ...
Fourth column : 1 2 3 4 5 6 ...
Fifth column : 0.000218593 0.000153576 000149092 000100329 ....
和一个包含最后右侧文本文件项的字符串("v12978"、"v1666" ...)。我如何在 MATLAB 中执行此操作?
假设textfile.txt
是你的数据文件,那么
fid = fopen('textfile.txt', 'r');
oC = onCleanup(@() any(fopen('all')==fid) && fclose(fid) );
data = textscan(fid,...
'%d:%d:%d:%d %f %q',...
'Headerlines', 1);
fclose(fid);
会给
data =
[13x1 int32] [13x1 int32] [13x1 int32] [13x1 int32] [13x1 double] {13x1 cell}
这已经符合您对所需输出格式的描述。
现在,您可以继续将数字连接成一个数组,其中您应该注意 MATLAB downcasts 默认情况下:
numbers = cellfun(@double, data(1:end-1), 'UniformOutput', false);
numbers = [numbers{:}];
但是,这完全取决于您的具体用例。
您可能希望将 reading/processing 分成几块,比如 10,000 行,因为一次读取 600k 行会耗尽您的 RAM。阅读有关 textscan
如何执行此操作的文档。