пропустить чтение заголовков в MATLAB - PullRequest
3 голосов
/ 07 апреля 2010

У меня был похожий вопрос. но сейчас я пытаюсь прочитать файлы в формате .txt в MATLAB. Моя проблема с заголовками. Много раз из-за ошибок система перезаписывает заголовки в середине файла, а затем MATLAB не может прочитать файл. Есть ли способ пропустить это? Я знаю, что могу пропустить чтение некоторых символов, если знаю, что это за персонаж.

вот код, который я использую.

[c,pathc]=uigetfile({'*.txt'},'Select the data','V:\data');     
file=[pathc c];    
data= dlmread(file, ',', 1,4);    

таким образом, я позволил пользователю выбрать файл. Мои файлы обычно огромны [86400 125] поэтому естественно, что у него 125 полей заголовков или больше, зависит от файлов.

Спасибо

Поскольку файлы такие большие, я не могу их скопировать, но в таком формате, как

  day      time    col1    col2 col3 col4 ...............................
  2/3/2010  0:10    3.4    4.5   5.6  4.4 ...............................   
..................................................................    
..................................................................   

и т. Д.

Ответы [ 2 ]

3 голосов
/ 07 апреля 2010

С DLMREAD вы можете читать только числовые данные.Он не будет читать дату и время, поскольку ваши первые два столбца содержат.Если все остальные данные являются числовыми, вы можете указать DLMREAD пропустить первую строку и 2 столбца справа:

data = dlmread(file, ' ', 1,2); 

Для импорта также дня и времени вы можете использовать IMPORTDATA вместо DLMREAD:

A = importdata(file, ' ', 1);
dt = datenum(A.textdata(2:end,1),'mm/dd/yyyy');
tm = datenum(A.textdata(2:end,2),'HH:MM');
data = A.data;

Дата и время будут преобразованы в серийные номера.Вы можете преобразовать их обратно с помощью функции DATESTR .

2 голосов
/ 07 апреля 2010

Оказывается, вы все еще можете использовать текстовое сканирование. За исключением того, что вы читаете все как строку. Затем вы пытаетесь конвертировать в двойной. 'str2double' возвращает NaN для строк, и, поскольку заголовки являются строками, строки заголовков можно идентифицировать как строки со всеми NaN.

Например:

%# find and open file
[c,pathc]=uigetfile({'*.txt'},'Select the data','V:\data'); 
file=[pathc c];
fid = fopen(file);

%# read all text
strData = textscan(fid,'%s%s%s%s%s%s','Delimiter',','); 

%# close the file again
fclose(fid);

%# catenate, b/c textscan returns a column of cells for each column in the data
strData = cat(2,strData{:}); 

%# convert cols 3:6 to double
doubleData = str2double(strData(:,3:end));

%# find header rows. headerRows is a logical array
headerRowsL = all(isnan(doubleData),2);

%# since I guess you know what the headers are, you can just remove the header rows
dateAndTimeCell = strData(~headerRowsL,1:2);
dataArray = doubleData(~headerRowsL,:);

%# and you're ready to start working with your data 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...