2015-02-02 2 views
0

Я пытаюсь прочитать следующий текстовый файл в MATLAB:Чтение данных из текстового файла с длинным заголовком

Data from RamanShift_18-24-54-814.txt Node 
Date: Sun Feb 01 18:24:54 GMT 2015 
User: 
Spectrometer: QEP00413 
Autoset integration time: false 
Trigger mode: 4 
Integration Time (sec): 1.000000E0 
Scans to average: 1 
Electric dark correction enabled: true 
Nonlinearity correction enabled: false 
Boxcar width: 0 
XAxis mode: Wavelengths 
Stop averaging: false 
Number of Pixels in Spectrum: 1044 
-66.286 -2.5 
-62.486 -0.5 
-58.689 -0.5 
-54.895 2.5 
-51.104 40.5 
-47.316 49.5 
-43.531 52.5 

Я хочу, чтобы игнорировать текст в начале и нагрузки в двух числовых столбцах. Я попытался это:

M = dlmread('RamanShift_18-24-54-814.txt','\t',190,0); 

это не удается из-за ошибки:

Error using dlmread (line 139) 
Mismatch between file and format string. 
Trouble reading number from file (row 2u, field 1u) ==> \n 

если я выбираю только второй столбец, по:

M = dlmread('RamanShift_18-24-54-814.txt','\t',190,1); 

то работает, но каждый другой элемент M равен нулю?

1113.50000000000 
0 
1104.50000000000 
0 
1094.50000000000 
0 
1069.50000000000 
0 

1) Как я могу улучшить это для чтения в обеих колонках и 2) исправить для альтернативной нулевой проблемы?

Большое спасибо, T

ответ

2

Вы ищете importdata функции

A = importdata('yourTextfile.txt','\t',14) 

Эта линия пропускает первые строк файла, по желанию и использует табулятора разделитель для чтения в двух столбцах данных.

+0

Thankyou @thewaywewalk! Работа выполнена! – tomdertech

0

Использование textscan, по умолчанию он использует пробелы в качестве разделителя. Она будет работать идеально в вашем случае:

fid = fopen('yourFileName.txt'); 
resCell = textscan(fid, '%s'); resCell = resCell{1}; 
fclose(fid); 

Тогда вы можете искать по ключевому слову, которое появляется всегда в файле (например, «Spectrum:») и читать цифры:

startInd = find(strcmpi(resCell, 'Spectrum:'), 1) + 2; % 2 is a shift that you specify that depends in the keyword you chose. 

Сейчас:

nSamples = (numel(resCell) - ind + 1)/2; % this should be an even number in your case! I guess that this change between sampling sessions... 

И:

data = reshape(str2double(resCell(startInd:end)), 2, nSamples); 

И последнее, но не менее важное: повеселиться!

+0

Это не дает желаемого результата. Она производит один длинный столбец всех данных неоднозначны: '49 0,5 ' '-43.531' '52 0,5 ' '-39.749' '54 0,5 ' '-35.97' '59 0,5 ' '-32,194' '68 0,5 ' '-28,42' '84 0,5 ' '-24,65' '99 0,5 ' '-20.883' '119,5 ' '-17,118' идея поиска не требуется. Все, что я хочу, это два столбца данных. смещения строк и столбцов были бы идеальными – tomdertech

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