使用 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
我正在尝试读取逗号分隔的文本文件,但结果中缺少信息。
以下是我的文本文件的摘录:
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