【问题标题】:Matlab code - Keep leading zero while extracting numerical data as string from .CSVMatlab 代码 - 从 .CSV 中提取数字数据作为字符串时保持前导零
【发布时间】:2020-04-02 04:30:46
【问题描述】:

我有以 CSV 格式存储的数据。数据包含格式化为文本但没有任何撇号的数值。

我尝试使用 xlsread 导出数据,但 Matlab 会自动删除前导零。是否可以强制 Matlab 将其读取为字符串以保持前导零?

【问题讨论】:

  • 您可能需要使用textscan 之类的东西,这样可以更精确地控制格式。
  • 您能以文本形式分享一些实际的 CSV 示例数据吗?您发布的屏幕截图看起来像 Excel 屏幕截图,并且 Excel 会进行奇怪的格式化操作,从而掩盖原始基础输入格式。

标签: string matlab csv import xlsread


【解决方案1】:

xlsread 有三个输出,第三个是原始数据。使用第三个输出,您将在那里找到文本。然后,您可以使用 str2num 将文本转换为数字数据。

【讨论】:

  • 我已经尝试过了,但是第三个/原始数据也将其检测为数字并自动删除前导零。
【解决方案2】:

如果是 CSV 文件,请勿使用 xlsread。这适用于 Excel (.xls/.xlsx) 文件。如果基础数据实际上主要在 Excel 文件中,则不要将其保存为 CSV;直接读取Excel文件。

您将不得不使用像 textscanfscanf 这样的较低级别的读取例程来读取它。问题是 CSV 文件实际上并不能以不同的方式表示字符串和数字:CSV 文件 only 包含文本数据,因此像 Matlab 这样像数字一样工作的程序必须提供一些“魔法”来确定哪些东西看起来像数字并将这些字符串转换为数字。他们认为你不关心前导零之类的东西,所以他们把它抽象掉了。但在这种情况下,你确实在乎,所以你必须绕过他们的魔法。

别担心; textscanfscanf 易于使用。

做这样的事情:

fid = fopen('myfile.csv');
col_vals = textscan(fid, '%s');
orig_policy_num = col_vals{1};
fclose(fid);

术语说明:您说“数据包含数值”,但数值代表数字,前导零对数字无关紧要;这只是可以写入相同值的不同样式的问题。但是你关心前导零。这意味着这实际上是 text 数据,而不是数字数据。你想这样阅读它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-22
    • 1970-01-01
    • 2015-08-15
    相关资源
    最近更新 更多