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

Koordinaten aus verschiedenen Zeilen einer Datei einlesen

 

timlie
Forum-Anfänger

Forum-Anfänger


Beiträge: 29
Anmeldedatum: 03.12.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.12.2020, 15:41     Titel: Koordinaten aus verschiedenen Zeilen einer Datei einlesen
  Antworten mit Zitat      
Hallo liebe Community,
ich will aus einer Gcode/Text- Datei, die nicht immer gleich aufgebaut sein wird, die X- und Y-Koordinaten in einer (Nx2) Matrix speichern.
Über Textscan konnte ich es noch nicht so lösen, dass es für meinen Anwendungsfall ausreicht.

Code:

id = fopen('Pfad.gcode','r');
a = textscan(id,'%*s %*s X%d Y%d %*[^\n]','HeaderLines',2);
p = [a{1} a{2}]
 


Textscan erwartet es zwei Strings zu überspringen, dann X und Y auszulesen und den Rest zu überspringen. Nun würde ich aber auch gerne die Koordinaten in Zeilen rauslesen können bei denen mal nur ein String vor X und Y steht oder kein String.
Die Koordinaten aus der zweiten Zeile kann ich z.B nicht auslesen und habe deshalb HeaderLines erstmal auf 2 gesetzt. Diese Koordinaten bräuchte ich aber auch.
Alle anderen Zeilen haben immer erst 2 Strings. Hier wäre ich aber gerne flexibel und will nicht immer darauf angewiesen sein zwei Strings in jeder Zeile stehen zu haben.

Gibt es die Möglichkeit über Textscan alles in einer Zeile zu ignorieren außer die Koordinaten, die ich rauslesen will?

Die Datei mit Endung .gcode lässt sich leider nicht anhängen, deshalb kopiere ich es euch hier rein:

Hilfsfunktion Düse an
G1 X10 Y10
N20 G1 X10 Y110 M10
N30 G1 X12 Y110 M20
N40 G1 X12 Y10
N50 G1 X14 Y10
N60 G1 X14 Y110
N70 G1 X16 Y110
N80 G1 X16 Y10
N90 G1 X18 Y10
N100 G1 X18 Y110
M30

Liebe Grüße Tim
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.12.2020, 12:02     Titel:
  Antworten mit Zitat      
Hallo,

ein Ansatz:
Code:
S = fileread("data.txt");
XY = extract(S, caseSensitivePattern(("X" | "Y")+digitsPattern))
data = reshape(str2double(erase(XY, ["X", "Y"])), 2, [])'


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

Forum-Anfänger

Forum-Anfänger


Beiträge: 29
Anmeldedatum: 03.12.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.12.2020, 15:45     Titel:
  Antworten mit Zitat      
Vielen Dank Harald!

Code:

S = fileread("Pfad.gcode")
XY = extract(S, caseSensitivePattern(("X" | "Y" | "X-" |"Y-") + digitsPattern))
data = reshape(str2double(erase(XY,["X", "Y"])),2,[])'
 


Super Ansatz. Ich habe es noch für Minus-Werte ergänzt.
Was ist eigentlich der Unterschied zwischen "text" und 'text' ?
Funktionen, die solche Anführungszeichen für Text brauchen, funktionieren bei mir meistens mit beiden. Das Pattern bei exctract hat jedoch die hier "" verlangt .

Liebe Grüße Tim
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: 07.12.2020, 22:45     Titel:
  Antworten mit Zitat      
Hallo,

' ' sind Char, " " sind Strings. Strings sind die moderneren Chars, sind also oft intuitiver und bieten manchmal mehr Möglichkeiten.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 29
Anmeldedatum: 03.12.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.03.2021, 13:08     Titel:
  Antworten mit Zitat      
Hey, wie muss ich das Pattern ändern damit auch Kommazahlen beim DigitsPattern berücksichtigt werden?
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.03.2021, 13:45     Titel:
  Antworten mit Zitat      
Hallo,

heißt "Kommazahlen", dass das Dezimaltrennzeichen , ist? Oder .?
Sind alle Zahlen mit Dezimalanteil angegeben oder nur manche?

Man könnte das Pattern z.B. so anpassen:
Code:
caseSensitivePattern(("X" | "Y" | "X-" |"Y-") + digitsPattern + optionalPattern("." + digitsPattern))


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

Forum-Anfänger

Forum-Anfänger


Beiträge: 29
Anmeldedatum: 03.12.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.03.2021, 13:49     Titel:
  Antworten mit Zitat      
Nur manche. Es können ganze Zahlen und welche mit Dezimalpunkt (.) vorkommen.
Z.B. X12, X12.5 , X120, X120.5
Kann man auch noch die Anzahl der Kommastellen begrenzen ?
Vllt. über digitsPattern(min,max)?

Lg
Tim
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.03.2021, 14:56     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Kann man auch noch die Anzahl der Kommastellen begrenzen ?
Vllt. über digitsPattern(min,max)?

Ja, und genau so wie du meinst. Probier's doch mal aus und sag Bescheid, falls es Probleme gibt (und wie diese konkret aussehen).

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.