Matlab 没有正确拆分用制表符分隔的行,单词之间用空格分隔。我如何让它工作?
例如,假设我有一个文件,其中包含我要提取的这两行,第一行是标题行,第二行是一行数据:
#DATA_NAME field1 field2 field3
DATA_NAME 14 A String 34.1
(分隔符是制表符,但我在这里显示多个空格(
我编写了一个自定义解析器,应该生成一个包含以下内容的表:
field1 field2 field3
______ ______ ______
14 A String 34.1
我看到的是这样的:
field1 field2 field3
______ ______ ______
14 A String
我有一个使用 split()
函数与 fgetl
逐行进行的解决方案,如果条目中没有空格,则可以工作。行为:
splitted = split(line, 't')
似乎不起作用。我做了一些检查,分隔符没有=='\t'...
(我必须使用我的自定义解析器,因为一个文件中有很多不同类型的数据,每个都有不同数量的列和不同的标题。
与这里的这个问题类似。你可以试试:
C = textscan(fopen(filename),'%s %d %s %d');
此行显示包含所有值的单元格 C。查看 Matlab 的文本扫描文档。
使用 char(09)
而不是 't'
我不能准确地列出它们,但我注意到一些 Matlab 字符串解析器将't'
识别为正确的 TAB 字符,但其他一些则无法识别它并将其视为 2 个单独的字符''
和't'
。
例:
>> double('t')
ans =
92 116
即使过去使用 textscan
,这也给我带来了麻烦,所以现在除了我知道它有效的fprintf
,在其他任何地方我总是使用 ascii 代码09
作为制表符,而不是速记符号't'
。
例如:
tabc = char(09) ;
C= textscan( s , '%s' , 'delimiter',tabc ) ; % or in any other function using 'delimiters'
并演示第一个示例:
>> double('t')
ans =
92 116
>> double(tabc)
ans =
9
有时它没有区别,但是如果您在处理 TAB 字符时遇到问题,使用确切的 ascii 代码将使您免于怀疑它是否已被正确解释......
这将适用于按选项卡拆分:
splitted = strsplit(aLineOfText, 't');
(它以不同的方式处理台词,让我重新编写脚本,但似乎工作正常。