2015-07-28 2 views
0

Я использую fscanf для импорта данных в MATLAB. Мой текстовый файл отформатирован как таковой:Как использовать fscanf для обнаружения разрывов строк?

######-10-K-######## 
######-10-K-######## 

Первое число может варьироваться от 6 до 9 символов. Сейчас я использую код:

var = fcanf(fn, %s) 

, в результате чего var равен одной гигантской строке.

Я читал, что использование% s будет продолжаться до тех пор, пока оно не обнаружит пробел. Есть ли кто-нибудь, чтобы заставить его остановиться, когда он обнаруживает штриховку вместо этого?

+0

Какую часть данных вы действительно хотите импортировать? Целые строки как отдельные строки? Только цифры и буквы? – Matt

+0

Просто примените свой ['спецификатор формата'] (http://mathworks.com/help/matlab/ref/textscan.html#inputarg_formatSpec) к вашим данным:' fscanf (fn, '% f-10-K-% f ', Или если вы используете textscan, как в ответе ниже: 'file_data = textscan (f,'% f-10-K-% f ');'. Заменить '% f' на'% d', если вы ожидаете только целые числа – Hoki

+0

, помещая символ '' 'звезды в спецификаторе формата, говорит Matlab игнорировать эту запись, поэтому в вашем случае используйте:'% f-10-K -% * f \ n' – Hoki

ответ

0

У Matlab есть много функций, вы можете использовать, например, textscan. Обратите внимание, что с использованием textscan, как показано ниже, все пробелы в каждой строке.

f = fopen('your_file_name'); 
file_data = textscan(f, '%s', 'Delimiter', ''); 
fclose(f); 

Другой пример с fgetl следующим образом. fgetl сохраняет отступы и пробелы в каждой строке.

lineCt = 1; 
f = fopen('your_file_name'); 
tline = fgetl(f); 
while ischar(tline) 
    f_data{lineCt} = tline; 
    lineCt = lineCt + 1; 
    tline = fgetl(f); 
end 
fclose(f); 

Обратите внимание, что это должно быть fscanf вместо fcanf как вы написали.

+0

К сожалению, опечатка отсутствует. Теперь он возвращает матрицу 1x1 только с первой строкой. Есть предположения? – hipHopMetropolisHastings

+0

попробуйте 'fclose ('all')' и повторите. Он должен дать вам массив ячеек с каждой ячейкой, содержащей одну строку из вашего файла. – scmg

+0

У вас есть «Блокнот ++»? Используйте его, чтобы открыть текстовый файл и проверить, какие ключи ascii используются для 'новой строки'. Обычно нажатие 'Enter' будет' CR LF', что означает «Возврат линии возврата каретки» и соответствует 'Delimiter = \ r \ n' в Matlab. – scmg

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