Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/13.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/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变量_Matlab - Fatal编程技术网

将文本文件中逗号分隔格式的复数读入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