You should upgrade or use an alternative browser.
-
Forums
-
Mathematics
-
MATLAB, Maple, Mathematica, LaTeX
(quick) Matlab fprintf question
- MATLAB
-
Thread starter
astropi -
Start date
Aug 23, 2012
- Aug 23, 2012
- #1
fprintf(‘%dn’,x);
it prints the data in a nice column. This is what I want. Then to save it to a file I try this:
fileID = fopen(‘x.txt’);
fprintf(‘%dn’,x);
fclose(fileID);
however Matlab does not like this. When I searched the help file, it gave a similar example, so what am I doing wrong here? Thanks in advance!
Answers and Replies
- Aug 24, 2012
- #2
fileID = fopen(‘x.txt’);
fprintf(fileID,’%dn’,x);
- Aug 24, 2012
- #3
Try specifying the file ID as the first parameter.fileID = fopen(‘x.txt’);
fprintf(fileID,’%dn’,x);
Thanks for the help, but unfortunately it did not work. I still get this error from Matlab:
Error using fprintf
Invalid file identifier. Use fopen to generate a valid file identifier.
when I try my code:
fileID = fopen(‘x.txt’);
fprintf(‘%dn’,x);
fclose(fileID);
the error I get is:
Error using fclose
Invalid file identifier. Use fopen to generate a valid file identifier.
I still can’t figure out why?
- Aug 24, 2012
- #4
Here’s a link to some documentation for fopen: http://amath.colorado.edu/computing/Matlab/OldTechDocs/ref/fopen.html [Broken].
Try this:
fileID = fopen('x.txt', 'wt');
fprintf('%dn',x);
fclose(fileID);
I don’t have MATLAB, so can’t verify that this will work, but I think it will.
- Aug 24, 2012
- #5
Thanks for the help, but unfortunately it did not work. I still get this error from Matlab:Error using fprintf
Invalid file identifier. Use fopen to generate a valid file identifier.when I try my code:
fileID = fopen(‘x.txt’);
fprintf(‘%dn’,x);
fclose(fileID);the error I get is:
Error using fclose
Invalid file identifier. Use fopen to generate a valid file identifier.I still can’t figure out why?
Ok, well in that case it appears that your problem is with the fopen statement (BTW. Is there any particular reason why you didn’t post the actual error message in the first place!)
Try letting it know that the file doesn’t currently exit and that you wish to create it.
fileID = fopen(‘x.txt’,’w’);
This tells it that you want to open the file for writing.
- Aug 24, 2012
- #6
Ok, well in that case it appears that your problem is with the fopen statement (BTW. Is there any particular reason why you didn’t post the actual error message in the first place!)Try letting it know that the file doesn’t currently exit and that you wish to create it.
fileID = fopen(‘x.txt’,’w’);
This tells it that you want to open the file for writing.
Thanks! I really can’t think of why I did not post the error in the first place, except that I’ve not had much sleep
Edit: OK, got it! Thanks everyone for the help!
Suggested for: (quick) Matlab fprintf question
- Last Post
- Jan 24, 2023
- Last Post
- Sep 25, 2020
- Last Post
- Jan 7, 2023
- Last Post
- Oct 27, 2021
- Last Post
- Apr 21, 2022
- Last Post
- Aug 26, 2021
- Last Post
- Aug 25, 2021
- Last Post
- Oct 29, 2022
- Last Post
- Apr 16, 2021
- Last Post
- Jul 12, 2021
-
Forums
-
Mathematics
-
MATLAB, Maple, Mathematica, LaTeX
-
Djony1987
- Пользователь
- Сообщения: 123
- Зарегистрирован: Пн мар 02, 2009 8:30 pm
Считывание двоичного файла
Здравствуйте!
Есть бинарный файл, который имеет следующую структуру:
|3 байта|2 байта,I составляющая|2 байта,Q составляющая| и повторяется…
Как мне I и Q записать в отдельные массивы?
Код: Выделить всё
fid = fopen('c:/signal2');
i=0;
while 1
a(i) = fread(fid, 3, 'uint32');
I(i) = fread(fid, 2, 'uint16');
Q(i) = fread(fid, 2, 'uint16');
i=i+1;
end
fclose(fid);
Попытался сделать так, но не работатет…как правильно в этом случае сделать?
Спасибо!
-
Jey
- Пользователь
- Сообщения: 2714
- Зарегистрирован: Вт сен 12, 2006 2:21 pm
Сообщение Jey » Ср апр 07, 2010 7:47 pm
1. В матлабе индексы начинаются с единицы, а не с нуля.
2. while 1 — это безобразие.
-
Djony1987
- Пользователь
- Сообщения: 123
- Зарегистрирован: Пн мар 02, 2009 8:30 pm
Сообщение Djony1987 » Ср апр 07, 2010 8:01 pm
Jey писал(а):1. В матлабе индексы начинаются с единицы, а не с нуля.
Ясно, ступил…как можно блок 3 байта записать в 1 элемент массива?
Он ругается:
In an assignment A(I) = B, the number of elements in B and
I must be the same.Error in ==> Untitled1213 at 4
a(i) = fread(fid, 3, ‘uint32’);
Jey писал(а):2. while 1 — это безобразие.
Пример такой в справке есть)
В Си был EOF — end of file,
можо было написать while(fd!=EOF) …
fd — дескриптор файлы.
как в матлабе это сделать?
Сенк!
-
Jey
- Пользователь
- Сообщения: 2714
- Зарегистрирован: Вт сен 12, 2006 2:21 pm
Сообщение Jey » Ср апр 07, 2010 8:16 pm
1. Что за тип данных такой 3 байта?
2. a(i) = fread(fid, 1, ‘uint32’); — целое беззнаковое число 4 байта.
3. eofstat = feof(fid); — конец файла
-
Djony1987
- Пользователь
- Сообщения: 123
- Зарегистрирован: Пн мар 02, 2009 8:30 pm
Сообщение Djony1987 » Ср апр 07, 2010 8:33 pm
Jey писал(а):1. Что за тип данных такой 3 байта?
Типа данных нет, но мне надо эти 3 байта записать в массив, чтобы не мешал, тогда если uint32 буду использовать он 4 байта считает…
Наверно надо вначале 1 байт, uint8 а потом uint16. Он при fread указатель перемещает?
Jey писал(а):3. eofstat = feof(fid); — конец файла
Сенк!
Сделал так:
Код: Выделить всё
fid = fopen('c:/signal2');
i=1;
while ~feof(fid)
dt(i) = fread(fid, 1, 'uint8');
offset(i) = fread(fid, 1, 'uint8');
gain(i) = fread(fid, 1, 'uint8');
I(i) = fread(fid, 1, 'uint16');
Q(i) = fread(fid, 1, 'uint16');
i=i+1;
end
fclose(fid);
Вроде считал Спасибо!
-
Djony1987
- Пользователь
- Сообщения: 123
- Зарегистрирован: Пн мар 02, 2009 8:30 pm
Сообщение Djony1987 » Пн апр 19, 2010 7:17 am
Всем привет!
Такой вопрос, код:
Код: Выделить всё
fid = fopen('c:/signal15_14_04_10_10M');
i=1;
dt = fread(fid, 1, 'float32');
offset = fread(fid, 1, 'float32');
gain = fread(fid, 1, 'float32');
while ~feof(fid)
I(i) = fread(fid, 1, 'int16');
Q(i) = fread(fid, 1, 'int16');
i=i+1;
end
fclose(fid);
пишет ошибку:
??? Error using ==> fread
Invalid file identifier. Use fopen to generate a valid file identifier.Error in ==> Untitled1213 at 4
dt = fread(fid, 1, ‘float32’);
В чем может быть проблема?
Если убрать все, кроме первой строчки то ошибок нет, т.е. идентификатор файла должен быть правильный…
Спасибо!
-
mlslkfpu
- Пользователь
- Сообщения: 353
- Зарегистрирован: Ср сен 22, 2004 4:49 pm
Сообщение mlslkfpu » Пн апр 19, 2010 9:37 am
Djony1987 писал(а):Если убрать все, кроме первой строчки то ошибок нет, т.е. идентификатор файла должен быть правильный…
Не обязательно, если fopen не может открыть файл, она не выдает ошибку, а возвратит fid=-1. Вот и проверьте, что это не так, тогда можно читать файл.
-
Djony1987
- Пользователь
- Сообщения: 123
- Зарегистрирован: Пн мар 02, 2009 8:30 pm
Сообщение Djony1987 » Пн апр 19, 2010 11:56 am
mlslkfpu писал(а):Не обязательно, если fopen не может открыть файл, она не выдает ошибку, а возвратит fid=-1. Вот и проверьте, что это не так, тогда можно читать файл.
Сенк! -1 как раз был, сейчас вроде норм считывает. Но возникает еще одна ошибка:
??? In an assignment A(I) = B, the number of elements in B and
I must be the same.Error in ==> Untitled1213 at 9
I(i) = fread(fid, 1, ‘int16’);
Это может быть, что уже почти конец файла но для текущего значения не хватает бит, т.е. остается 3 бита, а надо для значения 16 и т.д.?
-
Jey
- Пользователь
- Сообщения: 2714
- Зарегистрирован: Вт сен 12, 2006 2:21 pm
Сообщение Jey » Пн апр 19, 2010 1:49 pm
Djony1987 писал(а):In an assignment A(I) = B, the number of elements in B and
I must be the same.Error in ==> Untitled1213 at 9
I(i) = fread(fid, 1, ‘int16’);
Вообще эта ошибка возникает, когда I(i) должно содержать одно число, а fread(fid, 1, ‘int16’) возвращает либо ничего, либо более одного числа.
Вы бы ~feof(fid) делали после каждого fread.
-
iglin
- Эксперт
- Сообщения: 1584
- Зарегистрирован: Ср сен 22, 2004 4:49 pm
Сообщение iglin » Пн апр 19, 2010 6:50 pm
А почему бы не воспользоваться командой fseek, чтобы подвести указатель к нужной позиции?
С.П.Иглин
Hi. I have been using the same code since 2006 and now I have the newest version of MatLab and when I run the code I get the following error:
Error using fprintf
Invalid file identifier. Use fopen to generate a valid file identifier.
lp_file = input(‘Enter file name for saving output: ‘,‘s’);
lpfid = fopen(lp_file,‘w’);
runlabel = input(‘Enter title: ‘,‘s’);
runlabel = [runlabel ‘ ‘ datestr(now,0)];
fprintf(lpfid,[runlabel ‘n’]);
load ‘evs.txt’
X = evs(:,2:13);
[N nv] = size(X);
numvar = [1: 1: nv]’;
sampnums = evs(:,1);
X = X ./ 1000.;
xmean = mean(X)’;
xvar = var(X)’;
format = ‘%7i %20.4f %20.4f n’;
fprintf(lpfid,‘Var. Num. Means Variance n’);
fprintf(lpfid,format,[numvar xmean xvar]’);
alpha = input(‘alpha level, e.g. 95: ‘);
disp(‘Enter 0 for No Pretreatment, 1 for Constant Mean,’);
mode = input( ‘2 for percent max and 3 for log: ‘);
vectorlengths = sqrt(diag(X * X’));
[XF, Xmin, Xmax, Ks, Kbar, constant] = transform(X,mode,lpfid);
[U,B,F,scF,Lambda,Pervar,Cumvar,count] = qmode(XF,alpha);
Lambda = diag(Lambda);
fprintf(lpfid,‘n’);
nout = size(F,2);
nvcount =[1: 1:count];
fprintf(lpfid,‘ Eigen Values Per. Variance Accumulative Variance n’);
fprintf(lpfid,‘%10i %10.4f %10.4f %10.4f n’,[nvcount’ Lambda(1:count) Pervar(1:count) Cumvar(1:count)]’);
fprintf(lpfid,‘n’);
matrixprint(lpfid,‘Principal Factor Scores Matrix’,F);
message = [‘Count = ‘, num2str(count)];
disp(message);
Pervar(1:count)
count = input(‘Enter NO. of Factors to keep: ‘);
B = B(:,1:count);
comm = diag(B*B’);
Info = diag(B’*B);
PerInfo = Info * 100/N;
CumInfo = cumsum(PerInfo);
matrixprint(lpfid,‘Sample No. Factor Loadings Matrix’, [sampnums comm B]);
format = »;
for j = 1: count
format = [format,‘%8.4f ‘];
end
format = [format,‘n’];
fprintf(lpfid,[‘Percent Information ‘ format],[PerInfo(1:count)’]);
fprintf(lpfid,[‘Cumulative Info. ‘ format],[CumInfo(1:count)’]);
fprintf(lpfid,‘n’);
[CFS, scalefactors] = compositionscores(F,Kbar,Xmax,Xmin);
scalefactors = scalefactors(1:count);
CFS = CFS(:, 1:count);
matrixprint(lpfid,‘Factor Composition Scores ‘,CFS);
goodness = nodosgoodns(X,B,CFS,scalefactors,Xmax,Xmin,Ks, Kbar,vectorlengths,lpfid);
[B, T] = varimax(count,B);
comm = diag(B*B’);
Info = diag(B’*B);
PerInfo = Info * 100/N;
CumInfo = cumsum(PerInfo);
matrixprint(lpfid,‘Varimax Factors’,[sampnums comm B ]);
fprintf(lpfid,[‘Percent Information ‘ format],[PerInfo(1:count)’]);
fprintf(lpfid,[‘Cumulative Info. ‘ format],[CumInfo(1:count)’]);
fprintf(lpfid,‘n’);
F = F(:,1:count);
L = F*T;
matrixprint(lpfid,‘VARIMAX Factor Scores Matrix ‘,L);
Can someone help me (I apologize but I am not a atLab expert). Why would the version I am using now not work? Thanks in advance
Андрей Ларин 0 / 0 / 0 Регистрация: 24.11.2013 Сообщений: 20 |
||||
1 |
||||
30.11.2013, 00:53. Показов 9256. Ответов 13 Метки нет (Все метки)
Доброго времени суток,
скажите пожалуйста как можно это сделать?
__________________
0 |
Programming Эксперт 94731 / 64177 / 26122 Регистрация: 12.04.2006 Сообщений: 116,782 |
30.11.2013, 00:53 |
13 |
Sledge5 536 / 523 / 38 Регистрация: 13.03.2011 Сообщений: 727 |
||||||||
01.12.2013, 11:36 |
2 |
|||||||
Вместо
подставьте
0 |
Андрей Ларин 0 / 0 / 0 Регистрация: 24.11.2013 Сообщений: 20 |
||||||||||||
01.12.2013, 13:48 [ТС] |
3 |
|||||||||||
Спасибо что откликнулись, попробовал изпользовать
при этом после выполнения 8-ой строки выходит сообщение
и после выполнения 14-ой строки:
0 |
536 / 523 / 38 Регистрация: 13.03.2011 Сообщений: 727 |
|
01.12.2013, 20:54 |
4 |
Внимательно смотрите, какой файл создаете, а какой пытаетесь открыть в строке 8.
0 |
0 / 0 / 0 Регистрация: 24.11.2013 Сообщений: 20 |
|
02.12.2013, 13:48 [ТС] |
5 |
Попробовал разные варианты, прочитал как команда sprintf работает. не дошел
0 |
536 / 523 / 38 Регистрация: 13.03.2011 Сообщений: 727 |
|
02.12.2013, 17:42 |
6 |
Опишите алгоритм действий.
0 |
Андрей Ларин 0 / 0 / 0 Регистрация: 24.11.2013 Сообщений: 20 |
||||
02.12.2013, 18:34 [ТС] |
7 |
|||
то что сделал выглядит так:
0 |
536 / 523 / 38 Регистрация: 13.03.2011 Сообщений: 727 |
|
03.12.2013, 02:52 |
8 |
Что нужно-то в итоге?
0 |
0 / 0 / 0 Регистрация: 24.11.2013 Сообщений: 20 |
|
05.12.2013, 09:18 [ТС] |
9 |
ммм, в итоге нужно что создавался текстовый файл в который бы записывались данные а имя файла должно соответствовать дате текущей. такая вот задумка Добавлено через 2 минуты
0 |
Sledge5 536 / 523 / 38 Регистрация: 13.03.2011 Сообщений: 727 |
||||
05.12.2013, 12:19 |
10 |
|||
Я бы так сделал:
0 |
0 / 0 / 0 Регистрация: 24.11.2013 Сообщений: 20 |
|
06.12.2013, 14:11 [ТС] |
11 |
спасибо Добавлено через 8 минут Error in ==> AdviceCy at 8
0 |
Sledge5 536 / 523 / 38 Регистрация: 13.03.2011 Сообщений: 727 |
||||
06.12.2013, 18:04 |
12 |
|||
Исправлена строка 5. Остальное без изменений:
1 |
Андрей Ларин 0 / 0 / 0 Регистрация: 24.11.2013 Сообщений: 20 |
||||
06.12.2013, 22:16 [ТС] |
13 |
|||
а Вы ГОЛОВА (Эх, нравится мне все таки MatLab Добавлено через 15 минут
Если я открываю .txt для записи то есть с ‘w’ в конце то он записывает данные в одну строчку не смотря на то что стоит n перед записываемыми данными, и как только меняю на ‘rt+’ и ставлю n то как положено каждая запись с новой строки. Вы не знаете почему так происходит? и как с этим бороться? ( в учебниках почему то про такое не пишут)
0 |
Sledge5 536 / 523 / 38 Регистрация: 13.03.2011 Сообщений: 727 |
||||||||
08.12.2013, 01:06 |
14 |
|||||||
Вы не знаете почему так происходит? и как с этим бороться? Потому что в строке 5 опять ошибочка закралась:
а
Спасибо. как вижу Вы заменили на две \, если можете прокомментируйте для чего это? и что это дает? В строке 5 в функции sprintf происходит интерполяция: все escape-последовательности заменяются соответствующими спецсимволами (например, ‘n’ — перевод строки, ‘t’ — табуляция и т.д.).
0 |