将文本文件中逗号分隔格式的复数读入MATLAB变量
我有一个文本文件,其格式如下所示,带有复数将文本文件中逗号分隔格式的复数读入MATLAB变量,matlab,Matlab,我有一个文本文件,其格式如下所示,带有复数 (1.00000000,-0.00000000) (0.66914010,0.74313629) (-0.10450304,0.99452454) (-0.80899447,0.58781630) (-0.97815824,-0.20786168) (-0.49997231,-0.86604136) (0.30903524,-0.95105058) (0.91354805,-0.40673080) (0.91354805,0.40673080) (0.
(1.00000000,-0.00000000)
(0.66914010,0.74313629)
(-0.10450304,0.99452454)
(-0.80899447,0.58781630)
(-0.97815824,-0.20786168)
(-0.49997231,-0.86604136)
(0.30903524,-0.95105058)
(0.91354805,-0.40673080)
(0.91354805,0.40673080)
(0.30894405,0.95108020)
fscanf(fileID,'%f')分别读取交替的实部和复部,但最终大小不匹配。例如,我的文件包含10000个复数,因此我们希望scan语句的输出返回20000个值,但我得到的是47104个值
fscanf(fileID,(%f,%f)返回一个空数组
请为上述内容建议正确的单线实施。这可能不是最快的方法,但很简单:
file.txt
更改为文本文件的名称。但是,如果您正在使用Windows(感谢Luis Mendo!),则需要将\n
分隔符更改为\r
,以表示回车,而不是换行符:
fid = fopen('file.txt');
out = textscan(fid, '(%f,%f)\r'); %// Change
result = [out{1} + i*out{2}];
fclose(fid);
首先使用打开文件,然后将实部和虚部作为两个单独的单元数组读入。(%f,%f)
格式化字符串在一对()
大括号之间查找两个数字,并用逗号分隔。\n
(或\r
如果您使用的是Windows)确保我们每行只查找一个这样的模式
一旦你这样做了,我们将第一个单元格解压,并将其与解压后的第二个单元格相加,然后将其乘以i
,因为这是一个复杂的部分。结果将是一个复数数组。确保完成后关闭该文件,并且该操作已完成
我得到以下信息:
>> format long g;
>> result
result =
1 + 0i
0.6691401 + 0.74313629i
-0.10450304 + 0.99452454i
-0.80899447 + 0.5878163i
-0.97815824 - 0.20786168i
-0.49997231 - 0.86604136i
0.30903524 - 0.95105058i
0.91354805 - 0.4067308i
0.91354805 + 0.4067308i
0.30894405 + 0.9510802i
这要简单得多!我找到了。我需要将
\n
更改为\r
。我在窗户上。也许可以把这个加到你的答案上?@LuisMendo-啊,是的。我忘了那个lol。是的,我会补充。谢谢。我得到了输入输出和结果的空值。这意味着(1)您没有指定正确的文本文件名,或者(2)您没有正确格式化文本文件。我假设你的文本文件是你在文章中指定的格式。如果这对我和路易斯·门多有效,那么你做错了什么。另外,请确保您看到我的最新编辑以适应Windows。我在Mac OS上,忘记了您需要执行\r
来表示回车,而不是格式说明符中的\n
。我喜欢您使用regexp
!我已回滚您的更改。你绝对应该在你的尝试中离开,因为它向人们展示了你的尝试。不这样做可能会让人们对你的问题投反对票,因为他们并不清楚你尝试了什么。希望你同意!我删除了blockquotes之后的联系人,因为它完全不相关。获取错误数量的值是因为我读取了错误的文件。啊,我明白了。好的,这取决于你是否想保留我的更改。不管怎样,我很高兴我帮你解决了这个问题!
fid = fopen('file.txt');
out = textscan(fid, '(%f,%f)\n');
result = [out{1} + i*out{2}];
fclose(fid);
fid = fopen('file.txt');
out = textscan(fid, '(%f,%f)\r'); %// Change
result = [out{1} + i*out{2}];
fclose(fid);
>> format long g;
>> result
result =
1 + 0i
0.6691401 + 0.74313629i
-0.10450304 + 0.99452454i
-0.80899447 + 0.5878163i
-0.97815824 - 0.20786168i
-0.49997231 - 0.86604136i
0.30903524 - 0.95105058i
0.91354805 - 0.4067308i
0.91354805 + 0.4067308i
0.30894405 + 0.9510802i