matlab - readtable() 函数正在从我的表中删除前三行
问题描述
在编写代码时,我意识到我最近写入 .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() 函数跳过了我表的前三行,那真的会帮助我。
解决方案
您设置的选项错误。首先,默认配置将返回一个单元格表:
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;
到您的代码中可以解决您的问题。
推荐阅读
- json - 如何获取 Spotify 播放列表曲目并解析 JSON?
- git - 拉取请求完成后更改工单状态
- sap-fiori - 在 BSP 应用程序中修改的代码未反映在 SAP FIORI 中。怎么修?
- python - 如何在 django 视图中从浏览器获取图像的 url
- javascript - 将 base64 字符串解码为 xls 文件适用于 Windows,但无法在平板电脑中打开
- python-3.x - scipy.sparse.csr.csr_matrix 未显示在变量资源管理器中
- php - 如何设置
- asp.net-mvc - 以多种日期/时间格式将日期时间从 mvc 转换为 Oracle?
- spring-boot - 为什么H2文件数据库数据每次都被清除
- flutter - 使用 sqflite 数据库退出 Flutter 应用程序