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

Möglichkeiten einer asc Datei

 

Pat87
Forum-Anfänger

Forum-Anfänger


Beiträge: 21
Anmeldedatum: 01.09.15
Wohnort: ---
Version: R2016b
     Beitrag Verfasst am: 02.11.2018, 11:28     Titel: Möglichkeiten einer asc Datei
  Antworten mit Zitat      
Hallo
ich hab ein Projekt an der Hochschule, Datenanalyse, und soll rausfinden, ob man das einlesen und verarbeiten einer speziellen asc Datei mit Matlab automatisieren kann.
Ich komme eher aus der Berechnung/Modellierung, hab null Ahnung von Datenverarbeitung und deswegen wollte ich hier mal fragen, was machbar ist, toller Job Sad

Vorerst lässt sich die asc Datei nicht verändern, so dass Matlab an die asc Datei angepasst werden muss. Das macht das Programmieren sehr aufwendig (für mich).

Die Messdateien sind sehr ähnlich aufgebaut, also reicht ein Skript und ich gebe gerne 1,2,3,... Bier aus (HH). Als Beispiel habe ich eine Textdatei im Anhang, genau so ist die asc Datei aufgebaut, nur mehr Messdaten (Zeilen, Spalten).
Für Excel sind die Messdaten später zu groß (1GB und größer), deswegen Machtbarkeit mit Matlab testen.

1. Aufgabe
Zeile Kanalname sind die Namen der Messungen, Matlab soll diese lesen, erstmal nur lesen und der Anwender wählt dann später aus, welche Kanäle er haben will, um Zeit zu sparen ohne die gesamte Datei zu importieren.
Mit welchem Befehl arbeitet man da? Hab im Skript 5 mal fgetl stehen und die gesamte Zeile als Variable Laughing ok, ne Schleife wäre auch möglich, aber Stil hat das nicht wirklich oder?^^
Gibt es ne Möglichkeit mit Matlab präzise zu sagen, gehe zur 5. Zeile, das erste Wort/ die ersten 9 Zeichen ist der Name des Structures, in dieser Zeile sind alle Buchstaben zwischen '...' jeweils eine Variable und wird in der Structure eingeführt?

Wenn es nicht gehen sollte oder für einen Laien zu aufwendig ist, muss halt ein anderes Programmes her, zumal ich nur etwas mehr als ein Monat Zeit habe Rolling Eyes

Vielen vielen Dank schon mal im Voraus

Grüße

PS sollte ich bei der Suche was übersehen haben, gerne einen Link ranhängen

Test.txt
 Beschreibung:
Das Original ist eine .asc Datei

Download
 Dateiname:  Test.txt
 Dateigröße:  539 Bytes
 Heruntergeladen:  207 mal
Private Nachricht senden Benutzer-Profile anzeigen


Lokdog
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 96
Anmeldedatum: 07.04.16
Wohnort: Heilbronn
Version: ---
     Beitrag Verfasst am: 02.11.2018, 11:40     Titel:
  Antworten mit Zitat      
Moin,

ja das sollte ziemlich gut mit:
https://de.mathworks.com/help/matlab/ref/regexp.html

gehen. Ist meiner Meinung nach nicht ganz einfach diese function zu verstehen.
Aber im Endeffekt kann man hiermit z.B. suche nach zeile XYZ, Gehe Dort 5 zeichen weiter, lösche leerzeichen usw.


Viel Erfolg
Private Nachricht senden Benutzer-Profile anzeigen
 
Pat87
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 21
Anmeldedatum: 01.09.15
Wohnort: ---
Version: R2016b
     Beitrag Verfasst am: 02.11.2018, 12:29     Titel:
  Antworten mit Zitat      
Moin,
ja, das ist schon mal ne Hilfe zum reinlesen, Danke!
Und ja, ich hab erstmal nur Bahnhof verstanden ^^
Werde wohl am WE bisschen rumspielen Wink

Ich muss aber vorher mit fopen arbeiten oder?
Und dann? textscan oder sowas?
aber dann lädt er doch die ganze Datei oder? Geht ja auch um Zeitsparen, da später auch mehrere Dateien gleichzeitig mit jeweils GBs ausgewertet werden sollen und davon nur bestimmte Werte. Oder ist das was anderes als importdata?
ich starte hier wirklich mit 0 Embarassed
Private Nachricht senden Benutzer-Profile anzeigen
 
Lokdog
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 96
Anmeldedatum: 07.04.16
Wohnort: Heilbronn
Version: ---
     Beitrag Verfasst am: 02.11.2018, 12:32     Titel:
  Antworten mit Zitat      
Ja, also meiner Meinung nach, kannst du den Inhalt einer Datei nur lesen, wenn sie "geöffnet" ist, bzw. sie als Variable vorhanden.

Kannst du nicht die Dateiname soweit verändern, dass du nach diesen suchst und nicht in die Datei selbst musst?
Private Nachricht senden Benutzer-Profile anzeigen
 
Pat87
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 21
Anmeldedatum: 01.09.15
Wohnort: ---
Version: R2016b
     Beitrag Verfasst am: 02.11.2018, 12:48     Titel:
  Antworten mit Zitat      
Verstehe den letzten Satz nicht so ganz ^^
Der/die Dateiname/n ist/sind fest und jeder Anwender nennt das ganze ja anders.
Ständig den Dateinamen zu verändern, kostet zu viel Zeit.

Später gibt es den Befehl uigetdir, mehrere Datein einzuladen, hab da was im Forum gelesen und schon getestet. Alle Datein im Ordner A einladen. Aber soweit bin ich noch lange nicht.
Private Nachricht senden Benutzer-Profile anzeigen
 
Lokdog
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 96
Anmeldedatum: 07.04.16
Wohnort: Heilbronn
Version: ---
     Beitrag Verfasst am: 02.11.2018, 14:22     Titel:
  Antworten mit Zitat      
Okay,

dann wirst du vermutlich nicht drum herum kommen, die Dateien einzulesen und schauen was drin steht.
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: 02.11.2018, 23:47     Titel:
  Antworten mit Zitat      
Hallo,

natürlich muss man eine Datei einlesen, um den Inhalt zu sehen.
Es ist aber z.B. kein Problem, die Datei mit fopen zu öffnen, mit fgetl ein paar Zeilen einzulesen, dann z.B. mit strfind nach [ zu suchen und das folgende mit strsplit (Punkt als Trennzeichen) zu trennen. Reguläre Ausdrücke sind da m.E. ein Overkill.

Zitat:
muss halt ein anderes Programmes her

Mit was soll das denn einfacher gehen? Very Happy

Zitat:
zumal ich nur etwas mehr als ein Monat Zeit habe

Das Einlesen der Daten sollte da nur den kleinsten Teil davon benötigen. Wink

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
 
Pat87
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 21
Anmeldedatum: 01.09.15
Wohnort: ---
Version: R2016b
     Beitrag Verfasst am: 05.11.2018, 10:26     Titel:
  Antworten mit Zitat      
Hallo Harald,

mit strsplit hast du mich schon ein Stück voran gebracht,
den Befehl hab ich gesucht oder übersehen Embarassed
Allerdings müssten die Wörter mit einem Apostroph getrennt werden, in der Doku wird das nirgends aufgelistet, lediglich sämtliche andere Zeichen.
Gibt es die Möglichkeit nicht? Weil manuell das Matlab zu sagen, funktioniert nicht, er kann mit sowas
Code:
nichts anfangen ^^

Weil sonst müsste ich für jedes Wort immer das erste und letzte Zeichen löschen.
Klar geht das auch, aber warum kompliziert, wenn es vielleicht leichter geht Wink
Danke!
Grüße
Private Nachricht senden Benutzer-Profile anzeigen
 
Pat87
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 21
Anmeldedatum: 01.09.15
Wohnort: ---
Version: R2016b
     Beitrag Verfasst am: 05.11.2018, 10:51     Titel:
  Antworten mit Zitat      
Oder gibt es ein Befehl, das sämtliche Zeichen löscht?
Weil ich ja am Anfang und am Ende ja noch mehr Zeichen habe.
Ich brauche ja nur die Wörter

Ahhh mit
Code:
geht das...

Vielen Dank nochmal
Private Nachricht senden Benutzer-Profile anzeigen
 
Pat87
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 21
Anmeldedatum: 01.09.15
Wohnort: ---
Version: R2016b
     Beitrag Verfasst am: 05.11.2018, 11:28     Titel:
  Antworten mit Zitat      
Also so habe ich die erste Aufgabe gelöst.


Code:
fileID = fopen('Test_neu.txt','rb');
i = 0;
for i = 1:1:4
  fgetl(fileID);  
end
Kanalzeile = fgetl(fileID);
K1 = strfind(Kanalzeile,'=');
Kanalzeile(K1) = [];
K1 = strfind(Kanalzeile,' ');
Kanalzeile(K1) = [];
K1 = strfind(Kanalzeile,'.');
Kanalzeile(K1) = [];
K1 = strfind(Kanalzeile,'[');
Kanalzeile(K1) = [];
K1 = strfind(Kanalzeile,']');
Kanalzeile(K1) = [];
K = strsplit(Kanalzeile,'''');
[~, spalten] = size(K);
e = cellfun('isempty',K);
K(e) = [];
fclose(fileID);


oder hat jemand ne elegantere Idee?

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: 05.11.2018, 11:36     Titel:
  Antworten mit Zitat      
Hallo,

etwas kompakter:
Code:
for i = 1:5
  Kanalzeile = fgetl(fileID);  
end
idx = strfind(Kanalzeile, '[');
K = strsplit(Kanalzeile(idx(1):end), '.');
K = regexprep(K, '\W', '')
fclose(fileID);


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
 
Pat87
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 21
Anmeldedatum: 01.09.15
Wohnort: ---
Version: R2016b
     Beitrag Verfasst am: 05.11.2018, 14:35     Titel:
  Antworten mit Zitat      
Vielen, vielen Dank Harald

hat prima funktioniert. Damit habe ich alle Zeilen Probleme gelöst Very Happy

Jetzt fehlt nur noch mein Spaltenproblem, um die Messdaten zu erhalten.
Würdest Du da mit einer while-Schleife arbeiten und Zeile für Zeile einlesen bis die eingelesenen Zeilen leer sind (Ende)? Dabei lade ich ja Daten rein, die ich eventuell nicht will und Zeit kostet.

Oder gibt es ein Befehl direkt die x. Spalten einlesen?

Danke schon mal Wink
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: 05.11.2018, 14:52     Titel:
  Antworten mit Zitat      
Hallo,

welches Spaltenproblem? Dass die Anzahl der Spalten nicht vorab bekannt ist?
Nun, nach dem Einlesen der Überschriften ist sie ja bekannt.

Code:
for i = 1:6
    fgetl(fileID);
end
data = cell2mat(textscan(fileID, repmat('%f', 1, numel(K))))
fclose(fileID);


Wenn du bestimmte Spalten nicht willst, kannst du für diese Spalten %*f statt %f 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
 
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.