forked from burakbayramli/books
-
Notifications
You must be signed in to change notification settings - Fork 0
/
labreadkey.m
66 lines (57 loc) · 1.55 KB
/
labreadkey.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
function K = labreadkey(F)
% K = labreadkey(F) Read a phone key file
% F is the filename of a 'phone key file', which defines a set of
% phone symbols in a particular order. K is returned as a char
% matrix holding the names of each phone, with the row order
% defining the numerical code that will be used for that phone.
% 2001-03-27 [email protected]
fid = fopen(F,'rt');
eof = 0;
nsym = 0;
cursym = 0;
maxlen = 0;
while eof == 0
line = fgetl(fid);
if ~isstr(line)
eof = 1;
else
spcpos = find(line == ' ');
if length(spcpos) == 0
% No space in this line (including empty line)
nn = str2num(line);
if length(nn) > 0 & nsym == 0
% This was the header symbol count
nsym = nn;
K = ' '*ones(nsym, 1);
maxlen = 1;
sym = '';
else
sym = line;
end
else
% Found a space - must be 'sym indx' pairs
sym = line([1:(spcpos(1)-1)]);
idx = str2num(line([(spcpos(1)+1):length(line)]));
if idx ~= cursym
disp(['Symbol ',sym,' has index ',num2str(idx),' but expecting ',num2str(cursym)]);
end
end
ls = length(sym);
if ls > 0
% Maybe add this symbol to the array
if ls > maxlen
% Pad out existing symbols
K = [K,' '*ones(max(cursym, nsym),ls - maxlen)];
maxlen = ls;
end
if ls < maxlen
sym = [sym, ' '*ones(1,maxlen - ls)];
end
cursym = cursym+1;
K(cursym,:) = sym;
end
end
end
fclose(fid);
% Make sure it's typed as chars
K = char(K);