Я пытаюсь заставить некоторую логику работать с некоторым устаревшим кодом Matlab. Я подумал, что проще всего сделать так, чтобы данные выглядели так же, как ожидает код.
Я читаю соответствующие данные из файла CSV, это довольно просто - но формат идентификаторов изменилсяот простого числа до идентификатора вида [YY, ZZZZ].
Например, «предыдущие» данные CSV выглядели так:
1,Simple,Data
2,More,Data-Dash-Data
3,Even,More
4,Really,More
«Новые» данные CSVвыглядит так:
[01,0001],Simple,Data
[02,1001],More,Data-Dash-Data
[03,9876],Even,More
[04,1234],Really,More
Ранее для чтения данных использовалась эта логика:
fid = fopen(fileName);
data = textscan(fid,'%s%s%s%*s','Delimiter',',');
Когда это было сделано с «предыдущими» данными CSV, возвращались данные, которыевыглядят так:
data =
1×3 cell array
{4×1 cell} {4×1 cell} {4×1 cell}
Затем ячейки выглядят следующим образом:
K>> data{:}
ans =
4×1 cell array
'1'
'2'
'3'
'4'
ans =
4×1 cell array
'Simple'
'More'
'Even'
'Data'
ans =
4×1 cell array
'Data'
'Data-Dash-Data'
'More'
'Data'
Поэтому, чтобы обработать идентификатор формы [YY, ZZZZ], мне пришлось изменить текстовое сканированиелогика для обработки нового формата идентификатора, который мы используем. Для этого я использую функцию регулярного выражения:
fid = fopen(fileName);
rawData = textscan(fid,'%s','Delimiter','\n');
data = regexp(rawData{1},'[ \-\/\w]*([\[][^\)\]]*[\]])?', 'match')
Затем, после чтения данных, я получаю данные, отформатированные так:
K>> data
data =
4×1 cell array
{1×3 cell}
{1×3 cell}
{1×3 cell}
{1×3 cell}
K>> data{:}
ans =
1×3 cell array
'[01,0001]' 'Simple' 'Data'
ans =
1×3 cell array
'[02,1001]' 'More' 'Data-Dash-Data'
ans =
1×3 cell array
'[03,9876]' 'Even' 'More'
ans =
1×3 cell array
'[04,1234]' 'Really' 'More'
ТакВы можете видеть, что в нем содержатся правильные данные - но данные выложены по-другому, что нарушает устаревший код. Поэтому мой вопрос заключается в том, как я могу сделать так, чтобы «новые» данные выкладывались так, как они исходили из логики «textcan»:
data =
1×3 cell array
{4×1 cell} {4×1 cell} {4×1 cell}