使用 textscan (Matlab) 读取文本文件后缺少信息

Missing information after reading text file with textscan (Matlab)

我正在尝试读取逗号分隔的文本文件,但结果中缺少信息。

以下是我的文本文件的摘录:

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

我的错误在哪里?

首先你有逗号作为分隔符,最好在 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,:); 

因此,您也会得到一个元胞数组。

给定以下 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 objects.

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

(您可能会看到有关标识符被修复的警告,这是无害的。原因是 header 行中的名称包含空格,而这些在变量名称中无效).

最后我们 select 第一列等于 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