避免使用文本扫描导入非字母数字字符但保留减号

时间:2015-09-14 14:00:15

标签: matlab

我有一个像这样的行的文件:

2015 02 18 08 00 00.067 @ D,+ 000.00,-000.05,+ 000.00,M,+ 335.61,00,@ 22

所以我尝试了以下内容:

 fileID = fopen('150218_120000.00.10m');
       data = textscan(fileID, '%f%f%f%f%f%f%c%f%f%f%c%f%f%f%c%s', 'headerLines', 1, 'delimiter',',' );

 fclose(fileID);

以下可能吗?即保留负号但没有其他非字母数字字符?

2015 02 18 08 00 00.067 D 000.00 -000.05 000.00 M 335.61 00 22

修改

所需的输出是由空格分隔的每个值占用一个单元格。 即2015 | 02 | 18 | 08 |等

编辑2:更多数据

2015 02 18 13 00 00.067 D,-000.19,+000.35,-000.54,M,+341.28,00,26
2015 02 18 13 00 00.167 D,-000.34,+000.27,-000.27,M,+341.51,00,20
2015 02 18 13 00 00.267 D,-000.03,+000.21,-000.01,M,+341.48,00,2E
2015 02 18 13 00 00.367 D,+000.00,-000.14,-000.09,M,+341.36,00,2A
2015 02 18 13 00 00.467 D,+000.11,+000.27,-000.20,M,+341.44,00,22
2015 02 18 13 00 00.567 D,+000.05,+000.64,-000.23,M,+341.49,00,2E

1 个答案:

答案 0 :(得分:2)

回答原始问题

  • 该文件可以包含多行。
  • 所需的输出是文件每一行的字符串。

您可以按照以下方式执行此操作。结果s是字符串的单元格数组,每个字符串对应于原始文件的一行。

s = importdata('file.txt'); %// read each file's line into a cell
s = regexprep(s, '[^\w\.-\s]', ' '); %// replaced unwanted characters by space
s = regexprep(s, '\s+', ' '); %// convert multiple spaces into single spaces

回答已编辑的问题

该文件包含多行。每行应分成子串。 Splliting字符是空格或逗号。我假设文件中的所有行都具有相同的结构(将给出相同数量的子串):

s = importdata('file.txt', ''); %// read each line into a cell
s = regexp(s, '[\s,]', 'split'); %// split at space or comma. Cell array of cell arrays
s = vertcat(s{:});