[FileName,PathName]=uigetfile({'*.ini'},'Open INI-File');
fid= fopen(fullfile(PathName,FileName));
C = textscan(fid, '%s', 'delimiter', '=');
w = size(C{:});
for i=1:w(1) ifstrcmp(C{1}{i}, 'variable2') set(handles.textfeld_variable2,'String',C{1}{i+1});
end end fclose(fid);
Allerdings hab ich nun noch die folgenden Probleme:
Leerzeichen hinter der Variable werden mit in das Cellarray "C" gespeichert
Bisher werte ich die Sektionen noch garnicht aus und ich weiß nicht wie ich das so richtig machen soll...
Da ich die "if strcmp" Abfrage für mehrere Variablen machen muss ist das vielleicht schöner umsetzbar?!
Es soll allerdings alles sehr einfach und kompakt bleiben!! (Keine superintelligente Super-Duper-Lösung )
ein paar Anmerkungen:
- ich würde alle Zeilen so einlesen und erst nachher nach "=" suchen
- trenne das Einlesen vom Schreiben in die Text-Felder
Code:
[FileName,PathName]=uigetfile({'*.ini'},'Open INI-File');
fid= fopen(fullfile(PathName,FileName));
% einfach Zeile für Zeile einlesen:
C = textscan(fid, '%s', 'delimiter', '\n');
% um sich das Leben einfacher zu machen:
C = C{1};
% der folgende Code nimmt zwingend an, dass die erste Zeile eine Sektion ist! for i=1:length(C) if C{i}(1)=='['
% neue Sektion
section = C{i}(2:end-1);
else [var,rest] = strtok(C{i}, '=');
S.(section).(strtrim(var)) = strtrim(rest(2:end));
end end
% setze z.B. alle aus sektion1:
varNames = fieldnames(S.sektion1);
for i=1:length(varNames) set(handles.(['textfeld_' varNames{i}]), 'String', S.sektion1.(varNames{i}));
end
Hoffe, das hilft weiter. Falls S.(section) als Schreibweise unbekannt: in der Doku bitte nach "Structures" suchen, und im ersten (oder zweiten) Treffer zu "Dynamic Field Names" runterscrollen.
- C ist ein 1x1-Cell-Array, und damit ich nicht immer C{1}{i} schreiben muss, mache ich das einmal C = C{1}, und danach nur noch C{i}
- "Hier steht immer nur die letzte Sektion drin". Ja, das ist genau die Idee: alle folgenden Einträge gehören doch zur der letzten Sektion, bis eine neue kommt...?? Nach der ersten Zeile is section='sektion1', und mit S.(section) greife ich dann auf S.sektion1 zu. Nachher ist es irgendwann 'sektion2', und dann greift S.(section) genau auf S.sektion2 zu ...
- jepp, fclose ist wichtig! Kann eigentlich direkt hinter der textscan-Zeile kommen
Nur eigentlich brauch ich das ja garnicht speichern...
Aber eine Leere ELSEIF-Auswahl kommt mir auch doof vor - Hättest du da ne clevere Lösung ?
Einstellungen und Berechtigungen
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.