|
|
  |
Матлаб + чтение данных из файла, Как перепрыгнуть лишние строчки? |
|
|
|
Mar 21 2014, 09:55
|
Группа: Новичок
Сообщений: 7
Регистрация: 29-11-10
Из: Минск
Пользователь №: 61 249

|
Можно попробовать в стиле С: CODE %Открываем файл на чтение inFile = fopen('file.txt','r'); %Считываем первую строку colNames = fgets(inFile); %Считываем массив и транспонируем его dataArray = fscanf(inFile,'%d %d',[2 Inf])'; %Закрываем файл fclose(inFile);
Будет работать только если названия переменных в первой строке.
|
|
|
|
|
Mar 21 2014, 13:06
|
Вечный студент
   
Группа: Участник
Сообщений: 500
Регистрация: 11-09-06
Из: Питер
Пользователь №: 20 262

|
Цитата(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 в конце строки. Проверил - "правильный"
|
|
|
|
|
Mar 24 2014, 10:23
|
Профессионал
    
Группа: Свой
Сообщений: 1 817
Регистрация: 14-02-07
Из: наших, которые работают за бугром
Пользователь №: 25 368

|
Ребят, может я тупой, но спустя 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 содержит нужный массив. Что я делаю не так?
|
|
|
|
|
Mar 25 2014, 00:07
|
Вечный студент
   
Группа: Участник
Сообщений: 500
Регистрация: 11-09-06
Из: Питер
Пользователь №: 20 262

|
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-м – без. Как «убрать лишние ковычки»?
|
|
|
|
|
Mar 25 2014, 05:12
|
Группа: Новичок
Сообщений: 7
Регистрация: 29-11-10
Из: Минск
Пользователь №: 61 249

|
Цитата код у Вас работает? Да, я проверял. Версия Matlab - 7.6. Цитата Как «убрать лишние ковычки»? Нужно просто использовать для индексации вместо круглых скобок фигурные: Код strcat(f{1},'.txt') При использовании круглых скобок Вы получаете в качестве ответа еще один cell array.
|
|
|
|
|
Mar 25 2014, 11:07
|
Вечный студент
   
Группа: Участник
Сообщений: 500
Регистрация: 11-09-06
Из: Питер
Пользователь №: 20 262

|
Цитата(BooZe @ Mar 25 2014, 08:12)  Спасибо! Цитата(BooZe @ Mar 25 2014, 08:12)  Да, я проверял. Еще раз попробовал с fopen – не ругается (видимо, в прошлый раз я чего-то пропустил), но пока не во всем разобрался. Поковыряюсь, если что, спрошу. А с textread + headerlines не у меня одного затычки. Пока не принципиально (importdata хватает), но все же интересно было бы… если вдруг кто невзначай раскопает
|
|
|
|
|
Mar 26 2014, 10:25
|
Профессионал
    
Группа: Свой
Сообщений: 1 817
Регистрация: 14-02-07
Из: наших, которые работают за бугром
Пользователь №: 25 368

|
Эхх, молодежь! Пять минут изучения хелпа: A = TEXTREAD('FILENAME','FORMAT',N,param,value, ...) Т.е. param должен быть после кавычек, задающих формат, и числа читаемых строк N. В простейшем случае: A = TEXTREAD('FILENAME','',param,value, ...)
Т.е. d=textread('my.txt','','headerlines',1) прекрасно работает.
Читать с нужной строчки рекомендуют textscan.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|