如何使用textscan()从MATLAB中的.txt文件中读取逗号分隔值?

时间:2016-02-08 17:34:47

标签: matlab comma textscan

我有一个.txt文件,其行包含三个元素,一个单词和两个数字,用逗号分隔。

例如:

a,142,5
aa,3,0
abb,5,0
ability,3,0
about,2,0

我想读取文件并将单词放在一个变量中,第一个数字放在另一个变量中,第二个数字放在另一个变量中但是我遇到了textscan的问题。

这是我到目前为止所做的:

File = [LOCAL_DIR 'filetoread.txt'];
FID_File = fopen(File,'r');
[words,var1,var2] = textscan(File,'%s %f %f','Delimiter',',');
fclose(FID_File);

我似乎无法弄清楚如何使用textscan分隔符。

1 个答案:

答案 0 :(得分:3)

霍克勒确实是对的。首先需要使用fopen打开文件,该文件提供指向实际文件的文件ID /指针。然后,您可以将其与textscan一起使用。此外,您实际上只需要一个输出变量,因为一旦您使用textscan,每个“列”将作为单独的列放置在单元格数组中。您还需要将分隔符指定为,字符,因为这是用于在列之间分隔的内容。这是通过使用Delimiter中的textscan选项完成的,并将,字符指定为分隔符。然后,在使用fclose完成后,您将关闭该文件。

因此,您只需执行此操作:

File = [LOCAL_DIR 'filetoread.txt'];
f = fopen(File, 'r');
C = textscan(f, '%s%f%f', 'Delimiter', ',');
fclose(f);

请注意格式化字符串没有空格,因为分隔符标志将负责该工作。不要添加任何空格。 C将包含列的单元格数组。现在,如果要将列拆分为单独的变量,只需访问正确的单元格:

names = C{1};
num1 = C{2};
num2 = C{3};

通过将您在帖子中提供的文字放到名为filetoread.txt的文件中,这些变量就是现在的样子:

>> names

names = 

    'a'
    'aa'
    'abb'
    'ability'
    'about'

>> num1

num1 =

   142
     3
     5
     3
     2

>> num2

num2 =

     5
     0
     0
     0
     0

请注意names是一个名称的单元格数组,因此只需执行n = names{ii};即可访问正确的名称,其中ii是您要访问的名称。您可以使用常规索引表示法(即n = num1(ii);n = num2(ii);)访问其他两个变量中的值。