readtable() 函数正在从我的 table 中删除前三行
The readtable() function is deleting the first three rows from my table
在编写代码时,我意识到我最近写入 .txt 文件的 table 的前 3 行丢失了。我在一个 Matlab 代码文件中创建了 table 并想在不同的 Matlab 代码文件中使用它,所以我使用了 writetable()。然后我在另一个代码文件中使用了 readtable()。
查看我对 table 进行任何修改的所有代码行后,我得出结论,我的问题是由 readtable() 函数直接引起的。然后我写了一个完全独立的测试代码,看看我的怀疑是否正确,是的。
这是我的测试代码:
a = {"30.03.20","20:36","20.5.44.45";"30.03.20","20:36","text";"30.03.20","20:36","text";"30.03.20","20:36","03/30/20"};
a = cell2table(a)
writetable(a)
opts = detectImportOptions("a.txt");
opts = setvartype(opts,'a1','string');
opts = setvartype(opts,'a2','string');
opts = setvartype(opts,'a3','string');
readtable('a.txt',opts)
通过这个测试代码,我看到 readtable('a.txt')
行的输出确实少了几行。我将在下面添加输出的屏幕截图。
现在,我缩小了问题范围。就是不知道怎么解决。
所有这一切中最奇怪的部分是,在我原来的两个代码中,我还有两个 table 正在写入然后读取,他们似乎没有遇到这个问题。
我目前正在处理 detectImportOptions 对象中的选项,看看是否可以解决问题。但是,如果有人经历过这种情况,and/or 知道是什么导致 readtable() 函数跳过我的 table 的前三行,这将真正帮助我。
These are the outputs both of the original table, and the table produced by the readtable() function
您设置的选项有误。首先,默认配置会返回 table 个单元格:
readtable('a.txt')
但是,如果您想指定其他选项,请使用正确的设置:
opts = delimitedTextImportOptions('NumVariables',3,'VariableNamesLine',1,'DataLines',2);
实际上,您要查找的关键字是 'DataLines'
,指定第一行,即数据出现的位置。其他关键字是很好的做法——如果您错过了关键字 'NumVariables'
和 'VariableNamesLine'
(第一个自动为列名编号,而第二个使用什么是写在第一行......在你的情况下两者是相同的)。你会得到与上面相同的结果。
如果您想要特定的数据类型,请使用键 'VariableTypes'
:
opts = delimitedTextImportOptions('NumVariables',3,'VariableNamesLine',1,'DataLines',2,'VariableTypes',{'string','string','string'});
readtable('a.txt',opts)
现在,为什么您的代码无法正常工作?
好吧,您无法检测 数据从哪一行开始。在您的代码中添加 opts.DataLines = 2;
即可解决您的问题。
在编写代码时,我意识到我最近写入 .txt 文件的 table 的前 3 行丢失了。我在一个 Matlab 代码文件中创建了 table 并想在不同的 Matlab 代码文件中使用它,所以我使用了 writetable()。然后我在另一个代码文件中使用了 readtable()。
查看我对 table 进行任何修改的所有代码行后,我得出结论,我的问题是由 readtable() 函数直接引起的。然后我写了一个完全独立的测试代码,看看我的怀疑是否正确,是的。
这是我的测试代码:
a = {"30.03.20","20:36","20.5.44.45";"30.03.20","20:36","text";"30.03.20","20:36","text";"30.03.20","20:36","03/30/20"};
a = cell2table(a)
writetable(a)
opts = detectImportOptions("a.txt");
opts = setvartype(opts,'a1','string');
opts = setvartype(opts,'a2','string');
opts = setvartype(opts,'a3','string');
readtable('a.txt',opts)
通过这个测试代码,我看到 readtable('a.txt')
行的输出确实少了几行。我将在下面添加输出的屏幕截图。
现在,我缩小了问题范围。就是不知道怎么解决。
所有这一切中最奇怪的部分是,在我原来的两个代码中,我还有两个 table 正在写入然后读取,他们似乎没有遇到这个问题。
我目前正在处理 detectImportOptions 对象中的选项,看看是否可以解决问题。但是,如果有人经历过这种情况,and/or 知道是什么导致 readtable() 函数跳过我的 table 的前三行,这将真正帮助我。
These are the outputs both of the original table, and the table produced by the readtable() function
您设置的选项有误。首先,默认配置会返回 table 个单元格:
readtable('a.txt')
但是,如果您想指定其他选项,请使用正确的设置:
opts = delimitedTextImportOptions('NumVariables',3,'VariableNamesLine',1,'DataLines',2);
实际上,您要查找的关键字是 'DataLines'
,指定第一行,即数据出现的位置。其他关键字是很好的做法——如果您错过了关键字 'NumVariables'
和 'VariableNamesLine'
(第一个自动为列名编号,而第二个使用什么是写在第一行......在你的情况下两者是相同的)。你会得到与上面相同的结果。
如果您想要特定的数据类型,请使用键 'VariableTypes'
:
opts = delimitedTextImportOptions('NumVariables',3,'VariableNamesLine',1,'DataLines',2,'VariableTypes',{'string','string','string'});
readtable('a.txt',opts)
现在,为什么您的代码无法正常工作?
好吧,您无法检测 数据从哪一行开始。在您的代码中添加 opts.DataLines = 2;
即可解决您的问题。