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 unregelmäßiger .dat-file auslesen

 

Sirius3
Forum-Guru

Forum-Guru


Beiträge: 441
Anmeldedatum: 12.11.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.05.2013, 17:44     Titel:
  Antworten mit Zitat      
Hallo Abschlussarbeit,
warum speicherst Du jeden »content« in einem Cell-Array ab?
Nimm doch das Cell-Array um die »coords« abzulegen und zum Schluß per
Code:
all_coords = cat(1, coords{:});

die Gesamtliste zu erzeugen.
Private Nachricht senden Benutzer-Profile anzeigen


Abschlussarbeit
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 34
Anmeldedatum: 03.05.13
Wohnort: ---
Version: 2013a
     Beitrag Verfasst am: 08.05.2013, 07:45     Titel:
  Antworten mit Zitat      
Hallo Sirius3,
ich hab eine Ahnung, wie du das meinen könntest, aber wär es möglich, das in den Code einzubauen und mir anhanddessen zu zeigen, wie du das umsetzen würdest?
Danke Dir!
_________________

Danke für die Hilfe
Private Nachricht senden Benutzer-Profile anzeigen
 
Mmmartina
Forum-Meister

Forum-Meister


Beiträge: 745
Anmeldedatum: 30.10.12
Wohnort: hier
Version: R2020a
     Beitrag Verfasst am: 08.05.2013, 11:29     Titel:
  Antworten mit Zitat      
Einfach aus die Matrizen aneinander hängen:

Code:
pfad = 'D:\Roboterarchive\...\Folgen';
liste = dir(fullfile(pfad,'*.dat'));
files = {liste.name};

content = cell(size(files));
coords = [];  
for k=1:numel(files)

content{k} = fileread(fullfile(pfad,files{k}));
coordsTemp = regexp(content{k},'^DECL.*X ([-0-9.]+), Y ([-0-9.]+), Z ([-0-9.]+), A ([-0-9.]+), B ([-0-9.]+), C ([-0-9.]+)','tokens','lineanchors','dotexceptnewline');
coordsTemp = reshape(str2double([coordsTemp{:}]),6,[])';
coords = [coords;coordsTemp]
end

_________________

LG
Martina

"Wenn wir bedenken, daß wir alle verrückt sind, ist das Leben erklärt." (Mark Twain))
Private Nachricht senden Benutzer-Profile anzeigen
 
Abschlussarbeit
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 34
Anmeldedatum: 03.05.13
Wohnort: ---
Version: 2013a
     Beitrag Verfasst am: 08.05.2013, 13:34     Titel:
  Antworten mit Zitat      
perfekt! das funktioniert soweit wunderbar!
Ich danke euch!!!
_________________

Danke für die Hilfe
Private Nachricht senden Benutzer-Profile anzeigen
 
Abschlussarbeit
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 34
Anmeldedatum: 03.05.13
Wohnort: ---
Version: 2013a
     Beitrag Verfasst am: 08.05.2013, 17:04     Titel:
  Antworten mit Zitat      
Und schon wieder ich...tut mir echt leid, aber komme nicht weiter.

Problem:
- Angabe eines übergeordnteten Ordners / Verzeichnis´
- Programm soll automatisch Unterordner durchsuchen und alle .dat-files erkennen

Mein Versuch:
- Verwendungu von GENPATH
- Alle Unterordner auflisten
- mit if-Schleife Ordnernamen einbeziehen und jeden Ordner auf .dat-file untersuchen

mein Code:
Code:
path=genpath('D:\...\rahmen');
path=regexp([path ';'],'(.*?);','tokens')';


for i=1:numel(path)
    pfad=path(i,1);
    pth=pfad{i,1};
    liste = dir(fullfile(pth,'*.dat'));      
    files = {liste.name};    



    content = cell(size(files));
    coords=[];

    for k=1:numel(files)                      

    content{k} = fileread(fullfile(pfad,files{k}));
    coordsTemp = regexp(content{k},'^DECL.*X ([-0-9.]+), Y ([-0-9.]+), Z ([-0-9.]+), A ([-0-9.]+), B ([-0-9.]+), C ([-0-9.]+)','tokens','lineanchors','dotexceptnewline');

    coordsTemp = reshape(str2double([coordsTemp{:}]),6,[])'; % Koordinaten als Tabelle
    coords=[coords;coordsTemp];

    end  
end


Was ist falsch daran? Wie würdet ihr das Ganze lösen?

Fehlermeldung:
- Error using fullfile
- all inputs must be strings or cell arrays of strings
_________________

Danke für die Hilfe
Private Nachricht senden Benutzer-Profile anzeigen
 
Sirius3
Forum-Guru

Forum-Guru


Beiträge: 441
Anmeldedatum: 12.11.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.05.2013, 17:36     Titel:
  Antworten mit Zitat      
Hallo Abschlussarbeit,
die Fehlermeldung ist doch eindeutig.
Entweder »pfad« oder »files{k}« ist nicht das was Du glaubst, was es ist.
Also schau Dir mal an, was wirklich drinsteht.

Grüße
Sirius
Private Nachricht senden Benutzer-Profile anzeigen
 
Abschlussarbeit
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 34
Anmeldedatum: 03.05.13
Wohnort: ---
Version: 2013a
     Beitrag Verfasst am: 13.05.2013, 07:36     Titel:
  Antworten mit Zitat      
Guten Morgen,
die Fehlermeldung bezieht sich auf "pfad".
es wird gesagt, dass die Funktion mit fullfile keine "cell"-inputs verarbeiten kann, aber genau diese cell-inputs wandle ich vorher mit
Code:
pth=pfad{i,1};
in einen string um, oder sehe ich das falsch?
Wie ist das Ganze zu lösen bzw. besteht noch eine andere Möglichkeit, Unterverzeichnisse nacheinander auf Inhalt zu durchsuchen?
_________________

Danke für die Hilfe
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 13.05.2013, 08:53     Titel:
  Antworten mit Zitat      
Hallo,

nur musst du eben dann in dem fullfile-Befehl auch pth verwenden, nicht pfad.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Abschlussarbeit
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 34
Anmeldedatum: 03.05.13
Wohnort: ---
Version: 2013a
     Beitrag Verfasst am: 13.05.2013, 09:16     Titel:
  Antworten mit Zitat      
Hallo Harald,
der Fehler ist bereits behoben...trotzdem bekomme ich folgende Meldung:
"Error using dir
Function is not defined for 'cell' inputs.
liste=dir(fullfile(pth,'*.dat'));"

Irgendwie ist und bleibt "pth" eine Cell-Datei und "fullfile" braucht eine String-Datei.
_________________

Danke für die Hilfe
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 13.05.2013, 10:09     Titel:
  Antworten mit Zitat      
Hallo,

dann schau dir das doch im Debugger an. Wenn pth eine Cell-Variable ist, die einen String enthält, dann muss er eben noch extrahiert werden.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Abschlussarbeit
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 34
Anmeldedatum: 03.05.13
Wohnort: ---
Version: 2013a
     Beitrag Verfasst am: 13.05.2013, 10:47     Titel:
  Antworten mit Zitat      
ich habe es nun geschafft, "pth" als string/char-wert zu bekommen...
wäre natürlich langweilig, wenn jetzt alles funktionieren würde...

das problem jetzt, dass er mit der dimension nicht arbeiten kann:
"Index exceeds matrix dimensions.
Error in Einlesen_20130513 (line 11)
pth_ch=pfad{m,1}; "

mein aktueller code:
Code:
path=genpath('D:\Roboterarchive\D4_Anlagen\Dachrahmen');
path=regexp([path ';'],'(.*?);','tokens')';


for m=1:numel(path)
    pfad=path(m,1);
    pth_ch=pfad{m,1};
    pth=char(pth_ch);
    liste = dir(fullfile(pth,'*.dat'));
    files = {liste.name};



    content = cell(size(files));
    coords=[];

    for k=1:numel(files)

    content{k} = fileread(fullfile(pth,files{k}));
    coordsTemp = regexp(content{k},'^DECL.*X ([-0-9.]+), Y ([-0-9.]+), Z ([-0-9.]+), A ([-0-9.]+), B ([-0-9.]+), C ([-0-9.]+)','tokens','lineanchors','dotexceptnewline');
                                       

    coordsTemp = reshape(str2double([coordsTemp{:}]),6,[])';
    coords=[coords;coordsTemp];

    end  
end


wenn ich alternativ statt "pth_ch=pfad{m,1}" in die geschweifte Klammer "1" im Sinne "erster Ausdruck" schreibe, dann meckert er in der Zeile RESHAPE mit der dimension...habt ihr eine Lösung?
_________________

Danke für die Hilfe
Private Nachricht senden Benutzer-Profile anzeigen
 
Abschlussarbeit
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 34
Anmeldedatum: 03.05.13
Wohnort: ---
Version: 2013a
     Beitrag Verfasst am: 13.05.2013, 13:32     Titel:
  Antworten mit Zitat      
So,
mein aktueller Code lautet:
Code:
clear all
close all
clc

getpath=uigetdir
path=genpath(getpath);
path=regexp([path ';'],'(.*?);','tokens')';


for m=1:numel(path)
    pfad=path(m,1);
    pth_ch=pfad{1};
    pth=char(pth_ch);
    liste = dir(fullfile(pth,'folge*.dat'));
    files = {liste.name};

    content = cell(size(files));
    coords=[];

    for k=1:numel(files)

    content{k} = fileread(fullfile(pth,files{k}));
    coordsTemp = regexp(content{k},'^DECL.*X ([-0-9.]+), Y ([-0-9.]+), Z ([-0-9.]+), A ([-0-9.]+), B ([-0-9.]+), C ([-0-9.]+)','tokens','lineanchors','dotexceptnewline');

    coordsTemp = reshape(str2double([coordsTemp{:}]),6,[])';
    coords=[coords;coordsTemp];

    end  
end


das Programm durchsucht nun nacheinander alle Verzeichnisse und Unterordner.
Jetzt überschreibt es leider wieder die letzte "coord"s-Datei.
Ihr habt mir schon einmal mit diesem Problem geholfen...ich würde das Bekannte gern wieder anwenden, nur habe ich meine Probleme durch die "vielen" Schleifen..
Gibt es eine Möglichkeit, eine Datei zu erstellen, die alle (coordsTemp, coords und endgültige coords) zusammenfügt?
_________________

Danke für die Hilfe
Private Nachricht senden Benutzer-Profile anzeigen
 
Abschlussarbeit
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 34
Anmeldedatum: 03.05.13
Wohnort: ---
Version: 2013a
     Beitrag Verfasst am: 13.05.2013, 16:32     Titel:
  Antworten mit Zitat      
Problem gelöst...trotzdem Danke!
_________________

Danke für die Hilfe
Private Nachricht senden Benutzer-Profile anzeigen
 
Abschlussarbeit
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 34
Anmeldedatum: 03.05.13
Wohnort: ---
Version: 2013a
     Beitrag Verfasst am: 14.05.2013, 10:42     Titel:
  Antworten mit Zitat      
Hallo zuammen,

folgendes grundlegendes Problem:
- Zeile in einer dat-file enthält Koordinaten
- Suchfunktion in Matlab sucht diese Werte bisher exakt und gibt sie super wieder
- manchmal weicht die Zeile in der dat-file minimal ab (Leerzeichen etc.)

Frage:
Ist es möglich die mir gegebene Matlabfunktion so variabel zu gestalten, dass beide Varianten (siehe unten) ausgelesen werden können?

Variante 1 (bisher):
DECL E6POS P1 = {X 1749.532, Y -146.6507, Z 166.6399, A 10.10406, B 66.05543, C -165.5217, S 2, T 35 , E1 0.0, E2 0.0, E3 0.0, E4 0.0, E5 0.0, E6 0.0}

Variante 2 (zusätzlich):
DECL E6POS P1={X 3055.41992,Y -148.5065,Z 1669.76099,A 167.705093,B -70.8155136,C 16.9212494,S 2,T 35,E1 0.0,E2 0.0,E3 0.0,E4 0.0,E5 0.0,E6 0.0}

in Voriante 2 sind weniger Leerzeichen enthalten! Dennoch soll er gleichzeitig beide Varianten finden.

Such-Code:
Code:
coordsTemp = regexp(content{n},'^DECL.*X ([-0-9.]+), Y ([-0-9.]+), Z ([-0-9.]+), A ([-0-9.]+), B ([-0-9.]+), C ([-0-9.]+)','tokens','lineanchors','dotexceptnewline');


Gibt es eine allgemeine Vorschrift zur Programmierung solcher Such-zeile, damit ich sowas in Zukunft selbst variabel gestalten kann?
Ich hoffe, es kann mir jemand helfen! Smile
_________________

Danke für die Hilfe
Private Nachricht senden Benutzer-Profile anzeigen
 
Sirius3
Forum-Guru

Forum-Guru


Beiträge: 441
Anmeldedatum: 12.11.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.05.2013, 23:51     Titel:
  Antworten mit Zitat      
Hallo Abschlussarbeit,
die Matlabhilfe zu regexp ist da sehr ausführlich:
Code:
coordsTemp = regexp(content{n},'^DECL.*X\s*([-0-9.]+),\s*Y\s*([-0-9.]+),\s*Z\s*([-0-9.]+),\s*A\s*([-0-9.]+),\s*B\s*([-0-9.]+),\s*C\s*([-0-9.]+)','tokens','lineanchors','dotexceptnewline');
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite Zurück  1, 2, 3  Weiter

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 - 2025 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.