String MATLAB与GNU倍频程文本扫描视差
我希望在不保存文件的情况下从.dat文件中读取一些数据。为此,我的代码如下所示:String MATLAB与GNU倍频程文本扫描视差,string,matlab,octave,delimiter,textscan,String,Matlab,Octave,Delimiter,Textscan,我希望在不保存文件的情况下从.dat文件中读取一些数据。为此,我的代码如下所示: urlsearch= 'http://minorplanetcenter.net/db_search/show_object?utf8=&object_id=2005+PM'; url= 'http://minorplanetcenter.net/tmp/2005_PM.dat'; urlmidstep=urlread(urlsearch); urldata=urlread(url); received
urlsearch= 'http://minorplanetcenter.net/db_search/show_object?utf8=&object_id=2005+PM';
url= 'http://minorplanetcenter.net/tmp/2005_PM.dat';
urlmidstep=urlread(urlsearch);
urldata=urlread(url);
received= textscan(urldata , '%5s %7s %1s %1s %1s %17s %12s %12s %9s %6s %6s %3s ' ,'delimiter', '', 'whitespace', '');
data_received = received{:}
urlmidstep
的功能只是执行“搜索”,以便能够创建临时的.dat文件。然后,该数据存储在长字符数组urldata
中。然后,当我在MATLAB中使用textscan
时,我会根据需要得到12列,这些列存储在一个单元格数组接收到的数据中
但是,在八度音阶中,我收到了各种警告消息:警告:stread:字段宽度“%5s”(fmt规范#1)超出了实际字数限制
(对于各种字段宽度)。我的问题是,为什么我的结果在八度音阶上不同,我如何解决这个问题?Octave的行为不应该和MATLAB一样吗,因为在理论上,任何差异都应该作为bug处理
当然,指定字符串的宽度并将分隔符和空白输入参数保留为空应该告诉函数只处理字符串的宽度,允许空格成为有效字符
任何帮助都将不胜感激。I thinhktextscan
在MATLAB和Octave中的工作方式不同。为了举例说明,让我们简化这个例子。守则:
test_line = 'K05P00M C2003 01 28.38344309 37 57.87 +11 05 14.9 n~1HzV645';
test = textscan(test_line,'%5s','delimiter','');
test{:}
将在MATLAB中产生以下结果:
>> test{:}
ans =
'K05P0'
'0M C'
'2003 '
'01 28'
'.3834'
'4309 '
'37 57'
'.87 +'
'11 05'
'14.9 '
'n~1Hz'
'V645'
而在八度音阶中,你可以得到:
>> test{:}
ans =
{
[1,1] = K05P0
[2,1] = C2003
[3,1] = 01
[4,1] = 28.38
[5,1] = 37
[6,1] = 57.87
[7,1] = +11
[8,1] = 05
[9,1] = 14.9
[10,1] = n~1Hz
}
因此,它看起来像是八度跳转到下一个单词并丢弃当前单词中的任何剩余字符,而MATLAB将整个字符串视为一个连续单词
我不知道这是为什么,哪一个是正确的,但希望它能为你指明正确的方向,让你理解正在发生的事情。您可以尝试添加分隔符
,查看它对结果的影响