Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在matlab中为.dat文件指定十进制分隔符_Matlab - Fatal编程技术网

在matlab中为.dat文件指定十进制分隔符

在matlab中为.dat文件指定十进制分隔符,matlab,Matlab,我有一堆.dat文件,其中十进制分隔符是逗号而不是点。MATLAB中是否有函数将逗号设置为分隔符 您必须以文本形式读取数据(使用textscan,textdread,dlmread,)并转换为数字 假设您已将数据读取到单元格数组中,每个单元格中都有一个数字: >> C = {'1,2345','3,14159','2,7183','1,4142','0,7071'} C = '1,2345' '3,14159' '2,7183' '1,4142' '

我有一堆.dat文件,其中十进制分隔符是逗号而不是点。MATLAB中是否有函数将逗号设置为分隔符

您必须以文本形式读取数据(使用
textscan
textdread
dlmread
,)并转换为数字

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

>> C = {'1,2345','3,14159','2,7183','1,4142','0,7071'}
C = 
    '1,2345'    '3,14159'    '2,7183'    '1,4142'    '0,7071'
按如下方式使用strrep和str2double:

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

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

1,2 3,4
5,6 7,8
这里有一个空格作为分隔符。默认情况下,
textscan
使用空格作为分隔符,这样就可以了。您需要在下面更改的只是数据中列数的格式说明符,方法是对每列重复
%s
(例如,这里我们需要
'%s%s'
两列):

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

如何将这些文件读入Matlab?@lnk引用的“副本”建议使用一些第三方
txt2mat
程序,这可能是严重的过度使用。有关将读取的文本数据转换为单元格数组的简单方法,请参见我的答案。因此,我有文件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如果这符合您的需要,您能接受答案吗?谢谢。:)是的,它工作得很好!谢谢
>> C = [C{:}]
C = 
    '1,2'    '3,4'
    '5,6'    '7,8'
>> x = str2double(strrep(C,',','.'))
x =
    1.2000    3.4000
    5.6000    7.8000