MATLAB每个字母等宽,等宽文本文件的导入选项对象

加载并预览等宽文本文件

加载文件 fixed_width_patients_subset_messy.txt 并在文本编辑器中预览其内容。屏幕截图如下所示。屏幕截图显示该文件包含:

空行 - 第 7 行、第 12 行和第 13 行

附加列 - 第 8 列

缺失数据 - 第 1 行、第 4 行、第 9 行和第 11 行

不完整字段 - 最后 3 行

filename = 'fixed_width_patients_subset_messy.txt';

MATLAB每个字母等宽,等宽文本文件的导入选项对象_第1张图片

检查并捕获等宽文件的属性

等宽文本文件包含按开始位置、变量数目、变量名称和变量宽度组织的表格数据。可以捕获这些属性以及要为变量使用的数据类型。

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 文件的最后三行就属于这种情况。这里,在最后一列的最后一行中,在该字段的头两个位置之后、在到达完整的变量宽度(三个位置)之前,出现了行结束字符。

33877ea90c3f7178b61289b034bf7bf4.png

出现这种不完整字段有时可能意味着出现错误。因此,可以使用 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

你可能感兴趣的:(MATLAB每个字母等宽)