Как я прочитаю в серии чисел, использующих «Textscan» в MatLab, если файл в основном текст?

StackOverflow https://stackoverflow.com/questions/3620079

  •  26-09-2019
  •  | 
  •  

Вопрос

У меня есть текстовый файл, который имеет строку из 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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top