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

matrix mit leeren elementen?

 

opti

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.02.2012, 11:12     Titel: matrix mit leeren elementen?
  Antworten mit Zitat      
hallo zusammen,

ich habe ein txt-file in dem eine 38x16 matrix steht. allerdings sind in der letzten zeile nur noch die beiden erste elemente da und der rest ist "leer". also auch keine nullen. ich habe mir eine funktion geschrieben, die mir das txt-file einliest und die matrix dann wieder ausgibt. aber matlab schreibt mir für die fehlenden elemente jetzt nullen in die matrix. kann ich das irgendwie vermeiden? ich will die nullen nicht haben...

danke für eure hilfe!

gruß opti


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.502
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 10.02.2012, 11:24     Titel:
  Antworten mit Zitat      
Hallo,

poste am besten den zum Einlesen verwendeten Code und eine Beispieldatei.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
opti

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.02.2012, 11:33     Titel:
  Antworten mit Zitat      
hier wäre mal mein code.

Code:
function [set1] = readTXTSet

inputFilename = 'Daten.txt';

    % open file
    fid = fopen(inputFilename,'r','b');
 
    currentString = fgetl(fid); % Read line from file, removing newline characters
   
    while (size(findstr('*Nset',currentString))==0)
        currentString = fgetl(fid);
    end
       
    currentString = fgetl(fid);
   
    setNumber1 = 38;
    set1 = zeros(setNumber1,16);
    offset = 1;
   
    while (size(findstr('*Elset, ',currentString))==0)
        if offset < 38
            currentArray = strread(currentString,'%f','whitespace','n');
            set1(offset, 1:16) = currentArray(1:16);
            currentString = fgetl(fid);
            offset = offset+1;
        else
            currentArray = strread(currentString,'%f','whitespace','n');
            set1(offset, 1:2) = currentArray(1:2);
            currentString = fgetl(fid);
        end
    end
       
    fclose(fid);
   
end


und mein txt file...

Daten.txt
 Beschreibung:

Download
 Dateiname:  Daten.txt
 Dateigröße:  2.45 KB
 Heruntergeladen:  304 mal
 
opti

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.02.2012, 11:42     Titel:
  Antworten mit Zitat      
oder gibt es eine möglichkeit, dass ich alle elemente in einen array lade und dann nach jedem 16. element einen zeilenumbruch mache?
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.502
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 10.02.2012, 12:23     Titel:
  Antworten mit Zitat      
Hallo,

warum so kompliziert?

Code:
function [set1] = readTXTSet

inputFilename = 'Daten.txt';

% open file
fid = fopen(inputFilename);

currentString = fgetl(fid); % Read line from file, removing newline characters

while (size(findstr('*Nset',currentString))==0)
    currentString = fgetl(fid);
end
set1 = cell2mat(textscan(fid, repmat('%f', 1, 16), 'CollectOutput', true));
fclose(fid)


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
opti

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.02.2012, 13:05     Titel:
  Antworten mit Zitat      
hallo harald,

erstmal vielen dank für die schnelle hilfe. aber irgendwie funktioniert das bei mir nicht so ganz. matlab läuft jetzt schon fast 10 minuten und ich habe noch immer kein ergebnis...

woran könnte das denn liegen?
 
opti

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.02.2012, 13:41     Titel:
  Antworten mit Zitat      
ok, es war mein fehler. ich hab vergessen meine alte schleife zu löschen. jetzt funktioniert es.

jetzt steht allerdings NaN an den "leeren" stellen. so dass ich da überhaupt nichts stehen hab geht nicht, oder?
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.502
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 10.02.2012, 14:08     Titel:
  Antworten mit Zitat      
Hallo,

NaN bedeutet "not a number" und ist so nahe an "nichts", wie es geht.

Die Frage wird sein, wie du die Daten weiterverarbeiten willst. Es kann durchaus sinnvoll sein, die letzte Datenreihe einfach wegzulassen.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
opti

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.02.2012, 14:27     Titel:
  Antworten mit Zitat      
das habe ich mir auch schon überlegt, ob ich die letzte reihe einfach weg lasse, aber ich brauche die beiden werte.

mein ziel ist es, ein input-file für abaqus zu schreiben. das funktioniert auch alles so wie es soll. nur mit dem einlesen von diesen daten habe ich das problem, dass die "matrix" nicht an jedem element einen eintrag hat und ich es genauso in das input-file schreiben müsste, damit mir abaqus keinen fehler ausgibt...

gruß opti
 
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.