首页 > 解决方案 > 使用值中的空格逐行导入 ASCII 制表符分隔

问题描述

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

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

标签: matlabcsv

解决方案


使用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 代码将使您不必怀疑它是否被正确解释......


推荐阅读