2013-05-13 677 views
2

如何讀取和寫入ini文件:我想添加新的屬性到現有的。我想將ini文件寫入臨時文件,並最終將新的屬性添加到它。新的屬性將有頭,名稱​​,說明,價值和佈局(如:1號線& 3)Ini文件讀取和寫入+添加新屬性+ matlab

#---------------
#頭
# - -------------
[名]%
型 #遞減

fileData = []; 
fh = fopen(fileName, 'r'); % read handle 
tname=tempname(); 
wfh =fopen(tname,'w'); % write handle 
line = fgetl(fh); 
val = ''; 
Prop =''; 
type = ''; 
header = ''; 
desc= ''; 

while ischar(line) 

    if strcmpi(line(1),'#') && strcmpi(line(3),'=') 
     layout = line(2:end); 
    elseif strcmpi(line(1),'#')&& ~strcmpi(line(3),'=') 
     header = line(2:end); 
    else 
     Prop = regexp(line,{'\[*\w+\]\s*%\s*.*\s*'},'match'); 
    [property data_type] = strtok(Prop,'%') 
    prop_p = property{1};% property_name 
    prop_per = regexprep(prop_p,{'\[','\]'},''); 
    prop = prop_per{1}; 
    Dtype = data_type{1}; % datatype 
    dtype = strtrim(strrep(Dtype,'%','')); 
    DATA_type = dtype{1}; 

end 



% How can i define filedname (prop) for the 'layout' and 'header' as they are found in lines before the actual'prop'. 

    % From command window 

    % Undefined variable prop. 

    % Error in ecco2511>add (line 212) 
    % fileData.(prop{1}).layout = layout; 


    desc = fgetl(fh); % description 
    desc = desc(1:end); 
    line = fgetl(fh); 
    val = line(1:end); 

    fileData.(prop).layout = layout; 
    fileData.(prop).header = header; 
    fileData.(prop).type = DATA_type; 
    fileData.(prop).desc = desc; 
    fileData.(prop).val = val; 

    line = fgetl(fh); % keep reading 

end 

if ~isfield(fileData, propName) 
    fileData.(propName).val = newVal; 
    fileData.(propName).type = datatype; 
    fileData.(propName).desc = description; 
    fileData.(propName).layout = layout; 
    fileData.(propName).header = header; 

else 
    error ('property %s already exists, use set to change its value',propName); 
end 

fileData = orderfields(fileData); 
propNames = fieldnames(fileData); 

for ii = 1:numel(propNames) 

    fprintf(wfh,'%s\r',fileData.(propNames{ii}).layout); 
    fprintf(wfh,'\n'); 
    fprintf(wfh,'%s\r',fileData.(propNames{ii}).header); 
    fprintf(wfh,'\n'); 
    fprintf(wfh,'%s\r',fileData.(propNames{ii}).layout); 
    fprintf(wfh,'\n'); 
    fprintf(wfh, '[%s]%s\r', (propNames{ii}),fileData.(propNames{ii}).type); 
    fprintf(wfh,'\n'); 
    fprintf(wfh,'#%s\r',fileData.(propNames{ii}).desc); 
    fprintf(wfh,'\n'); 
    fprintf(wfh,'%s\r',fileData.(propNames{ii}).val); 
    fprintf(wfh,'\n'); 
end 
fclose(fh); 
fclose(wfh); 
[status,errmsg]= movefile(tname,fileName,'f'); 
+0

fprintf(wfh,'[%s] %%% s \ r',propNames {ii},fileData。(propNames {ii})。 一個您是路過%S的參數不是字符串,只是一個斷點或「鍵盤」後,這兩個變量 您fprintf中前行,然後添加 衛生組織的「變量名」,並張貼什麼呢說。有人可能會提供幫助。 – sridutt 2013-05-13 02:39:45

+0

嗨Sridutt,這是正確的propName和類型變量是單元格。我將不勝感激任何幫助。名稱大小字節類屬性 propNames 2x1 244 cell – 2013-05-13 06:16:04

+0

嘗試使用cell_variable_name {index_number}將單元格內容解壓縮爲字符串。 – sridutt 2013-05-13 09:40:02

回答

1

聽起來像是你需要INI Config從MATLAB文件交換。它將允許您讀取,寫入和修改INI樣式文件。我已經使用了很多次,效果很好。