You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
117 lines
3.2 KiB
117 lines
3.2 KiB
8 years ago
|
function all_data = parseNodeFile(fname)
|
||
|
|
||
|
if nargin < 1
|
||
|
fname = 'Temp\nodes.txt';
|
||
|
end
|
||
|
|
||
|
%% read file
|
||
|
fid=fopen(fname,'r');
|
||
|
all_lines=[];
|
||
|
tline=fgetl(fid);
|
||
|
while ischar(tline)
|
||
|
all_lines{end+1} = tline;
|
||
|
tline=fgetl(fid);
|
||
|
end
|
||
|
fclose(fid);
|
||
|
|
||
|
%% parse the file
|
||
|
all_data=[];
|
||
|
for Iline=1:length(all_lines)
|
||
|
data=[];
|
||
|
line = all_lines{Iline};
|
||
|
|
||
|
%find start
|
||
|
I=find(line == '{');
|
||
|
if ~isempty(I);
|
||
|
line=line(I(1)+1:end);
|
||
|
|
||
|
%find end of field
|
||
|
I=find(line == ',');
|
||
|
field_count = 0;
|
||
|
while ~isempty(I)
|
||
|
%get entry and remove from line
|
||
|
entry = line(1:I(1)-1);
|
||
|
line = line(I(1)+1:end);
|
||
|
|
||
|
%parse entry
|
||
|
I=find(entry == ':');
|
||
|
if ~isempty(I)
|
||
|
field_count = field_count+1;
|
||
|
fieldname = entry(1:I(1)-1);
|
||
|
fieldname = fieldname(2:end-1); %remove quotes
|
||
|
|
||
|
value = entry(I(1)+1:end);
|
||
|
if (field_count == 2) & (fieldname == 'data')
|
||
|
expected_value = '{"defaults":{"name":{"value":"new"}}';
|
||
|
if (value(2+[1:length('defaults')])=='defaults')
|
||
|
%this is good. "line" is OK.
|
||
|
else
|
||
|
%push value back onto line
|
||
|
line = [value(2:end) ',' line];
|
||
|
end
|
||
|
value = expected_value;
|
||
|
else
|
||
|
value = stripOffStartEndQuotes(value);
|
||
|
end
|
||
|
|
||
|
%make correction if this was the last entry
|
||
|
if isempty(line)
|
||
|
%strip off the curly braces
|
||
|
while (value(end) == '}'); value = value(1:end-1); end;
|
||
|
value = stripOffStartEndQuotes(value);
|
||
|
end
|
||
|
|
||
|
%save this value
|
||
|
data.(fieldname) = value;
|
||
|
|
||
|
|
||
|
end
|
||
|
I=find(line == ',');
|
||
|
if ~isempty(I)
|
||
|
J=find(line == '"');
|
||
|
if isempty(J)
|
||
|
%I is the comma at the end of the line, not a seperator of entries.
|
||
|
%reject it
|
||
|
I=[];
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
%get the last entry
|
||
|
I=find(line == '}');
|
||
|
if ~isempty(I);
|
||
|
entry = line(1:I(1)-1);
|
||
|
I=find(entry == ':');
|
||
|
|
||
|
fieldname = entry(1:I(1)-1);
|
||
|
fieldname = fieldname(2:end-1); %remove quotes
|
||
|
|
||
|
value = entry(I(1)+1:end);
|
||
|
I = find(value == '"');
|
||
|
if (length(I) >= 2)
|
||
|
value = value(2:end-1); %remove quotes;
|
||
|
end
|
||
|
data.(fieldname) = value;
|
||
|
end
|
||
|
|
||
|
%save the data
|
||
|
if isempty(all_data)
|
||
|
all_data = data;
|
||
|
else
|
||
|
all_data(end+1) = data;
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
return
|
||
|
|
||
|
%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%5555
|
||
|
function value = stripOffStartEndQuotes(value)
|
||
|
|
||
|
I = find(value == '"');
|
||
|
if length(I) >= 2
|
||
|
if (I(1) == 1) & (I(end)==length(value))
|
||
|
value = value(2:end-1); %remove quotes;
|
||
|
end
|
||
|
end
|