Вы можете легко сделать это с помощью регулярных выражений. Просто найдите все части строки, которые начинаются с [
и заканчиваются на ]
и заменяют их нулевой строкой, или ''
. Это можно сделать с помощью regexprep
.
Таким образом, сначала прочитайте весь текстовый файл, затем устраните ненужные части. Предположим, что ваш текстовый файл находится в файле с именем text.txt
, сделать что-то вроде этого:
fid = fopen('text.txt', 'r');
out = textscan(fid, '%s', 'delimiter', '\n');
out = regexprep(out{1}, '\s*\[.*\]\s*', '');
Первая строка кода открывает файл для чтения. Следующая часть читается в каждой строке вашего текста в массив ячеек, где вывод представляет собой массив вложенных ячеек в 1 элемент, но каждая ячейка внутри этого является отдельной строкой вашего текстового файла. Последняя строка обращается к этому единственному вложенному элементу и находит ту часть строки, где есть пустое пространство, существа с символом [
, имеет кучу символов внутри, а затем заканчивается символом ]
и снова немного белого пробела после этого. Мы находим эти части текста и заменяем их нулевой строкой. Это эффективно дает вам только ту часть текста, которую вы ищете.
Размещая пример текста в файле с именем text.txt
, это то, что я получаю:
out =
'REFA,2,5,600,'
'REFB,1,3,'
'REFA,2,10,1200,'
'REFB,1,6,'
Теперь, если вы просто хотите, чтобы получить только числовые значения, вы можете просто использовать индексацию:
out = cellfun(@(x) x(6:end-1), out, 'uni', 0);
Теперь, чтобы получить эту работу с кодом (в комментариях), попробуйте следующее:
fileID = fopen('stack.txt');
D = textscan(fileID, '%s', 'delimiter', '\n');
fclose(fileID);
D = regexprep(D{1}, '\s*\[.*\]\s*', '');
D = cellfun(@(x) x(6:end-1), D, 'uni', 0);
%// Extract out the numbers now
numbers = regexp(D, '(\d+)*', 'tokens');
%// Only look at lines that have three numbers
idx = cellfun(@numel, numbers) == 3;
%// Extract out just those lines
numbers_extract = numbers(idx);
%// Convert from string to numbers
REFA.pkttype = cellfun(@(x) x(1), numbers_extract);
REFA.datalength = cellfun(@(x) x(2), numbers_extract);
REFA.ticks = cellfun(@(x) x(3), numbers_extract);
@ Yaant3y - я добавил больше кода, чтобы просто получить цифры. Надеюсь, это поможет! – rayryeng
Спасибо @rayryeng, ваше решение избавляется от []. Но то, что я пытался сделать, это получить результат, полученный этим кодом. 'fileID = fopen ('stack.txt'); D = textscan (fileID, '% s% u8% u8% u16', 'Delimiter', ','); fclose (fileID); REFA.pkttype = D {2} (strcmp (D {1}, 'REFA')); REFA.datalength = D {3} (strcmp (D {1}, 'REFA')); REFA.ticks = D {4} (strcmp (D {1}, 'REFA')); ' Этот код работал, как только это было, когда я редактировал файл вручную как REFA, 2,5,600, REFB, 1,3, REFA, 2,10,1200, REFB, 1,6, перед тем, как получить помощь. Итак, как я могу объединить ваш код с этим, чтобы получить тот же результат? – Yaant3y
@ Yaant3y - Попробуйте это и посмотрите, работает ли он – rayryeng