Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Matlab中检索文本文件内容信息_Matlab - Fatal编程技术网

在Matlab中检索文本文件内容信息

在Matlab中检索文本文件内容信息,matlab,Matlab,我有一个包含300行的.txt文件。例如,第一行是: ANSWER: correct: yes, time: 6.880674, guess: Lay, action: Lay, file: 16 或者第二行是: ANSWER: correct: no, time: 7.150422, guess: Put on top, action: Stir, file: 18 只有“时间”和“文件”值是数字,其他值是字符串 我想将整个300行的“correct”、“time”、“guess”、“ac

我有一个包含300行的.txt文件。例如,第一行是:

ANSWER: correct: yes, time: 6.880674, guess: Lay, action: Lay, file: 16
或者第二行是:

ANSWER: correct: no, time: 7.150422, guess: Put on top, action: Stir, file: 18
只有“时间”和“文件”值是数字,其他值是字符串

我想将整个300行的“correct”、“time”、“guess”、“action”和“file”的值存储在不同的变量中(比如一些数组)


如何在Matlab中执行此操作?

使用
fgetl
获取文件的一行,同时
循环读取所有行

对于每一行,使用
regexp
将字符串按
分隔符划分为单元格。然后,使用
strip
删除每个单元格的前导空格和尾随空格

以下是解决方案:

f = fopen('a.txt');

aline = fgetl(f);
i = 1;
while ischar(aline)
    content = strip(regexp(aline,':|,','split'));
    correct{i} = content{3};
    time(i) = str2double(content{5});
    guess{i}= content{7};
    action{i} = content{9};
    file(i) = str2double(content{11});
    i = i + 1;
    aline = fgetl(f);
end

fclose(f);
例如:

假设一个.txt文件如下所示

ANSWER: correct: yes, time: 6.880674, guess: Lay, action: Lay, file: 16
ANSWER: correct: no, time: 7.150422, guess: Put on top, action: Stir, file: 18
执行脚本后,将显示结果

correct =
  1×2 cell array
    'yes'    'no'

time =
    6.8807    7.1504

guess =
  1×2 cell array
    'Lay'    'Put on top'

action =
  1×2 cell array
    'Lay'    'Stir'

file =
    16    18

使用
fgetl
获取文件的一行,使用
while
循环读取所有行

对于每一行,使用
regexp
将字符串按
分隔符划分为单元格。然后,使用
strip
删除每个单元格的前导空格和尾随空格

以下是解决方案:

f = fopen('a.txt');

aline = fgetl(f);
i = 1;
while ischar(aline)
    content = strip(regexp(aline,':|,','split'));
    correct{i} = content{3};
    time(i) = str2double(content{5});
    guess{i}= content{7};
    action{i} = content{9};
    file(i) = str2double(content{11});
    i = i + 1;
    aline = fgetl(f);
end

fclose(f);
例如:

假设一个.txt文件如下所示

ANSWER: correct: yes, time: 6.880674, guess: Lay, action: Lay, file: 16
ANSWER: correct: no, time: 7.150422, guess: Put on top, action: Stir, file: 18
执行脚本后,将显示结果

correct =
  1×2 cell array
    'yes'    'no'

time =
    6.8807    7.1504

guess =
  1×2 cell array
    'Lay'    'Put on top'

action =
  1×2 cell array
    'Lay'    'Stir'

file =
    16    18
备选案文1: 您可以使用以下选项:

其中,
fileID
是通过获取的文件标识符

备选案文2: 另一个选项是使用上述格式(直接使用文件名,无文件ID):

结果(忽略这些值,因为我在玩这个示例时稍微弄乱了它):

选项2的优点是表格比单元格数组(是
textscan
的输出)更能保存这些数据。

选项1: 您可以使用以下选项:

其中,
fileID
是通过获取的文件标识符

备选案文2: 另一个选项是使用上述格式(直接使用文件名,无文件ID):

结果(忽略这些值,因为我在玩这个示例时稍微弄乱了它):


选项2的优点是表格比单元格数组(它是
textscan
的输出)更能保存这些数据。

学到了一些新东西。
textscan
非常优雅。谢谢你的回答。当我使用“选项1”时,数据将以这样的形式出现:data={1x1 cell}[6.8807]{1x1 cell}{1x1 cell}[0x1 double],但如何从这些数据中检索时间、正确性等信息?首先,最好使用选项2。其次,您应该为数据中的每个字段键入:
correct=data{1}
time=data{2}
等等,直到5(文件)。非常感谢您的帮助和建议:)您必须检查您的数据格式是否正确,与上面所写的格式完全相同。另一个选择是编码问题,但从这个错误中的信息很难判断。学到了一些新的东西。
textscan
非常优雅。谢谢你的回答。当我使用“选项1”时,数据将以这样的形式出现:data={1x1 cell}[6.8807]{1x1 cell}{1x1 cell}[0x1 double],但如何从这些数据中检索时间、正确性等信息?首先,最好使用选项2。其次,您应该为数据中的每个字段键入:
correct=data{1}
time=data{2}
等等,直到5(文件)。非常感谢您的帮助和建议:)您必须检查您的数据格式是否正确,与上面所写的格式完全相同。另一个选择是编码问题,但很难从这个错误中的信息来判断。