gpt4 book ai didi

csv - Octave - dlmread 和 csvread 将第一个值转换为零

转载 作者:行者123 更新时间:2023-12-04 08:24:43 27 4
gpt4 key购买 nike

当我尝试在 Octave 中读取 csv 文件时,我意识到它的第一个值被转换为零。我都试过了 csvreaddlmread我没有收到任何错误。我可以在纯文本编辑器中打开该文件,并且可以在那里看到正确的值。据我所知,csv 文件中没有有趣的隐藏字符、空格或类似字符。文件也只包含数字。我觉得唯一可能重要的是我有五个列/组,每个列/组中都有不同数量的值。
我浏览了 Octave Forge 上的命令文档,但不知道是什么原因造成的。有谁知道我可以解决什么问题?
为了说明这个问题,如果我尝试加载一个包含内容的文件:

1.1,2.1,3.1,4.1,5.1 
,2.2,3.2,4.2,5.2
,2.3,3.3,4.3,
,,3.4,4.4
,,3.5,
命令窗口将返回:
0.0,2.1,3.1,4.1,5.1 
,2.2,3.2,4.2,5.2
,2.3,3.3,4.3,
,,3.4,4.4
,,3.5,
(小数点后有附加的尾随零)。
我使用的命令语法是:
dt = csvread("FileName.csv")
dt = dlmread("FileName.csv",",")
他们都返回相同的。

最佳答案

您的 csv 文件包含 Byte Order Mark就在第一个数字之前。如果您在十六进制编辑器中打开文件,您可以确认这一点,您将在数字开始之前看到序列 EF BB BF。
这导致第一个条目被解释为“字符串”,并且由于字符串是根据字符串序列的“前面”是否有数字来解析的,因此将其解析为数字零。 (另请参阅 this answer 有关如何解析 csv 条目的更多详细信息)。
在我的文本编辑器中,如果我从文件的左上角开始,然后按一次右箭头键,您可以看出光标没有移动(意味着我刚刚越过了不可见的字节顺序标记,这需要无可见空间)。此时按退格键删除字节顺序标记可以正确读取 csv。或者,您可能必须在十六进制编辑器中修复您的文件,或找到其他方法将其转换为正确的 Ascii 文件(或没有字节顺序标记的 UTF)。
此外,可能值得检查此文件是如何生成的;如果您在该过程中有任何控制权,也许您可​​以找到为什么首先放置此标记并阻止它。例如,如果这是从 Excel 导出的,您可以选择普通的“csv”格式而不是“utf-8 csv”。
更新
其实这个问题好像已经作为bug提交了,在octave的开发分支中修复了。见 #58813 :)

关于csv - Octave - dlmread 和 csvread 将第一个值转换为零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65324836/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com