Hallo Zusammen,
und zwar sitzte ich gerade daran eine Datei einzulesen.
Ich habe schon versucht im Forum einen passenden EIntrag zu finden - jedoch habe ich die Lösung, welche dort vorgeschlagen wurden nicht adaptieren können.
Diese ist im Ascii Code.
Folgendes funktionier:
Dabei habe ich das Problem, das die Datei als Cell Eingelesen wird.
Ich möchte nun ab Zeile x die Daten Extrahieren.
Diese sehen in der *.txt Datei wie folgt aus:
Es sind immer zwei Messwerte.... ich bekomme es aber nicht hin diese zu trennen.
Jemand eine Idee?
Wäre sehr dankbar - da ich mir dann das umwandeln von Txt in Excel sparen kann.
das entscheidende Problem ist, dass als Dezimaltrennzeichen das Komma verwendet wird. Skripte zur Umwandlung von Komma in Punkt findest du hier, auf File Exchange oder per Google.
Dann '%f%f' als Format, und es sollte klappen.
warum nutzt du nicht einfach die Matlab ImportData Funktion? File auswählen, Optionen: Delimited anwählen (Column delimiters = space), Range A1:B10 und Numeric Matrix.
Dann erhälst du eine 10x2 double Matrix. Du kannst dir sogar den Importcode erzeugen lassen, um ihn als Funktion zum Einlesen weiterer Files zu verwenden.
Hallo Harald,
vielen Dank für die schnelle Antwort - bin ich ja nicht anders gewohnt!
So nun mal zum Code. Ich habe beizeiten folgende Funktionen mit verwendet (der Suche sei Dank). Der Code sieht nun wie folgt aus:
Code:
Name=textscan(File,'%s%s','delimiter','.');
Rohdaten=Name{1};
[m,n] =size(Rohdaten);
Rohdaten=Rohdaten(44:m);
% Tausende Trenner entfernen regexprep(Rohdaten, '\.', '') % danach Komma durch Punkt ersetzen regexprep(Rohdaten, ',', '.');
Nun möchte ich, wie du auch beschrieben hast mittels '%f%f' daraus eine Einfache Matrix bauen - leider funktioniert dies nicht denn ich bekomme immer folgende Fehlermeldung:
Error in ==> Fkt_DensoRead at 13
Rohdaten=textscan(Rohdaten,'%f%f');
Nun habe ich das gefühl, dass ich alles doppelt mache aus einem Cellarray in eine einen Cell dann umwandeln in Zahlen - wechseln von "," in "." und dann wieder umwandeln in Txt?
Hallo Harald,
vielen Dank für die schnelle Antwort - bin ich ja nicht anders gewohnt!
So nun mal zum Code. Ich habe beizeiten folgende Funktionen mit verwendet (der Suche sei Dank). Der Code sieht nun wie folgt aus:
Code:
Name=textscan(File,'%s%s','delimiter','.');
Rohdaten=Name{1};
[m,n] =size(Rohdaten);
Rohdaten=Rohdaten(44:m);
% Tausende Trenner entfernen regexprep(Rohdaten, '\.', '') % danach Komma durch Punkt ersetzen regexprep(Rohdaten, ',', '.');
Nun möchte ich, wie du auch beschrieben hast mittels '%f%f' daraus eine Einfache Matrix bauen - leider funktioniert dies nicht denn ich bekomme immer folgende Fehlermeldung:
Error in ==> Fkt_DensoRead at 13
Rohdaten=textscan(Rohdaten,'%f%f');
Nun habe ich das gefühl, dass ich alles doppelt mache aus einem Cellarray in eine einen Cell dann umwandeln in Zahlen - wechseln von "," in "." und dann wieder umwandeln in Txt?
und nicht noch ein zusätzliches textscan. Dann bleibt aber immer noch das Problem mit den Kommas statt Punkten. ImportData löst das Problem schon selbst.
Guten Abend zusammen,
also erstmal vielen Dank für die Hilfe.
Mittels dem Import-Tool von Matlab konnte ich das Problem nicht lösen, da dies nicht das gewünschte Ergebnis brachte.
Jedoch konnte ich die Cellarrays in einem temporären *xlsx File speichern und wieder über XLSX read einlesen.
Der Code sieht nun wie folgt aus:
Code:
file = fopen('Pfad zu Datei','r');
Name=textscan(file,'%f%f','delimiter','.');
heading = textscan(file,'%s %s %s %s',1);
fgetl(file); % advance the file pointer one line
data = textscan(file,'%s %s', ' ');
fclose(file);
A = (data{1,1});
B = (data{1,2});
% Tausende Trenner entfernen regexprep(A, '\.', '') regexprep(B, '\.', '') % danach Komma durch Punkt ersetzen regexprep(A, ',', '.') regexprep(B, ',', '.') xlswrite('Pfad zu Datei',A);
xlswrite('Pfad zu Datei',B);
A = xlsread('Pfad zu Datei',1);
B = xlsread('Pfad zu Datei',1);
Ich hätte gerne als Ergenis eine Matrix mit zwei Spalten.
1. Messpunkt
2. Wert
Das Problem ist einfach das ich es nicht umgewandelt bekomme.
Öffne ich jede Messdatei so kann ich diese in Excel speichern und dann einlesen.
Für alle Dateien wäre dies aber zu viel Arbeit, daher würde ich gerne einefach nur die Messertwerte direkt einlesen.
ich verwendet Matlab 2014b und habe mit nur wenigen Klicks das Ergebnis erhalten.
Für dein angegebenes Textbeispiel eine 10x2 double Matrix. Also genau so wie du es wünscht.
Nach der Auswahl des files (heißt bei mir Neues Textdokument.txt, deshalb auch der Variablenname) habe ich folgende Einstellungen gewählt (siehe Bild). Nun kann man die Daten einmalig durch Anklicken des grünen Häckchens importieren, oder sich eine Funktion erstellen lassen. Diese kann dann genutzt werden um files immer wieder nach dem selben Muster zu importieren ohne jedes mal das ImportData Tool verwenden zu müssen.
Bei dem hier gezeigten Textbeispiel sind vermutlich die Tabs bei copy&paste durch Leerzeichen ersetzt worden. Daher muss "Column delimiters" auf "Tab" stehen und nicht wie in dem Bild auf "Space". Das ändert die ImportData Funktion bei mir aber automatisch, nachdem ich die Leerzeichen durch Tabs in der Textdatei ersetzt habe. Ansonsten bleibt alles wie im Bild und das Ergebnis ist das gleiche.
retsa
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 06.03.2016, 22:56
Titel:
Hallo,
das erklärt einiges. Ich arbeite mit 2009.
Nach dem Import bekomme ich Einen struct und Einen cellarray.
Daher vermutlich auch die Probleme.
Greetz Retsam
file = fopen('Neues Textdokument.txt','r');
Name=textscan(file,'%f%f','delimiter','.');
heading = textscan(file,'%s %s %s %s',1);
fgetl(file); % advance the file pointer one line
data = textscan(file,'%s %s');
fclose(file);
% Komma durch Punkt ersetzen und string in zahl umwandeln
A = str2double(regexprep(data{1,1}, ',', '.'));
B = str2double(regexprep(data{1,2}, ',', '.'));
Hallo Ihr beiden,
super vielen Dank. Den code konnte ich verwenden.
Greetz
Retsam
Einstellungen und Berechtigungen
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
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.