我正在尝试读取逗号分隔的文本文件,但我的结果中缺少信息。
以下是我的文本文件的摘录:
number,datetime start,datetime arrive
4027,25/03/2016 11:20,25/03/2016 11:20
4000,25/03/2016 11:20,25/03/2016 11:20
4027,25/03/2016 11:21,25/03/2016 11:21
4000,25/03/2016 11:21,25/03/2016 11:21
我的代码:
file = fopen('myfile.txt');
TextCell=textscan(file,'%s');
Text=TextCell{1};
fclose(file);
containsStr = ~cellfun('isempty',strfind(Text,'4027'));
FilteredText=Text(containsStr); % filters the strings that contain 4027
获得的结果:
4027,25/03/2016
4027,25/03/2016
预期结果:
4027,25/03/2016 11:20,25/03/2016 11:20
4027,25/03/2016 11:21,25/03/2016 11:21
我的错误在哪里?
答案 0 :(得分:1)
给出以下CSV文件:
number,datetime start,datetime arrive
4027,25/03/2016 11:20,25/03/2016 11:20
4000,25/03/2016 11:20,25/03/2016 11:20
4027,25/03/2016 11:21,25/03/2016 11:21
4000,25/03/2016 11:21,25/03/2016 11:21
我们将数据加载到MATLAB table
中。我们指定格式以将最后两列解析为datetime
个对象。
t = readtable('file.csv', 'FileType','text', 'Delimiter',',', ...
'Format','%f %{dd/MM/yyyy HH:mm}D %{dd/MM/yyyy HH:mm}D');
结果:
>> t
t =
number datetimeStart datetimeArrive
______ ________________ ________________
4027 25/03/2016 11:20 25/03/2016 11:20
4000 25/03/2016 11:20 25/03/2016 11:20
4027 25/03/2016 11:21 25/03/2016 11:21
4000 25/03/2016 11:21 25/03/2016 11:21
(您可能会看到有关标识符被修复的警告,这是无害的。原因是标题行中的名称包含空格,并且这些名称在变量名称中无效。)
最后,我们选择第一列等于4027的行:
>> tt = t(t.number == 4027,:)
tt =
number datetimeStart datetimeArrive
______ ________________ ________________
4027 25/03/2016 11:20 25/03/2016 11:20
4027 25/03/2016 11:21 25/03/2016 11:21
答案 1 :(得分:0)
首先你用逗号作为分隔符,最好在textscan中使用。然后,您应该在文本文件中指定数据列。此外,我将使用CollectOutput选项来获取相同单元格数组中的数据。请检查以下代码:
file = fopen('myfile.txt');
TextCell=textscan(file,'%s %s %s %s %*[^\n]', 'Delimiter',',', 'CollectOutput',1);
Text=TextCell{1};
fclose(file);
containsStr = ~cellfun('isempty',strfind(Text,'4027'));
FilteredText=Text(containsStr,:);
因此,您将获得一个单元格数组。