2013-07-23 3 views
1

Мне нужно импортировать переменные из txt-файла. Этот файл имеет 3 основные части.Импорт Txt в Matlab, различные форматы строк

А) Начальные заголовки, содержащие общую информацию

В) Заголовки-переменные, в каждом столбце

C) числовые данные в каждом столбце

как показано ниже:

Headlines - Headlines - Headlines - Headlines 
Headlines - Headlines - Headlines - Headlines 


# A  |  B    C  |  D  | 
# ----------+----------------------------+---------------| 
# 1  | 0.0000E+00 + 0.0000E+00 | 0.0000  | 
# 2/3 | 0.0000E+00 +/- 0.0000E+00 | 0.0000  | 
# 4/5 | 0.0000E+00 +/- 0.0000E+00 | 0.0000  | 
# 6  | 0.0000E+00 + 0.0000E+00 | 0.0000  | 

Проблема в том, что начальные заголовки меняются каждый раз, поэтому мы не можем объявить определенное количество строк изначально, чтобы избежать.

Как вы можете видеть, у нас есть 2 разных формата строк. Поэтому мы не можем написать конкретный формат для каждой строки, и число числовых данных в каждом столбце также меняется.

Я не могу делать, что (Data = TextScan (FID, '% s% F% s% F% s% F% s% е', 'заголовки', 4)

У меня есть только два различных типа формата строки

Как я могу импортировать только числовые данные в каждой строке.

Пожалуйста ПОМОГИТЕ

ответ

0

Мой любимый метод для чтения во всем файле с этой волшебной команды:

ЬиЕ = textread (имя файла, '% s', 'Разделитель', '\ п');

, а затем проанализировать его. В этом случае, кажется, легко обнаружить линии данных, ища начальную #.

+0

Это было здорово. Я использовал эту команду и написал, пока для aj (1,1) я извлекаю номер строки, а затем использую: Data = textscan (fid, '% s% f% s% f% s% f% s% f ',' headlines ', j), и я загружаю свои переменные. Большое спасибо – Evans1985

0

Вы можете применить textscan построчно, а не к файлу в целом. Например, на основе пример, который вы дали (и предположив, что вы написали функцию для определения данных для мат из верхних строчках):

fileID = fopen(fileName); 
blockLine = 0; 
while ~feof(fileID) 
    currLine = fgetl(fileID); 
    % Check if we've reached the datablock 
    if strcmpi(currLine(1),'#') 
     blockLine = blockLine + 1; 
    end 
    % Use first line of datablock to determine textscan format 
    if blockLine == 1 
     textFormat = [insert format determination function]; 
    elseif blockLine > 2 
     % Ignoring second line (dashes only) 
     lineData = textscan(currLine,textFormat); 
     [insert code to distribute data to larger variables] 
    end 
end 
fclose(fileID); 
+0

Уважаемый Скипш, спасибо вам большое за ваш ответ. Это было очень полезно – Evans1985

Смежные вопросы