readtable() 函数正在从我的表中删除前三行

Posted

技术标签:

【中文标题】readtable() 函数正在从我的表中删除前三行【英文标题】:The readtable() function is deleting the first three rows from my table 【发布时间】:2020-08-12 21:50:03 【问题描述】:

在编写代码时,我意识到我最近写入 .txt 文件的表中的前 3 行丢失了。我在 Matlab 代码文件中创建了表,并想在不同的 Matlab 代码文件中使用它,所以我使用了 writetable()。然后我在另一个代码文件中使用了 readtable()。

在查看了我对表格进行任何修改的所有代码行之后,我得出结论,我的问题是由 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') 行的输出确实缺少几行。我将在下面添加输出的屏幕截图。

现在,我已经缩小了问题的范围。就是不知道怎么解决。

所有这一切中最奇怪的部分是,在我原来的两个代码中,我还有两个表被写入然后读取,它们似乎没有遇到这个问题。

我目前正在处理detectImportOptions 对象中的选项,看看是否可以解决问题。但是,如果有人遇到过这种情况,并且/或者知道是什么导致 readtable() 函数跳过了我的表的前三行,那真的会帮到我。

These are the outputs both of the original table, and the table produced by the readtable() function

【问题讨论】:

【参考方案1】:

您设置的选项错误。首先,默认配置会返回一个单元格表:

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; 添加到您的代码中可以解决您的问题。

【讨论】:

谢谢麦克斯!那解决了它。但是,我只是想补充一下默认方式,readtable('a.txt') 你说应该可以工作,但没有。这是我最初测试的。这就是我首先开始使用detectImportOptions() 函数的原因。但除此之外,非常感谢您的帮助。祝你有美好的一天! 啊,我明白了。我正在使用 R2020a。

以上是关于readtable() 函数正在从我的表中删除前三行的主要内容,如果未能解决你的问题,请参考以下文章

如何从我的 MySQL 表中删除约束?

Rails迁移:从表中删除列

在Mysql中使用SN从表中删除许多行

试图从我的模式中删除所有没有行的表?

需要一个查询来从我的 sql 中的表中获取不同的数据

从视图及其所有相关表中删除记录