【问题标题】:Specify decimal separator for .dat file in matlab [duplicate]在matlab中为.dat文件指定小数分隔符[重复]
【发布时间】:2013-12-12 22:38:43
【问题描述】:

我有一堆 .dat 文件,其中小数点分隔符是逗号而不是点。 MATLAB中是否有任何函数可以将逗号设置为分隔符?

【问题讨论】:

  • 你打算如何将这些文件读入 Matlab?
  • @lnk 引用的“重复”建议使用一些第三方txt2mat 程序,这可能是严重的矫枉过正。请参阅我的答案,了解将您读取的文本数据转换为元胞数组的简单方法。

标签: matlab


【解决方案1】:

您必须以文本形式读取数据(textscantextreaddlmreadetc.)并转换为数字。

假设您已将数据读入一个单元格数组,每个单元格中有一个数字:

>> C = {'1,2345','3,14159','2,7183','1,4142','0,7071'}
C = 
    '1,2345'    '3,14159'    '2,7183'    '1,4142'    '0,7071'

如下使用strrepstr2double

>> x = str2double(strrep(C,',','.'))
x =
    1.2345    3.1416    2.7183    1.4142    0.7071

对于来自 cmets 的示例数据,您有一个文件“1.dat”,其格式类似于:

1,2 3,4
5,6 7,8

这里有一个空格作为分隔符。默认情况下,textscan 使用空格作为分隔符,这很好。您需要在下面更改的是数据中列数的格式说明符,方法是为每列重复 %s(例如,这里我们需要两列 '%s%s'):

>> fid = fopen('1.dat','r');
>> C = textscan(fid,'%s%s')
C = 
    {2x1 cell}    {2x1 cell}
>> fclose(fid);

textscan 的输出是由空格分隔的每一列的元胞数组。将列组合成单个元胞数组并运行命令以转换为数字:

>> C = [C{:}]
C = 
    '1,2'    '3,4'
    '5,6'    '7,8'
>> x = str2double(strrep(C,',','.'))
x =
    1.2000    3.4000
    5.6000    7.8000

【讨论】:

  • 所以,我有文件 1.dat,其中包含:
  • 两行:1,2 3,4 '\r'5,6 7,8 我要获取矩阵M=[1.2 3.4; 3.4 7.8;]。使用函数 csvread('1.dat') 我得到: 1 2 3; 4 0 0
  • @lnk 顾名思义,csvread 使用逗号作为值之间的分隔符,因此您不想使用该函数。请改用textscan,查看更新答案。
  • @lnk 如果这符合您的需要,您能接受答案吗?谢谢。 :)
  • 是的,效果很好!谢谢!!!
猜你喜欢
  • 2014-06-24
  • 1970-01-01
  • 2017-02-07
  • 1970-01-01
  • 1970-01-01
  • 2015-11-15
  • 2012-07-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多