Как я прочитаю в серии чисел, использующих «Textscan» в MatLab, если файл в основном текст?
Вопрос
У меня есть текстовый файл, который имеет строку из 3 чисел, которые мне нужно читать в MATLAB.
Например:
#######################
#
#
# Text Text Text
#
#
#######################
Blah blah blah = ####
Blah blah blah = ####
Blah blah blah = ####
Blah blah blah = ####
Blah blah blah = ####
Blah blah blah = ####
I_NEED_THIS_STRING = 1234.5 6789.0 1234.5 !Comment blah blah blah
Мне нужно прочитать в этих 3 номерах в массиве.
ПОЖАЛУЙСТА ПОМОГИ.
Спасибо
Решение
Если большая часть файла не имеет значения в вашем приложении, я предлагаю предварительно обработать ваш любимый язык сценариев или командной строки, чтобы найти соответствующие линии и использовать Textscan () на этом.
Например, из приглашения оболочки:
grep ^I_NEED_THIS_STRING infile > outfile
В Matlab:
fid = fopen('outfile');
C = textscan(fid, 'I_NEED_THIS_STRING = %f %f %f')
fclose(fid)
Увидеть Textscan Документация Больше подробностей.
Другие советы
Альтернатива - использовать ImportData. Чтобы прочитать весь файл в массив клеток строк (с одной строкой на ячейку), затем используйте Strmatch. Чтобы найти ячейку, которая содержит строку 'I_NEED_THIS_STRING'
, Затем используйте SSCANF. Чтобы извлечь 3 значения из этой клетки:
>> data = importdata('mostly_useless_text.txt','\n'); %# Load the data
>> index = strmatch('I_NEED_THIS_STRING',data); %# Find the index of the cell
%# containing the string
>> values = sscanf(data{index},'I_NEED_THIS_STRING = %f %f %f') %# Read values
values =
1.0e+003 *
1.2345
6.7890
1.2345
Если файл потенциально имеет много Из бесполезного текста до или после того, как вы заинтересованы в том, вы можете использовать много памяти в MATLAB, загрузив все это в переменную. Вы можете избежать этого, загрузка и анализируя одну строку одновременно с помощью петли и функции Fggets.:
fid = fopen('mostly_useless_text.txt','r'); %# Open the file
newLine = fgets(fid); %# Get the first line
while newLine ~= -1 %# While EOF hasn't been reached
if strmatch('I_NEED_THIS_STRING',newLine) %# Test for a match
values = sscanf(newLine,'I_NEED_THIS_STRING = %f %f %f'); %# Read values
break %# Exit the loop
end
newLine = fgets(fid); %# Get the next line
end
fclose(fid); %# Close the file