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

Output erzeugen aus eingelesener Excel-Tabelle

 

Friedolien
Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 13.10.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.04.2019, 13:00     Titel: Output erzeugen aus eingelesener Excel-Tabelle
  Antworten mit Zitat      
Hallo,

bin etwas am verzweifeln und hoffe sehr mir kann jemand helfen Smile

Zum Problem: Ich habe mir ein Skript geschrieben, welches Daten aus einer Excel-Tabelle, welche mit Zahlen und Buchstaben in unterschiedlichen Formen gefüllt ist (Kombi aus Buchstaben und Zahlen, nur Buchstaben, nur Zahlen), erstellt. Das klappt soweit auch ganz gut. Die einzelnen Variablen stehen, wie gewünscht, extrahiert in Form von Double-Vektoren, als Zeilenvektor (1x109 Dimension).

Da ich die Daten in eine andere Datei umwandeln möchte und die Reihenfolge ebenfalls ändern möchte, habe ich dafür den Befehl

Code:

dlmwrite('test_scenario.csv',[transpose(lat), transpose(lon), transpose(hdg), transpose(altnm), transpose(speed)],'delimiter',' ')
 


verwendet. Dabei werden die Zeilenvektoren in Spaltenvektoren umgewandelt und nebeneinander angeordnet, in einer .csv Datei gespeichert und die Trennung der Spalten durch ein Leerzeichen durchgeführt. Soweit so gut. Das klappt alles wie es soll.

Mein Problem besteht nun darin, dass vor der "lat" Spalte noch mindestens 3 weitere eingefügt werden:
1. eine Spalte, die das Uhrzeit-Format der Excel-Tabelle (Mo 12:18:27) in das Format 12:18:27.00> für die .csv überführt
2. 2 weitere Spalten, die Zahlen und Buchstaben enthalten, wie "KL123" oder nur "addwpt"
Ich habe viel probiert, kriege es aber leider nicht zum laufen, dass in meinem Output die gewünschten Spalten hinzugefügt werden. Vermutlich stimmt das Format String-Double nicht überein, sodass die Spalten dem Vektor nicht hinzugefügt werden können. Ich bin leider auch ein Matlab-Anfänger und würde mich sehr über Hilfe freuen. Wenn weitere Informationen benötigt werden, schreibt mir bitte einfach.

P.S.: Hatte schon versucht die Spalten mit Text als "Cell" zu deklarieren, was dann zwar als Variable erstellbar war, jedoch ebenfalls nicht zum vorhandenen Output hinzugefügt werden konnte...

Viele Grüße
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 16.04.2019, 13:06     Titel:
  Antworten mit Zitat      
Hallo,

wenn du die Daten als Table anlegst, kannst du writetable verwenden.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Friedolien
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 13.10.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.04.2019, 13:39     Titel:
  Antworten mit Zitat      
Hallo,
vielen Dank Harald für den Tipp. Habe ich gleich versucht umzusetzen. Prinzipiell sieht das nicht schlecht aus. Allerdings habe ich noch 2 Probleme damit:

Wenn ich
Code:
'delimiter', 'space'
verwende, werden mir in der .csv Datei dann vor und nach meiner Textspalte anstatt Leerzeichen Gänsefüße angezeigt, als "beliebiger Text"123 123 123.
Desweiteren wird durch die Tabelle zusätzlich ein Zeilenvektor in der .csv mit eingefügt, der dann die Spaltenbezeichnungen enthalten würde, was ich aber nicht möchte, weil dadurch eine zusätzliche Spalte in der Datei eingefügt wurde. Kann man das umgehen?

Sonst ist die Lösung gut.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 16.04.2019, 13:49     Titel:
  Antworten mit Zitat      
Hallo,

um zu sagen, woher die " " kommen bzw. wie man sie verhindern kann, bräuchte ich ein reproduzierbares Beispiel. Vielleicht die Option QuoteStrings?

Zitat:
Desweiteren wird durch die Tabelle zusätzlich ein Zeilenvektor in der .csv mit eingefügt, der dann die Spaltenbezeichnungen enthalten würde

Option WriteVariableNames auf false setzen

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Friedolien
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 13.10.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.04.2019, 13:59     Titel:
  Antworten mit Zitat      
Moin,

hammer. Das hätte ich nicht hinbekommen. Wirklich, tausend dank. Das hat mir richtig weitergeholfen Smile

Danke und Grüße
Private Nachricht senden Benutzer-Profile anzeigen
 
Friedolien
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 13.10.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.04.2019, 15:54     Titel:
  Antworten mit Zitat      
Eine Frage bleibt noch offen zum Problem 1:

Ich habe eine Cell mit 1x109 Dimension. In jedem Eintrag steht die Abkürzung für einen Wochentag und die dazugehörige Uhrezit. Also zum Beispiel 'Mo 12:18:27'.
Ich möchte gerne in meine Tabelle nur die Uhrzeit hinzufügen und die Wochentage "herauslöschen" Bin schon soweit gekommen, dass dies wohl die Funktion strsplit ermöglicht, allerdings habe ich es nicht hinbekommen das gewünschte Ergebnis zu erzielen. Schaffe es nur eine Cell zu erstellen, die wiederum in jedem Eintrag eine 1x2 Cell aufweist, wo der Wochentag und die Uhrzeit getrennt stehen.

Wie ist es möglich einen Vektor nur mit der Uhrzeit zu erstellen?

Grüße
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 16.04.2019, 16:35     Titel:
  Antworten mit Zitat      
Hallo,

extractAfter sollte helfen.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Friedolien
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 13.10.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.04.2019, 16:42     Titel:
  Antworten mit Zitat      
Vielen Dank. das hilft. Gibts eine andere Möglichkeit, die ohne Input auskommt, wonach "abgeschnitten" werden soll ("Mo") um das automatisiert auch für andere Wochentage zu ermöglichen?
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 16.04.2019, 16:43     Titel:
  Antworten mit Zitat      
Hallo,

du kannst bei extractAfter auch die Position angeben.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Friedolien
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 13.10.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.04.2019, 17:06     Titel:
  Antworten mit Zitat      
aaah danke. Ist es möglich hinter jeden Uhrzeit Eintrag ein ">" Zeichen einzufügen, dies wird leider für meine Simulation an dieser Stelle immer noch benötigt.

P.S.: Habs: mit insertAfter Smile
Private Nachricht senden Benutzer-Profile anzeigen
 
Friedolien
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 13.10.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.04.2019, 10:24     Titel:
  Antworten mit Zitat      
Moin,

neues Problem, was noch zu dem obigen gehört:

Ich habe mir wie oben beschrieben in Tabellenform eine .csv Datei erstellt, die soweit auch top ist. Nun würde ich gerne über dieser eine neue Zeile einfügen, die allerdings eine Spalte weniger haben wird und auch eine andere Reihenfolge der in den Spalten stehenden Parameter enthält. Da ich vermute, dass das über die Tabelle nicht so ohne weiteres machbar ist, da eine Spalte weniger vorhanden ist, dachte ich mir, ich erstelle diese neue Zeile als neue .csv Datei. Gibt es nun eine Möglichkeit, diese der ersten hinzuzufügen und an die erste Stelle zu packen? Dabei muss die Zeile nicht direkt der anderen Tabelle angefügt sein und kann auch freie Zeilen enthalten.

Hoffe da kann mir jemand helfen Smile
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

eine Möglichkeit: beide Dateien mit fileread einlesen, die Zeichenketten aneinanderhängen und mit fprintf rausschreiben.
Ansonsten gibt es vielleicht auch Tools, Dateien aneinanderzuhängen.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Friedolien
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 13.10.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.04.2019, 15:45     Titel:
  Antworten mit Zitat      
Habs leider nicht lösen können. Einiges wieder probiert...

habe zuerst die Daten in zwei Tabellen schreiben lassen und diese dann jeweils in eine.csv Datei speichern lassen (_copy_test_scenario_CRE und ..._MOVE).
Anschließend via fileread in Matlab wieder einlesen lassen:

Code:
text_CRE = fileread('copy_test_scenario_CRE.csv');
text_MOVE = fileread('copy_test_scenario_MOVE.csv');


CRE beinhaltet ist dabei 9 Spalten und eine Zeile groß, MOVE 8 Spalten und 108 Zeilen.
Beide .cvs Files sollen nun in eine gespeichert werden, wobei _CRE die erste Zeile bilden soll. Habe folgendes probiert:

Code:
both = strcat(text_CRE, text_MOVE);
fid = fopen('ready.csv', 'W');
fprintf(fid,'%s\n',both(:));
fclose(fid);


Dies erstellt eine Datei, wobei leider die erste Zeile der 2. Datei neben der Zeile der ersten Datei steht (wahrscheinlich durch strcat "verursacht", der für eine horizontale Verbindung sorgt, wie ich das verstehe) Deswegen wollte ich vertcat probieren, da ist dann aber ein Dimensionsfehler, da die Spalten beider Dateien gleich große sein müssen.

Jemand eine Idee, wie ich das lösen kann?

Edit.: Habs, habe both in eine celle via {}gemacht und dann dies bei fprintf auch angepasst. Das Ergebnis ist das gewünschte
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 - 2024 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.