ich habe da mal eine kl. frage: ich möchte eine datei bis zu einer bestimmten stelle bzw. bestimmtem string einlesen, also sagen wir bis zb 'abc' und danach soll die while schleife abgebrochen werden... strcmp in kombi mit dem feof hauts leider nicht hin....
Verfasst am: 11.11.2010, 23:23
Titel: Re: dat einlese
Hallo berta,
Zitat:
strcmp in kombi mit dem feof hauts leider nicht hin....
Bitte poste doch Deinen Ansatz und die Fehlermeldung oder den Unterschied zwischen Deinen Erwartungen und dem Ergebnis.
Es ist viel effizienter Deinen Code zu verbessern, als eine gnaz neue Implementation zu verfassen, die dann vielleicht doch nicht genau Deinen Wünschen erntspricht.
Gruß, Jan
berta
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 12.11.2010, 18:50
Titel:
so ich hoff das haut jetzt hin mit dem code...
das erste problem hab ich bisweilen selbst gelöst, nun was neues...
wie unten zu sehen ist, habe ich das while(1) auskommentiert, denn so liest es mir zumindest mal die ersten 8 zeilen ein, wenn ich hingegen im code lasse, dann spuckts mir ERROR 200 aus.... und es macht mich mittlerweile schon wahnsinnig dass ich nicht draufkomm, vielleicht kann mir ja jemand helfen... DANKE
lg berta
Code:
%Codeausschnitt von dem nicht funktionierendem part....
% while (1) if check == 0 for i = 1:7 line = fgetl(fid) end else
IndexSat = sscanf(cell{1,1}, '%2i');
IndexZeit = check_time;
ifsize(cell) ~= 10% Wenn die Länge ungleich 10 ist (keine 10 Einträge vorhanden sind) disp('Das Programm wird umgehend geschlossen, bitte überprüfen Sie all Ihre Eingaben') ERROR = 200;
error('ERROR 200: Format entspricht nicht den Spezifikationen') break;
end
%-------------------------ZWEITE ZEILE-------------------------------
line = fgetl(fid);
cell = strread(line, '%s');
%folgende informationen der zweiten Zeile werden ausgelesen:
% crs, deltan, M0
%-------------------------SECHSTE ZEILE-----------------------------
line = fgetl(fid);
cell = strread(line, '%s');
%folgende informationen der sechste Zeile werden ausgelesen:
%idot
NavData(IndexSat).idot(IndexZeit) = sscanf(cell{1,1}, '%f');
%---------------------------SIEBENTE ZEILE---------------------------
line = fgetl(fid);
cell = strread(line, '%s');
%Es werden keine Informationen aus dieser Zeile benötigt!
%----------------------------ACHTE ZEILE-----------------------------
line = fgetl(fid);
cell = strread(line, '%s');
%folgende informationen der sechste Zeile werden ausgelesen:
%toeWeek
NavData(IndexSat).toeWeek(IndexZeit) = sscanf(cell{1,1}, '%f');
end
%-------------------------Sat.PRN überprüfen-----------------------------
for i = 1 : size(NavData) ifsscanf(cell{1,1}, '%2i') == NavData(i).SatPRN disp('einen moment bitte, Datensatz muss auf Aktualität überprüft werden')
SatCount = SatCount - 1; % ... wird die Anzahl der unterschiedl. Satelliten wieder um 1 verringert for j = 1:size(NavData(i).tocYear)% Überprüfen auf neuen Datensatz anhand der ToC: if NavData(i).tocYear(j) ~= sscanf(array{2,1}, '%2i') | NavData(i).tocMonth(j) ~= sscanf(array{3,1}, '%2i') | ...
NavData(i).tocDay(j) ~= sscanf(array{4,1}, '%2i') | NavData(i).tocHour(j) ~= sscanf(array{5,1}, '%2i') | ...
NavData(i).tocMinute(j) ~= sscanf(array{6,1}, '%2i') | NavData(i).tocSecond(j) ~= sscanf(array{7,1}, '%f')
check_time = check_time + 1;
check = 1;
end end if check_time == 1;
check == 0;
end end
close = fclose(fid);
ifclose == -1 ERROR = 11;
disp('Das Programm wird umgehend geschlossen') error('ERROR 11: Schließen der Datei nicht möglich') else disp('Schließen der Datei war erfolgreich') break;
end
Das mach wahrscheinlich nicht das, was Du erwartest. Du solltest eigentlich auch eine MLint-Warnung in dieser Zeile bekommen, falls Du eine nicht-historische Matlab-Version verwendest. Du meinst sicherlich:
Ich bin zwar net zhaus, aber das is doch am ende vom code, daher eigentlich Net relevant.
Soweit ich das verstanden habe läuft Dein Programm, wenn Du "while(1)" auskommentierst. Wenn Du per "check == 0" die Variable "check" am Ende des Codes eben nicht auf 0 setzt, werden im zweiten Durchlauf der WHILE-Schleife wieder 7 Zeilen überlesen. Das sollte zu der Fehlermeldung führen, wenn die WHILE-Schleife nicht auskommentiert ist.
Wenn Du ein anderes Problem mit dem Code hast, beschreibe es doch noch einmal.
Gruß, Jan
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 14.11.2010, 21:14
Titel:
danke jan!
so an dem check = 1 hats nicht gelegen, eine if bedingung weg, und die while schleife anders gesetzt und es haut hin
lg berta
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.