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

Leere Zeilen löschen in .csv-Datei/lesen einzelner Zeilen

 

LisaM
Forum-Anfänger

Forum-Anfänger


Beiträge: 45
Anmeldedatum: 04.02.14
Wohnort: Deutschland
Version: ---
     Beitrag Verfasst am: 05.02.2014, 12:08     Titel: Leere Zeilen löschen in .csv-Datei/lesen einzelner Zeilen
  Antworten mit Zitat      
Hallo,

ich habe eine .csv-Datei (kann die Datei irgendwie nicht anhängen), bei der oben leere Zeilen stehen, welche ich gerne löschen möchte. Also die 1., die 4. und die 7. Zeile sind leer und sollen gelöscht werden.

Mein nächstes Problem, ich möchte dann aus der neuen 1. und 2. Zeile eine Tabelle machen mit Spaltentrennung durch Kommata und aus der 3. und 4. Zeile auch eine Tabelle mit gleicher Trennung. Aus den Daten der 5. bis letzten Zeile soll dann eine weitere kommagetrennte Tabelle erstellt werden.

Beispiel Auszug aus der Datei:

Code:


##LEA Interface,Version,Typ
##READY,2.12,AM

#timerFreq,NULL1,NULL2,NULL3,NULL4,NULL5,NULL6,NULL7,NULL8,NULL9,NULL10,NULL11,NULL12
#64,-1216,-423,-1447,-1593,-1020,-1020,-1018,-928,-991,-1914,-1576,2048

Zeit,FlexionR,AbduktionR,FlexionL,AbduktionL,KnieR,KnieL,DorsalR,RotationR,DorsalL,RotationL,RotTrans,Leer
0,2068,2045,2036,1999,2041,2043,2032,2043,2043,2048
1,2068,2045,2037,2001,2041,2043,2032,2043,2043,2048
2,2068,2045,2037,2001,2041,2043,2032,2043,2043,2048
3,2068,2044,2037,2002,2041,2043,2033,2043,2043,2048
4,2068,2044,2037,2003,2041,2043,2033,2043,2043,2048
5,2068,2044,2037,2004,2041,2043,2033,2043,2043,2048
6,2068,2044,2037,2005,2041,2043,2033,2043,2043,2048

 


Gruß,
Lisa
Private Nachricht senden Benutzer-Profile anzeigen


bage86
Forum-Anfänger

Forum-Anfänger


Beiträge: 30
Anmeldedatum: 06.11.13
Wohnort: ---
Version: R2013a Student
     Beitrag Verfasst am: 05.02.2014, 13:49     Titel:
  Antworten mit Zitat      
Hallo

Einlesen kannst du deine csv-Datei so:

Code:
fID=fopen('D:\Deine_Datei.csv','rt');
M=textscan(fID,'%s','Delimiter',',');
fclose(fID);


Und die entsprechenden Werte ansprechen zb so:

Code:

A=[M{1,1}(1:3,1)';M{1,1}(4:6,1)'];
B=[M{1,1}(7:19,1)';M{1,1}(20:32,1)'];


Ob das jetzt die ideale Lösung ist weiß ich nicht, aber es sollte funktionieren.

Gruß Bastian
Private Nachricht senden Benutzer-Profile anzeigen
 
LisaM
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 45
Anmeldedatum: 04.02.14
Wohnort: Deutschland
Version: ---
     Beitrag Verfasst am: 05.02.2014, 17:13     Titel:
  Antworten mit Zitat      
Hallo Bastian,

danke, für Deine Antwort.
Leider funktioniert die Lösung aber nicht so ganz, da ich dann alle Werte in einer einzigen Spalte stehen habe. Aber ich bräuchte die Daten in einzelne Spalten aufgeteilt.

Ist es gar nicht möglich irgendwie leere Zeile anzusprechen und diese ganz einfach zu löschen?

Gruß
Lisa
Private Nachricht senden Benutzer-Profile anzeigen
 
bage86
Forum-Anfänger

Forum-Anfänger


Beiträge: 30
Anmeldedatum: 06.11.13
Wohnort: ---
Version: R2013a Student
     Beitrag Verfasst am: 05.02.2014, 17:40     Titel:
  Antworten mit Zitat      
Die eingelesene Cell kannst du ja dann einrichten wie du möchtest, in meinem BSP wäre A:

'##LEA Interface' 'Version' 'Typ'
'##READY' '2.12' 'AM'

Mit {1,1} sprichst du die Zelle an und mit (1:3,1) die ersten drei Zeilen der darin enthaltenden Matrix, mit ' transponierst du alles (schreibst es nebeneinander in Spalten) und mit ; beginnst du die nächste Zeile.

Deine leeren Zeilen verschwinden ja schon beim einlesen.

Ansonsten kann man Zeilen aus einer Matrix so löschen:

Code:
M=rand(3,3)
M(3,:)=[]


Hier wird also zB die dritte Zeile komplett gelöscht.

Vielleicht ´hilft dir dieser Ansatz:

Code:
fID=fopen('D:\Mappe1.csv','rt');
M=textscan(fID,'%s','Delimiter','\n');
fclose(fID);

M{1,1}(3,:)=[];


Zuletzt bearbeitet von bage86 am 05.02.2014, 17:47, insgesamt einmal bearbeitet
Private Nachricht senden Benutzer-Profile anzeigen
 
Seban
Forum-Meister

Forum-Meister


Beiträge: 600
Anmeldedatum: 19.01.12
Wohnort: ---
Version: ab R2014b
     Beitrag Verfasst am: 05.02.2014, 17:43     Titel:
  Antworten mit Zitat      
Hallo Lisa,

Ich glaube das Problem ist, dass in den Zeilen zum Teil unterschiedliche Daten stehen.

So
Code:
fID=fopen('temp.csv','rt');
M=textscan(fID,'%s %s %s %s %s %s %s %s %s %s %s %s %s','Delimiter',',');
fclose(fID);

kann man die gesamten Daten als Strings in mehreren Spalten importieren und müsste diese Strings nun noch umformen, bspw mit str2num.

In dem Zusammenhang auch hilfreich: http://www.mathworks.de/de/help/mat.....data-in-a-cell-array.html

Grüße,
Seban
_________________

Richtig fragen
Debugging
Private Nachricht senden Benutzer-Profile anzeigen
 
LisaM
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 45
Anmeldedatum: 04.02.14
Wohnort: Deutschland
Version: ---
     Beitrag Verfasst am: 05.02.2014, 18:28     Titel:
  Antworten mit Zitat      
@Seban

Deine Hilfe war super! Habe nur noch eine kleine Frage dazu. Habe jetzt als Code folgendes da stehen:

Code:

filename = uigetfile('.csv');

fID=fopen(filename,'rt');
M=textscan(fID,'%s %s %s %s %s %s %s %s %s %s %s %s %s','Delimiter',',');
fclose(fID);
 


Das legt mir meine Daten ja alle in M ab. Und zwar so, dass ich jetzt in z.B. M(3,1) ein Datenarray stehen habe. Wie kann ich denn jetzt auf die Werte in dem Array zugreifen? Ich müsste ja im Prinzip zwei Zugriffe festlegen, einen auf M(3,1) und dann in dem Array auf die Zeile, deren Info ich brauche. Nur wie mache ich das?

Gruß
Lisa
Private Nachricht senden Benutzer-Profile anzeigen
 
Seban
Forum-Meister

Forum-Meister


Beiträge: 600
Anmeldedatum: 19.01.12
Wohnort: ---
Version: ab R2014b
     Beitrag Verfasst am: 05.02.2014, 19:08     Titel:
  Antworten mit Zitat      
Wie Bastian oben schon geschrieben hat, bspw. so
Code:
M{1,3}(6,1)
.

Da die Daten aber alle Strings sind, musst du sie noch umwandeln
Code:


Ich würde aber als ersten Schritt nach dem Import die Daten sinnvoll umwandeln, so dass du nicht ständig mit cells arbeiten musst. Bspw. könntest du aus den Zeilen 6 bis Ende eine Matrix erstellen.

Code:
z1 = [M{1,1}(6:end) M{1,2}(6:end) M{1,3}(6:end)]; % weitere Zellen noch einfügen
z2 = str2double(z1);


Grüße,
Seban
_________________

Richtig fragen
Debugging
Private Nachricht senden Benutzer-Profile anzeigen
 
LisaM
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 45
Anmeldedatum: 04.02.14
Wohnort: Deutschland
Version: ---
     Beitrag Verfasst am: 05.02.2014, 21:40     Titel:
  Antworten mit Zitat      
Besten Dank für die Antwort!! Habe es zwar jetzt ein klein wenig anders gemacht, aber es funktioniert endlich!

Danke nochmal! Smile
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.