Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Матлаб + чтение данных из файла
Форум разработчиков электроники ELECTRONIX.ru > Cистемный уровень проектирования > Вопросы системного уровня проектирования
Diusha
Файл примерно такого содержания:

X Y
23 6
41 85
35 95

Нужно прочитать цифири.
Если «X Y» из файла выкинуть,
d=textread('file.txt')
– работает на «ура». Но требуется читать без правки файла.
На
d=textread('file.txt','headerlines',1)
ругается:
??? Error using ==> dataread
Number of outputs must match the number of unskipped input fields.

Что не так?

Сразу попутно еще вопрос. Есть ли возножность перепрыгнуть строчку в середине файла (№ строки известен)?
Herz
А что мешает откорректировать переменную d уже после чтения?
"Перепрыгнуть" через строку в читаемом файле, не зная её номера - это как? По каким признаком её перепрыгивать? По-моему, проще всего прочесть всё как есть, а затем переформатировать матрицу как будет угодно, ведь для работы с переменными в Матлабе уже доступны любые инструменты.
BooZe
Можно попробовать в стиле С:
CODE

%Открываем файл на чтение
inFile = fopen('file.txt','r');
%Считываем первую строку
colNames = fgets(inFile);
%Считываем массив и транспонируем его
dataArray = fscanf(inFile,'%d %d',[2 Inf])';
%Закрываем файл
fclose(inFile);

Будет работать только если названия переменных в первой строке.
syoma
Может файл у Вас неправильный? У меня помню Матлпб так ругался, потому что не было полных 0x0D, 0x0A в конце строки.
Diusha
Цитата(Herz @ Mar 21 2014, 12:04) *
А что мешает откорректировать переменную d уже после чтения?

Сообщение об ошибке при попытке чтения с помощью textread файла, где кроме чисел есть что-то еще. Насколько я понимаю, так и должно быть. Для этого и существует опция headerlines.

Цитата(Herz @ Mar 21 2014, 12:04) *
"Перепрыгнуть" через строку в читаемом файле, не зная её номера - это как?

Цитата(Diusha @ Mar 21 2014, 03:06) *
(№ строки известен)


Цитата(BooZe @ Mar 21 2014, 12:55) *
CODE

inFile = fopen('file.txt','r');
colNames = fgets(inFile);
dataArray = fscanf(inFile,'%d %d',[2 Inf])';
fclose(inFile);

1-ю строку кода проглатывает, на 2-ю ругается:
??? Error using ==> fscanf
Invalid file identifier. Use fopen to generate a valid file identifier.


Цитата(syoma @ Mar 21 2014, 15:37) *
Может файл у Вас неправильный? ... не было полных 0x0D, 0x0A в конце строки.

Проверил - "правильный"
Diusha
BooZe, а приведенный Вами код у Вас работает? Какая версия Матлаба?
syoma
Ребят, может я тупой, но спустя 5 минут после открытия матлаба у меня все работает.
Файл my.txt содержит:
X Y
23 6
41 85
35 95
Import wizard открывает и импортирует этот файл без проблем - овцы отдельно(X Y), волки отдельно(Данные).
Смотрю хелп - возможность проделывания того же самого заключена в функции importdata.
Синтакс: A = importdata(filename,delimiterIn,headerlinesIn)
В итоге:
A = importdata('my.txt',' ',1)
делает то же самое, только создает структуру А, в которой волки отдельно, овцы отдельно и все выковыривается очень легко. A.data содержит нужный массив.
Что я делаю не так?
Diusha
syoma, спасибо! Я об этом мечтал!

Еще вопрос.
Задан массив:
f={'abc', 'def'};

Требуется к нужному элементу массива добавить '.txt' и по получившемуся имени прочитать файл.
textread(strcat(f(1),'.txt'))
и
importdata(strcat(f(1),'.txt'),' ',1)
дают ошибку.

Если сделать так:
a='abc';
textread(strcat(a,'.txt'))
, все норм.

Есть такое наблюдение (в котором, как мне чуется, вся собака и зарыта):

>> strcat(f(1),'.txt')
ans = 'abc.txt'

>> strcat(a,'.txt')
ans = abc.txt

В 1-м случае ans с ковычками, во 2-м – без.
Как «убрать лишние ковычки»?
BooZe
Цитата
код у Вас работает?

Да, я проверял.
Версия Matlab - 7.6.
Цитата
Как «убрать лишние ковычки»?

Нужно просто использовать для индексации вместо круглых скобок фигурные:
Код
strcat(f{1},'.txt')

При использовании круглых скобок Вы получаете в качестве ответа еще один cell array.
Diusha
Цитата(BooZe @ Mar 25 2014, 08:12) *
Код
strcat(f{1},'.txt')

Спасибо!

Цитата(BooZe @ Mar 25 2014, 08:12) *
Да, я проверял.

Еще раз попробовал с fopen – не ругается (видимо, в прошлый раз я чего-то пропустил), но пока не во всем разобрался. Поковыряюсь, если что, спрошу.

А с textread + headerlines не у меня одного затычки. Пока не принципиально (importdata хватает), но все же интересно было бы… если вдруг кто невзначай раскопает
syoma
Эхх, молодежь!
Пять минут изучения хелпа:
A = TEXTREAD('FILENAME','FORMAT',N,param,value, ...)
Т.е. param должен быть после кавычек, задающих формат, и числа читаемых строк N.
В простейшем случае:
A = TEXTREAD('FILENAME','',param,value, ...)

Т.е.
d=textread('my.txt','','headerlines',1)
прекрасно работает.

Читать с нужной строчки рекомендуют textscan.
Diusha
Классно!
Большое спасибо!
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.