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

Textdatei in Matlab einlesen & Spalten speichern

 

Quisam

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.11.2019, 15:49     Titel: Textdatei in Matlab einlesen & Spalten speichern
  Antworten mit Zitat      
Hallo Ihr Smile

Ich bin ein blutiger Matlab-Anfänger und soll jetzt ein (vermutlich sehr einfaches) Problem lösen.
Ich habe eine Textdatei die in Spalten aufgebaut ist:

Uhrzeit Messwert 1 Messwert 2
20:00 20 25
... .... ....

Ich möchte jetzt gerne die Datei einlesen und dann immer die Uhrzeit mit einer Spalte (also erst die Spalte mit dem Messwerten 1, dann mit den Messwerten 2 usw.) in jeweils einer neuen Textdatei speichern.

Leider kann ich bis jetzt noch nicht mal ein Programm zum Einlesen vorweisen Embarassed .

Ich würde mich freuen, wenn ihr mir helfen könntet!

Liebe Grüße! Smile


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.11.2019, 21:34     Titel:
  Antworten mit Zitat      
Hallo,

den Anfang kannst du mit readtable machen.

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
 
Quisam

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.11.2019, 11:58     Titel:
  Antworten mit Zitat      
Hallo Smile

Danke für die Antwort! Inzwischen sieht mein Code so aus:

Code:
%
clear;
fileName = 'file.txt';              

rows = 50;                          

fileID = fopen(fileName);

name = fgetl(fileID);

header = strsplit(fgetl(fileID));

dataSplit = [];

    Data=fileread(fileName);  

    Data = strrep(Data, ',', '.');
    data =textscan(Data,'%s','headerLines',2);
    A=(reshape(data{1,1},49,[]))';

status=fclose(fileID);

colums = size(A, 2);
 
for I=3:colums

[i]fid = fopen('file.txt','w');
for i=2:3
    [fileName, i] = textscan(fid,'%s');
    fileName=fprintf(fid,'%s',i);
 end [/i]
 
 fileID = fopen([fileName], 'w+');

  fprintf(fileID, '%s \t %s \t %s \t \n', ...
    char(header(1,1)), char(header(1,2)), char(header(1,I)));

  fclose(fileID);
  fopen(char(fileName), 'a');

  for J = 1:(rows)
    fprintf(fileID, '%s \t %s \t %s \t \n', ...
    char(dataSplit(J,1)), char(dataSplit(J,2)), char(dataSplit(J,I)));
  end

  fclose(fileID);
end
 


Was leider noch nicht funktioniert ist die Dateibezeichnung (siehe kursiver Teil). Gibt es einen Befehl, der auf eine bestimmte Position einer .txt Datei zugreift?

Und bei der letzten for-Schleife bekomme ich ebenfalls eine Fehlermeldung ('Index exceeds matrix dimensions') - die habe ich natürlich gegoogelt, aber nicht verstanden, wie ich es lösen kann.
Vielleicht hat ja hier jemand eine Idee Smile.

Liebe Grüße!
 
Harald
Forum-Meister

Forum-Meister


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

da ist nichts kursiv.

Zitat:
Gibt es einen Befehl, der auf eine bestimmte Position einer .txt Datei zugreift?

fseek

Zitat:
Und bei der letzten for-Schleife bekomme ich ebenfalls eine Fehlermeldung ('Index exceeds matrix dimensions')

Da kann ich dir nur das empfehlen, was ich auch machen würde: debuggen. Ohne ein (bis zum Fehler) lauffähiges Beispiel kann ich da jedenfalls nicht weiter 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
 
Quisam

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.11.2019, 11:11     Titel:
  Antworten mit Zitat      
Guten Morgen Smile

Ich wieder Smile. Das Programm läuft jetzt tatsächlich durch, bis der Fehler angezeigt wird.

Code:
%
clear;
fileName = 'file.txt';              

rows = 50;                        

fileID = fopen(fileName);

name = fgetl(fileID);

header = strsplit(fgetl(fileID));

dataSplit = [];


    Data=fileread(fileName);  
    Data = strrep(Data, ',', '.');
    data =textscan(Data,'%s','headerLines',2);
    A=(reshape(data{1,1},49,[]))';

status=fclose(fileID);

colums = size(A, 2);
 
for I=3:colums
  % Erzeugen eines Dateinamens
  Name = strrep(name, '.', ':');
  fileName = strcat(Name, '_', header(1,I), '.txt');

  fileID = fopen('\\path\fileName', 'w'); %Der Pfad ist natürlich ausgeschrieben im Programm
 
  fprintf(fileID, '%s \t %s \t %s \t \n', ...
  char(header(1,1)), char(header(1,2)), char(header(1,I)));
 
  fclose(fileID);
  fopen('\\path\fileName', 'a');

  for J = 1:rows
    fprintf(fileID, '%s \t %s \t %s \t \n', ...
    char(dataSplit(J,1)), char(dataSplit(J,2)), char(dataSplit(J,I)));
  end
 
  fclose(fileID);
end
 


Vielleicht kann damit ja jemand mehr anfangen Smile.
Er meckert bei der letzten for-Schleife. Wenn ich es richtig verstanden habe heißt der Fehler 'Index in position 1 exceeds array bound', dass die Matrix in die ich hinein schreiben möchte zu klein ist?
Nur habe ich keine Ahnung, wie ich die Matrix größer bekomme Smile.

Liebe Grüße!
 
Harald
Forum-Meister

Forum-Meister


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

du willst mit dem fprintf-Befehl ja anscheinend Daten aus dataSplit schreiben. Was die Inhalte von dataSplit sind, musst du aber schon selber definieren.

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
 
Quisam

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.11.2019, 12:52     Titel:
  Antworten mit Zitat      
Hallo Smile

Danke für die Tipps! Smile
Schlussendlich habe ich den Code jetzt mit zwei Freunden durchsprechen können, die sich mit der Materie auskennen. Und sie haben es tatsächlich zum Laufen gebracht - ich in ihnen echt dankbar!
Anbei noch der Code - vielleicht hilft er irgendwann noch jemandem Smile.

Code:
%
clear;
fileName = 'file.txt';              

fileID = fopen(fileName);

name = fgetl(fileID);

header = strsplit(fgetl(fileID));

    Data=fileread(fileName);  
    Data = strrep(Data, ',', '.');
    data =textscan(Data,'%s','headerLines',2);
    A=(reshape(data{1,1},49,[]))';
    data = fgetl(fileID);
    % dataSplit = [dataSplit; strsplit(data)];
    rows = size(A, 1);

status=fclose(fileID);

colums = size(A, 2);
 
for I=4:colums
  number = int2str(I-3);
  name2 = strrep(name, ':', '-');
  name3 = regexprep(name2, '\t', ' ');
  path = 'Pfad';
  fileName = append(name3, '_', number, '.txt');
  fileOutput = strcat(path, fileName);
 
  fileID = fopen(fileOutput, 'w');
 
  fprintf(fileID, '%s \t %s \t %s \t \n', ...
  char(header(1,1)), char(header(1,2)), char(I));

  fclose(fileID);
  fopen(fileOutput, 'a');

  for J = 1:rows
    fprintf(fileID, '%s \t %s \t %s \t \n', ...
    char(A(J,1)), char(A(J,2)), char(A(J,I)));
  end
  % Schließen der Datei
  fclose(fileID);
end
 


Liebe Grüße!
 
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.