String Matlab:将单元格字符串(逗号分隔)转换为向量
我有一个巨大的csv文件(比如:不止几份文件),我想在Matlab中阅读并处理每个文件。完整读取文件是不可能的,因此我使用以下代码读取每一行:String Matlab:将单元格字符串(逗号分隔)转换为向量,string,matlab,vector,double,type-conversion,String,Matlab,Vector,Double,Type Conversion,我有一个巨大的csv文件(比如:不止几份文件),我想在Matlab中阅读并处理每个文件。完整读取文件是不可能的,因此我使用以下代码读取每一行: fileName = 'input.txt'; inputfile = fopen(fileName); while 1 tline = fgetl(inputfile); if ~ischar(tline) break end end fclose(inputfile); 这将生成一个大小为(1,1)的单元
fileName = 'input.txt';
inputfile = fopen(fileName);
while 1
tline = fgetl(inputfile);
if ~ischar(tline)
break
end
end
fclose(inputfile);
这将生成一个大小为(1,1)的单元格数组,其中行为字符串。我想把这个单元格转换成一个普通的数组,只包含数字。
例如:
input.csv:
0.0,0.0,3.201,0.192
2.0,3.56,0.0,1.192
0.223,0.13,3.201,4.018
Matlab中第一行的最终结果:
A = [0.0,0.0,3.201,0.192]
我尝试用double(tline)转换tline,但这会产生完全不同的结果。还尝试使用正则表达式,但被卡住了。我将所有值拆分为一个数组中的不同单元格。但是用str2double转换成double只会产生NaNs
有什么建议吗?最好没有任何循环,因为读取整个文件已经需要一段时间。试试看
data = dlmread('input.txt',',')
它会做你想做的事情
如果仍要将字符串转换为向量:
line_data = sscanf(line,'%g,',inf)
此代码将读取整个字符串并转换每个数字。请重试
data = dlmread('input.txt',',')
它会做你想做的事情
如果仍要将字符串转换为向量:
line_data = sscanf(line,'%g,',inf)
此代码将读取整个字符串并转换每个数字。您正在查找的
str2num
>> A = '0.0,0.0,3.201,0.192';
>> str2num(A)
ans =
0 0 3.2010 0.1920
>> A = '0.0 0.0 3.201 0.192';
>> str2num(A)
ans =
0 0 3.2010 0.1920
>> A = '0.0 0.0 , 3.201 , 0.192';
>> str2num(A)
ans =
0 0 3.2010 0.1920
e、 输入格式是不可知的
然而,对于您的用例,我不建议这样做。对于你的问题,我愿意
C = dlmread('input.txt',',', [1 1 1 inf]) % for first line
C = dlmread('input.txt',',') % for entire file
或
如果希望所有列都包含在单独的变量中:
a = 0
b = 0
c = 3.201
d = 0.192
或
所有这些都更容易扩展(像这样的东西,不管它们是什么,都会随着时间的推移变得更大:)。尤其是
dlmread
比编写自己的子句更不容易出错,因为空行、缺少值和其他在大多数数据集中非常常见的大麻烦 您正在寻找str2num
>> A = '0.0,0.0,3.201,0.192';
>> str2num(A)
ans =
0 0 3.2010 0.1920
>> A = '0.0 0.0 3.201 0.192';
>> str2num(A)
ans =
0 0 3.2010 0.1920
>> A = '0.0 0.0 , 3.201 , 0.192';
>> str2num(A)
ans =
0 0 3.2010 0.1920
e、 输入格式是不可知的
然而,对于您的用例,我不建议这样做。对于你的问题,我愿意
C = dlmread('input.txt',',', [1 1 1 inf]) % for first line
C = dlmread('input.txt',',') % for entire file
或
如果希望所有列都包含在单独的变量中:
a = 0
b = 0
c = 3.201
d = 0.192
或
所有这些都更容易扩展(像这样的东西,不管它们是什么,都会随着时间的推移变得更大:)。尤其是
dlmread
比编写自己的子句更不容易出错,因为空行、缺少值和其他在大多数数据集中非常常见的大麻烦 您是否尝试过将行
、列
和范围
参数指定为CSV读取?请使用str2num(tline)
而不是str2double
。在这个文件交换项中,有一些关于在MATLAB中处理大型数据集的好建议。您是否尝试过将行
、列
和范围
参数指定为CSV读取?请使用str2num(tline)
而不是str2double
。在这个文件交换项中,有一些关于在MATLAB中处理大型数据集的好建议。这似乎是我问题的完美答案,但是,我无法让'inf'参数工作。。。它给出了一个错误:中冒号运算符的非有限端点或增量index@Tim:呜呜,看来我测试得不够彻底。我现在没有机会,但是你能试试C=dlmread('input.txt',',','1)
?(即,没有向量)或C=dlmread('input.txt',',',',1:10)
(前10行,希望:)我尝试了这两种方法,但都不起作用。我通过手动指定columnrange修复了它,因为我从另一个矩阵知道这一点(尽管这当然不是很模块化)。我还可以通过捕捉每一行来读取文件(因为我不知道行的范围)。这似乎是我问题的完美答案,但是,我无法让'inf'参数工作。。。它给出了一个错误:中冒号运算符的非有限端点或增量index@Tim:呜呜,看来我测试得不够彻底。我现在没有机会,但是你能试试C=dlmread('input.txt',',','1)
?(即,没有向量)或C=dlmread('input.txt',',',',1:10)
(前10行,希望:)我尝试了这两种方法,但都不起作用。我通过手动指定columnrange修复了它,因为我从另一个矩阵知道这一点(尽管这当然不是很模块化)。我还可以通过捕捉每一行来读取文件,以捕捉文件的结尾(因为我不知道行的范围)。