加载并预览等宽文本文件
加载文件 fixed_width_patients_subset_messy.txt 并在文本编辑器中预览其内容。屏幕截图如下所示。屏幕截图显示该文件包含:
空行 - 第 7 行、第 12 行和第 13 行
附加列 - 第 8 列
缺失数据 - 第 1 行、第 4 行、第 9 行和第 11 行
不完整字段 - 最后 3 行
filename = 'fixed_width_patients_subset_messy.txt';
检查并捕获等宽文件的属性
等宽文本文件包含按开始位置、变量数目、变量名称和变量宽度组织的表格数据。可以捕获这些属性以及要为变量使用的数据类型。
DataStartLine = 2;
NumVariables = 7;
VariableNames = {'LastName','Gender','Age','Location','Height',...
'Weight','Smoker'};
VariableWidths = [ 10, 7, 4, 26, 7, ...
7, 7 ] ;
DataType = {'char','categorical','double','char','double',...
'double','logical'};
初始化 FixedWidthImportOptions 对象并设置变量属性
初始化一个 FixedWidthImportOptions 对象并配置其属性,以便与数据的属性相匹配。
opts = fixedWidthImportOptions('NumVariables',NumVariables,...
'DataLines',DataStartLine,...
'VariableNames',VariableNames,...
'VariableWidths',VariableWidths,...
'VariableTypes',DataType);
设置 EmptyLinesRule、Missing Rule 和 ExtraColumnsRule
通过将 EmptyLineRule 设置为 'read',读取数据中的空行。接下来,通过将 MissingRule 设置为 'fill',用预定义的值填充缺失实例。最后,要在导入过程中忽略多余列,请将 ExtraColumnsRule 设置为 'ignore'。有关这些属性及其值的详细信息,请参阅有关 FixedWidthImportOptions 的文档。
opts.EmptyLineRule = 'read';
opts.MissingRule = 'fill';
opts.ExtraColumnsRule ='ignore';
设置 PartialFieldRule
如果导入函数在遍历完整个变量宽度之前遇到行结束字符,就会出现不完整字段。例如,在此预览中,fixed_width_patients_subset_messy.txt 文件的最后三行就属于这种情况。这里,在最后一列的最后一行中,在该字段的头两个位置之后、在到达完整的变量宽度(三个位置)之前,出现了行结束字符。
出现这种不完整字段有时可能意味着出现错误。因此,可以使用 PartialFieldRule 决定如何处理这些数据。要保留不完整字段数据并将其转换为正确的数据类型,请将 PartialFieldRule 设置为 'keep'。有关 PartialFieldRule 的详细信息,请参阅有关 FixedWidthImportOptions 的文档。
opts.PartialFieldRule = 'keep';
导入表
使用 readtable 函数和 FixedWidthImportOptions 对象导入表并预览数据。
T = readtable(filename,opts)
T=15×7 table
LastName Gender Age Location Height Weight Smoker
____________ ___________ ___ _____________________________ ______ ______ ______
{'Smith' } Male 38 {'County General Hospital' } 71 176 true
{'Johnson' } Male 43 {'VA Hospital' } 69 163 false
{'Williams'} Female 38 {'St. Mary's Medical Center'} NaN NaN false
{'Jones' } Female 40 {'VA Hospital' } 67 133 false
{'Brown' } Female 49 {'County General Hospital' } 64 119 false
{0×0 char } NaN {0×0 char } NaN NaN false
{'Wilson' } Male 40 {'VA Hospital' } 68 180 false
{'Moore' } Male 28 {'St. Mary's Medical Center'} NaN 183 false
{'Taylor' } Female 31 {'County General Hospital' } 66 132 false
{'Anderson'} Female 45 {'County General Hospital' } 68 NaN false
{0×0 char } NaN {0×0 char } NaN NaN false
{0×0 char } NaN {0×0 char } NaN NaN false
{'White' } Male 39 {'VA Hospital' } 72 2 false
{'Harris' } Female 36 {'St. Mary's Medical Center'} 65 12 false
{'Martin' } Male 48 {'VA Hospital' } 71 181 true