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

Importieren bis zur leeren Zelle

 

day

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.12.2011, 14:40     Titel: Importieren bis zur leeren Zelle
  Antworten mit Zitat      
Hallo,

ich habe folgendes Problem:

Ich will eine Variable aus einer externen Datei (Tabelle, aber keine Excel-Datei) in den Workspace importieren, brauche dabei aber nur die Zahlenwerte.

Mein bisheriger Code:

i = {};
t1 = dlmread('Dateiname','','A32..A%i');
t2 = dlmread('Dateiname','','B32..B%i');
....

Zeilen 1 bis 31 brauche ich nicht. Es sollen mehrere Dateien geladen werden. Dabei haben die Dateien unterschiedlich viele Zeilen. Mein derzeitiges Problem ist, dass die Spalten B,C,D,E bei meiner "Versuchsdatei" bei 250 enden, in Zelle A251 jedoch 'Ende' steht. Deshalb hab ich den Code zur Zeit so stehen:

t1 = dlmread('Dateiname','','A32..A250');
t2 = dlmread('Dateiname','','B32..B%i');
t3 = dlmread('Dateiname','','C32..C%i');
....

da sonst die Fahlermeldung 'Mismatch between file and format string.
Trouble reading number from file (row 250u, field 1u) ==> **END\n

Und was mache ich wenn bei einer Datei die Werte schon in Zeile 25 beginnen? Da kann man sicher auch eine geignete Variable einbauen?!

Hab im Internet leider nichts darüber finden können. Vielen Dank schonmal!


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 30.12.2011, 17:10     Titel: Re: Importieren bis zur leeren Zelle
  Antworten mit Zitat      
Hallo day,

Code:

i = {};
t1 = dlmread('Dateiname','','A32..A%i');

Was soll "A%i" bewirken?

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
day

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.12.2011, 21:20     Titel:
  Antworten mit Zitat      
Hallo Jan,

t1 sollen die Werte von A32 bis A250 (nur in diesem Fall) zugewiesen werden. Bei den anderen Spalten (B, C ..) funktioniert das auch, auch wenn der letzte Wert eine Null ist. Ich will den ti (t1, t2,...) die Werte der Spalten (A,B,...) ab Zeile 32 zuweisen. Gestoppt werden soll eine Zeile bevor die Zelle leer ist bzw. bevor (wie in Spalte A) ein String (**END) in der Zelle steht.

Das geht bestimmt relativ einfach, ich bin nur blutiger Anfänger und im Internet nach längerer Suche noch nicht fündig geworden.

gruß
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.01.2012, 18:55     Titel:
  Antworten mit Zitat      
Hat keiner eine Idee wie ich ausdrücken kann, dass der Import eine Zeile vor der nächsten leeren Zelle endet? Dann könnte ich das mit dem string überspringen und in dieser Spalte den Import schon 2 Zeilen vorher enden lassen. Wäre echt dankbar über Hilfe!
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 03.01.2012, 01:14     Titel:
  Antworten mit Zitat      
Hallo,

ich habe die Fragen mehrfach durchgelesen und verstehe sie nicht. Man kann nur eine gewisse Anzahl von Spalten und Zeilen einlesen. Du kannst lediglich hinterher die leeren Zellen suchen und entfernen.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
day

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.01.2012, 14:23     Titel:
  Antworten mit Zitat      
Hallo Jan,

wie du im Anhang siehst, haben die Dateien unterschiedlich viele Zeilen. Um das Matlab Programm nicht immer umschreiben zu müssen ( t1 = dlmread('DATEI1','','A32..A251') ; t2 = dlmread('DATEI2','','A32..A190') ) , suche ich einen Ansatz: t = dlmread('DATEI','','A32..A***') sodass die Variable mit der letzten Zahl endet (also bei t2 keine 61 Nullen vorhanden sind, wenn ich alles bis Zeile 251 laufen lasse). Das importieren der Dateien hat bisher nur mit dlmread geklappt.

Ab Spalte B kann ich die Variablen auch so importieren
z = dlmread('DATEI','','B32..B%');
u = dlmread('DATEI','','E32..E%');
(auch wenn ich das mit dem %-Zeichen nicht verstehe, aber es klappt Smile )

Nur mit Spalte A klappt das nicht, denn die Datei wird in Matlab so eingelesen, dass die Werte, die du im Anhang in Spalte B findest, scheinbar schon in Spalte A stehen und das **END direkt darunter steht. Dann kommt für t = dlmread('DATEI','','A32..A%'); die Fehlermeldung 'Mismatch between file and format string'.

Die ganze Sache ist etwas kompliziert zu erklären, aber ich hoffe du hast es soweit verstanden und kannst mir weiterhelfen.

Grüße

Werte.jpg
 Beschreibung:

Download
 Dateiname:  Werte.jpg
 Dateigröße:  192.64 KB
 Heruntergeladen:  575 mal
Werte.jpg
 Beschreibung:

Download
 Dateiname:  Werte.jpg
 Dateigröße:  192.64 KB
 Heruntergeladen:  593 mal
 
Andy386
Forum-Guru

Forum-Guru


Beiträge: 485
Anmeldedatum: 24.06.09
Wohnort: ---
Version: 7.1/8
     Beitrag Verfasst am: 22.01.2012, 03:42     Titel:
  Antworten mit Zitat      
ich glaube der öfters genommene Ansatz sieht so aus:
Ganze Datei in eine Matrix laden und dann gucken, wo Zahlen sind, rüberkopieren, ggf. Matrix löschen, fertig.

%i könnte eine natürliche Zahl sein, zu Mindest nach fprintf-Normung.

Aber du kannst im dlmread im Grunde nur den Lesebereich festlegen, interpretiernen könnte man ggf. auch schon davor, dass dann alles in lustige char-strings packen und übergeben - oder sich das nicht antun, und die Matrix nach (komplettem) Einlesen bearbeiten.

[edit] mir ist beim dlmread (du nimmst doch matlab, oder?) unklar, dass es
a) mit Excelbezeichnern so brav arbeitet und
b) Bereiche mit .. bezeichnen lässt
_________________

Ich hasse es wenn die Leute Fragen stellen, man dann versucht sich Mühe zu geben, und diejenigen ihren Thread nie wieder besuchen...
Private Nachricht senden Benutzer-Profile anzeigen
 
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.