使用值中的空格逐行导入ASCII制表符分隔

问题描述 投票:1回答:3

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'...

(我必须使用自定义解析器,因为一个文件中有许多不同类型的数据,每个文件都有不同数量的列和不同的标题。)

matlab tab-delimited
3个回答
1
投票

类似的问题,这一个here。你可以尝试:

C = textscan(fopen(filename),'%s %d %s %d');

该行以单元格C为所有值。查看Matlab的textscan文档。


1
投票

使用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代码将使您不会想知道它是否被正确解释...


0
投票

这将适用于按标签分割:

splitted = strsplit(aLineOfText, '\t');

(它以不同的方式处理行,让我重新编写脚本,但似乎工作正常。)

© www.soinside.com 2019 - 2024. All rights reserved.