WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

dat einlese

 

berta

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.11.2010, 18:06     Titel: dat einlese
  Antworten mit Zitat      
hej!

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....

irgendwer ideen?? wär echt dankbar... Smile

lg
berta


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 11.11.2010, 23:23     Titel: Re: dat einlese
  Antworten mit Zitat      
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
Private Nachricht senden Benutzer-Profile anzeigen
 
berta

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.11.2010, 18:50     Titel:
  Antworten mit Zitat      
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 Very Happy

lg berta

Code:
%Codeausschnitt von dem nicht funktionierendem part....

if ERROR == 0
    check_time = 1;
    SatCount = 1;
    check = 1;
    line = fgetl(fid);
    cell = strread(line, '%s');
   
   % while (1)
        if check == 0
            for i = 1:7
                line = fgetl(fid)
            end
        else
            IndexSat = sscanf(cell{1,1}, '%2i');
            IndexZeit = check_time;
         
            if size(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
           
            %-------------------------ERSTE ZEILE--------------------------------
            %folgende informationen der ersten Zeile werden ausgelesen:
            %Jahr, Monat, Tag, stunde, min, sek,
            NavData(IndexSat).SatPRN = sscanf(cell{1,1}, '%2i');
            NavData(IndexSat).tocYear(IndexZeit) = sscanf(cell{2,1}, '%2i');
            NavData(IndexSat).tocMonth(IndexZeit) = sscanf(cell{3,1}, '%2i');
            NavData(IndexSat).tocDay(IndexZeit) = sscanf(cell{4,1}, '%2i');
            NavData(IndexSat).tocHour(IndexZeit) = sscanf(cell{5,1}, '%2i');
            NavData(IndexSat).tocMinute(IndexZeit) = sscanf(cell{6,1}, '%2i');
            NavData(IndexSat).tocSecond(IndexZeit) = sscanf(cell{7,1}, '%f');
            NavData(IndexSat).SVclockBias(IndexZeit) = sscanf(cell{8,1}, '%f');
            NavData(IndexSat).SVclockDrift(IndexZeit) = sscanf(cell{9,1}, '%f');
            NavData(IndexSat).SVclockDriftRate(IndexZeit) = sscanf(cell{10,1}, '%f');
           
            %-------------------------ZWEITE ZEILE-------------------------------
            line = fgetl(fid);
            cell = strread(line, '%s');
            %folgende informationen der zweiten Zeile werden ausgelesen:
            % crs, deltan, M0
           
            NavData(IndexSat).crs(IndexZeit) = sscanf(cell{2,1}, '%f');
            NavData(IndexSat).deltan(IndexZeit) = sscanf(cell{3,1}, '%f');
            NavData(IndexSat).M0(IndexZeit) = sscanf(cell{4,1}, '%f');
           
           
            %-------------------------DRITTE ZEILE-------------------------------
            line = fgetl(fid);
            cell = strread(line, '%s');
            %folgende informationen der dritten Zeile werden ausgelesen:
            %Cuc, e, cus, sqrta
            NavData(IndexSat).cuc(IndexZeit) = sscanf(cell{1,1}, '%f');
            NavData(IndexSat).e(IndexZeit) = sscanf(cell{2,1}, '%f');
            NavData(IndexSat).cus(IndexZeit) = sscanf(cell{3,1}, '%f');
            NavData(IndexSat).sqrta(IndexZeit) = sscanf(cell{4,1}, '%f');
           
            %-------------------------VIERTE ZEILE-------------------------------
            line = fgetl(fid);
            cell = strread(line, '%s');
            %folgende informationen der vierten Zeile werden ausgelesen:
            %toeSecond, cic, Omega, cis
            NavData(IndexSat).toeSecond(IndexZeit) = sscanf(cell{1,1}, '%f');
            NavData(IndexSat).cic(IndexZeit) = sscanf(cell{2,1}, '%f');
            NavData(IndexSat).Omega(IndexZeit) = sscanf(cell{3,1}, '%f');
            NavData(IndexSat).cis(IndexZeit) = sscanf(cell{4,1}, '%f');
           
           
            %-------------------------FÜNFTE ZEILE-------------------------------
            line = fgetl(fid);
            cell = strread(line, '%s');
            %folgende informationen der fünften Zeile werden ausgelesen:
            %I0, crc, omega, Omegadot
            NavData(IndexSat).i0(IndexZeit) = sscanf(cell{1,1}, '%f');
            NavData(IndexSat).crc(IndexZeit) = sscanf(cell{2,1}, '%f');
            NavData(IndexSat).omega(IndexZeit) = sscanf(cell{3,1}, '%f');
            NavData(IndexSat).Omegadot(IndexZeit) = sscanf(cell{4,1}, '%f');
           
           
            %-------------------------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)
            if sscanf(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
           
           
           
           
           
           
        end
  %  end
end




close = fclose(fid);
if close == -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








 
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 12.11.2010, 21:59     Titel:
  Antworten mit Zitat      
Hallo berta,

Dein Code ist nicht gerade auf das Notwendige zusammengekürzt. Trotzdem fiel mir etwas auf:
Code:
check == 0;

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:
Code:
check = 0;

Hilft das?
Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
berta

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.11.2010, 23:24     Titel:
  Antworten mit Zitat      
Ich bin zwar net zhaus, aber das is doch am ende vom code, daher eigentlich Net relevant.... sorry wg dem langen Code..
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 12.11.2010, 23:31     Titel:
  Antworten mit Zitat      
Hallo berta,

Zitat:
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
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.11.2010, 21:14     Titel:
  Antworten mit Zitat      
danke jan!

so an dem check = 1 hats nicht gelegen, eine if bedingung weg, und die while schleife anders gesetzt und es haut hin Smile

lg berta
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

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.