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

Wie Werte aus einer Zeile in mehrere Spalten schreiben

 

Konfetti
Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 16.07.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.07.2013, 15:30     Titel: Wie Werte aus einer Zeile in mehrere Spalten schreiben
  Antworten mit Zitat      
Hallo,

ich bin Matlab-Anfängerin und habe eine Txt-Datei mit >16.000 Werten, die alle in einer einzigen Zeile stehen - durch Tab getrennt.
Die Werte gehören zu einer Datenreihe und haben das Format

Tag Monat Jahr Uhrzeit Tag Monat Jahr Uhrzeit ...

Ich möchte jetzt die Matrix so formatieren, dass ich statt einer Zeile 4 Spalten habe, in der die jeweiligen Tage, Monate usw. untereinander stehen.

Wie kan ich das machen?
und wie kann ich die neue Matrix dann als txt-Datei speichern?

Vielen Dank schonmal!
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: 16.07.2013, 16:07     Titel:
  Antworten mit Zitat      
Hi,

Hab gerade keine Zeit, etwas zu coden. Aber hier kannst du dich schon mal einlesen: http://www.mathworks.de/de/help/matlab/text-files.html

Grüße,
Seban
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 16.07.2013, 16:40     Titel: Re: Wie Werte aus einer Zeile in mehrere Spalten schreiben
  Antworten mit Zitat      
Hallo Konfetti,

Code:
Data = fileread(FileName);
DataC = regexp(Data, '\t', 'split');
FID = fopen(NewFileName, 'w');
if FID == -1, error('Cannot open file for writing'); end
fprintf(FID, '%s\t%s\t%s\t%s\t\n', DataC{:});
fclose(FID);

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Konfetti
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 16.07.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.07.2013, 17:36     Titel:
  Antworten mit Zitat      
Hi Jan,

danke für die Antwort!

Funktioniert aber irgend wie noch nicht.... Er kopiert mir nur die Datei nochmal genau gleich formatiert in das neue File rein.

Muss ich noch irgend was ersetzen/einsetzen im code?
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 17.07.2013, 10:48     Titel:
  Antworten mit Zitat      
Hallo

hast du dir das mit richtigen Editor angeschaut wie Notepad++?
Wenn du das Txt-File mit Standard Notepad anschaust, dann sieht das so aus als, ob alles in einer Zeile wäre. Windows-Notepad braucht noch Carriage Return, um Neue Zeile richtig darzustellen

die Lösung wäre dazu z.B. bei FOPEN als Parmeter zu setzen,
dann wird automatisch Carriage Return gesetzt :

Code:

Data = fileread(FileName);
DataC = regexp(Data, '\t', 'split');
FID = fopen(NewFileName, 'wt+');
if FID == -1, error('Cannot open file for writing'); end
fprintf(FID, '%s\t%s\t%s\t%s\t\n', DataC{:});
fclose(FID);
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 17.07.2013, 12:40     Titel:
  Antworten mit Zitat      
Hallo Konfetti,

Das ist aber merkwürdig. Denn am Sourcecode sieht man ja, dass eben nicht alles genau kopiert wird, sondern dass ein \n nach jedem 4. String eingefügt wird.
Aber Dennys Idee könnte das Problem treffen:
Alle Editoren (die ich kenne) können das \n-Zeichen korrekt darstellen, bis auf den "Editor" von Windows. Der scheitert wie schon in Windows 3.1 immer noch an den ansonsten überall erkannten Linux-Linebreaks. M-Files werden seit vielen Jahren ebenfalls bevorzugt mit diesen Linebreaks geschrieben.

Also empfehle ich, den mitgelieferten "Editor" in Rente zu schicken, WordPad, Notepad++ oder Matlab's Editor zu verwenden. Selbst Excel sollte das File richtig lesen können.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Konfetti
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 16.07.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.07.2013, 13:54     Titel:
  Antworten mit Zitat      
Hi Denny, Hi Jan,

danke für eure Hilfe. Ich benutze den SciTE Editor und hab es jetzt auch auf dem Notepad ++ probiert, aber er zeigt mir immer dasselbe an, als würde er es einfach nur kopieren.
Ich versteh schon, dass er durch das \n eigentlich umbrechen müsste, aber irgend wie tut er es nicht...

Ich hab es gerad mal mit einer einfachen Zahlenreihe ausprobiert, da funktioniert es. Nur bei meiner Datei nicht.

In meiner Datei sind die Zahlen leider etwas komisch formattiert, also dargestellt z.b. 6 als 6.000000e+00 oder 2011 als 2.0110000e+03.

Kann es sein das darin das Problem liegt? Im Format?
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 17.07.2013, 14:08     Titel:
  Antworten mit Zitat      
Hallo

dann liegt es wohl an dem Ursprungsfile, bist du sicher dass die Daten durch Tab getrennt sind?

prüfe dass so, schreibe was ausgegeben wurde?
Code:


Data  = fileread(FileName);
DataD= double(Data)
fprintf('Anzahl Tabs %d\n',sum(DataD ==9))
 


Zuletzt bearbeitet von denny am 17.07.2013, 19:03, insgesamt einmal bearbeitet
Private Nachricht senden Benutzer-Profile anzeigen
 
Konfetti
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 16.07.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.07.2013, 18:34     Titel:
  Antworten mit Zitat      
Hallo,

tatsächlich! Die Anzahl der Tabs ist 0! Sieht also nur so aus...

Hm.. also soll er umbrechen, wenn ein Leerzeichen kommt?

Danke nochmal!
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 17.07.2013, 19:10     Titel:
  Antworten mit Zitat      
Hallo

versuch mal so zu machen, ich hoffe das hilft:
Code:

Data = fileread(FileName);
DataC = regexp(Data, '\s*', 'split');
FID = fopen(NewFileName, 'wt+');
if FID == -1, error('Cannot open file for writing'); end
fprintf(FID, '%s\t%s\t%s\t%s\t\n', DataC{:});
fclose(FID);
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Konfetti
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 16.07.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.07.2013, 22:28     Titel:
  Antworten mit Zitat      
Yuhuuu Very Happy
Jetzt funktionierts! Großes Dankeschön!!
Private Nachricht senden Benutzer-Profile anzeigen
 
Doro H

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.10.2017, 16:25     Titel:
  Antworten mit Zitat      
Ich dachte ich hätte das gleiche Problem, aber irgendwie funktionieren die Antworten nicht bei mir.

Ich habe eine Variable mit dem Namen a2, die eine Zeile lang ist. Sie hat den Wert "1x19983484 double".
Und nun hätte ich gerne, dass es wie hier schon beschrieben, nach jedem vierten Wert in einer neuen Zeile weiter geht. Sodass ich am Ende viele Zeilen und nur 4 Spalten habe.

Welche Befehle muss ich dafür einsetzen?
 
Seban
Forum-Meister

Forum-Meister


Beiträge: 600
Anmeldedatum: 19.01.12
Wohnort: ---
Version: ab R2014b
     Beitrag Verfasst am: 17.10.2017, 19:43     Titel:
  Antworten mit Zitat      
Hi, schau dir mal reshape an.
_________________

Richtig fragen
Debugging
Private Nachricht senden Benutzer-Profile anzeigen
 
Doro H

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.10.2017, 11:22     Titel:
  Antworten mit Zitat      
Hurra! Es funktioniert!!
Vielen vielen Dank!!
Smile
 
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.