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

Bestimmte Werte aus Zeilen auslesen

 

waba
Forum-Anfänger

Forum-Anfänger


Beiträge: 29
Anmeldedatum: 14.02.14
Wohnort: Dresden
Version: R2014a
     Beitrag Verfasst am: 11.08.2015, 09:44     Titel: Bestimmte Werte aus Zeilen auslesen
  Antworten mit Zitat      
Hallo ihr Lieben,

ich hab folgendes Problem (wahrscheinlich sind es mehrere...).
Mir liegen Messergebnisse in einer .dat-Datei vor welche wie folgt aussieht:

-----------------------------------------------
| Mean | Variance | Skewness | Kurtosis
| cm/s | (cm/s)^2 | |

File: C:\Pfad\p-1-1.adv, Probe 1 :
u -1.60 6.38 9.199 172.990
v 0.60 0.77 -4.231 61.010
w 1.13 12.87 -7.624 138.531
File: C:\Pfad\p-1-2.adv, Probe 1 :
u -0.61 1.44 -0.934 0.533
v 1.09 0.48 0.085 0.185
w -0.32 0.96 -0.233 -0.390
File: C:\Pfad\p-1-3.adv, Probe 1 :
u -1.41 1.80 0.378 0.074
v 0.82 0.51 -0.429 0.883
w -1.51 237.32 1.317 1.538
File: C:\Pfad\p-1-4.adv, Probe 1 :
u 0.45 1.18 -0.609 -0.598
v 0.77 0.27 0.248 1.660
w -67.00 1.64 -0.077 0.845
File: C:\Pfad\p-2-1.adv, Probe 1 :
u -0.70 21.82 4.919 81.269
v 1.36 2.04 -4.513 65.076
w -0.91 48.00 -4.012 55.430
...


Ich möchte nun aus den Ursprünglichen Dateinamen der einzelnen .adv-Dateien (p-1-1.adv, p-1-2.adv ...) die beiden Zahlen auslesen und in einem cell speichern. Dabei stellt die erste Zahl die x-Koordinate dar und die zweite die z-Koordinate.

Weiterhin benötige ich die Geschwindigkeiten u, v und w, also die ersten Zahlen welche hinter u,v,w stehen. Diese sollen auch jeweils in einem cell gespeichert werden.

Mein Gedanke war in einer Schleife abzufragen welchen Zeilenanfang das Dokument hat und anschließend zu sagen was aus der betreffenden Zeile Importiert werden soll. So recht ist mir das aber noch nicht geglückt.

Mein bisheriger Code sieht folgendermaßen aus:
Code:

for k = 1:anz_mess
    kstr=num2str(k);
    bartext=['Bitte' kstr '. Datensatz auswählen'];
    [filename, pathname] = uigetfile( ...
    {   '*.dat','dat-Dateien'; ...
        '*.*',  'Alle Dateien'}, ...
        bartext, ...
        'MultiSelect', 'off');

        if  ~iscell(filename)
               filename={filename};
        end
    anz_richt = numel(filename);
   
    for index =1:anz_richt
        file = strcat(pathname,filename{index});
        fileID = fopen(file,'r');
        x = {};
        while ~feof(fileID)
            line = fgetl(fileID);
            if strcmpi(line(1), 'File')
            x = [x; textscan(l, '%n')];  % wenn das erste Wort File ist, dann Daten auslesen und anhängen. (HIER KOMME ICH NICHT WEITER)
            end
        end  

    end  
        msgbox_text1='. Datensatz erfolgreich importiert';
        msgbox_text=[kstr msgbox_text1];
        uiwait(msgbox(msgbox_text));

end


Ich hoffe ich konnte mein Problem so gut es geht beschreiben...

Viele Grüße,

Waba
Private Nachricht senden Benutzer-Profile anzeigen


Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 11.08.2015, 10:19     Titel:
  Antworten mit Zitat      
Zitat:
. So recht ist mir das aber noch nicht geglückt.
das ist keine sehr ausführliche fehlerbeschreibung. außerdem wäre es besser wenn du eine beispieldatei zur verfügung stellst damit man damit rumprobieren kann.
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
waba
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 29
Anmeldedatum: 14.02.14
Wohnort: Dresden
Version: R2014a
     Beitrag Verfasst am: 11.08.2015, 11:52     Titel:
  Antworten mit Zitat      
Das "so recht ist mir das noch nicht geglückt" sollte heißen, dass ich so weit gekommen bin wie in meinem source-code zu sehen ist und mir dann das nötige know-how ausging wie ich am besten mein Problem lösen könnte. Da ich auch nicht wirklich eine Idee habe wie ich am besten da ran gehe, gingen mir auch die Ideen aus nach welchen Schlagwörtern ich in diesem Fall am besten suchen könnte um eine Lösung zu finden...

Die Datei selber konnte ich leider nicht anfügen. Es kam ein Ausschrift "Die Erweiterung dat ist hier verboten". Aus diesem Grund habe ich einen Auszug aus der Textdatei eingefügt.

Gibt es denn eine andere Möglichkeit die .dat-Datei hier zu zeigen/ weiter zu geben?
Private Nachricht senden Benutzer-Profile anzeigen
 
waba
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 29
Anmeldedatum: 14.02.14
Wohnort: Dresden
Version: R2014a
     Beitrag Verfasst am: 13.08.2015, 15:20     Titel:
  Antworten mit Zitat      
Ich bins jetzt nochmal also bis jetzt bin ich nun so weit gekommen, dass ich mit Hilfe von

Code:
File=str2num(Inhalt(41));


mir den Wert an der 41ten Stelle der betreffenden Zeile auslesen kann und in einem Cell abspeichern kann. Allerdings möchte ich nicht abhängig von der Zeichenanzahl sein. Ich benötige also einen Befehl der aussagt "nimm die erst/ zweite Dezimalzahl aus genau dieser Zeile"

gibt es soetwas bzw wie könnte ich das lösen?

Viele Grüße Daniel
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 13.08.2015, 16:57     Titel: Re: Bestimmte Werte aus Zeilen auslesen
  Antworten mit Zitat      
Hallo waba,

Du hast noch nicht klar beschrieben, was das Problem ist, das Du lösen möchtest.

Zitat:
Mein Gedanke war in einer Schleife abzufragen welchen Zeilenanfang das Dokument hat und anschließend zu sagen was aus der betreffenden Zeile Importiert werden soll. So recht ist mir das aber noch nicht geglückt.

Was soll aus welchen Zeilen importiert werden. So lange Du das nicht erklärst, können wir keine Tipps dazu geben.

Wenn "Multiselect" ausgeschaltet wird, ist es nicht nützlich eine Schleife über die Files laufen zu lassen.

Filenamen hängt man besser mit fullfile aneinander als mit strcat , weil ersteres die File-Separatoren berücksichtigt.

Jedes fopen benötigt ein fclose , sonst gehen Dir irgendwann die File-Handles aus.

if strcmpi(line(1), 'File') tut bestimmt nicht, was es soll: Du vergleichst den ersten Buchtaben der Zeile mit dem String 'File'. Aber das kann niemals identisch sein. Besser: if strncmpi(line, 'File', 4)

Zitat:
x = [x; textscan(l, '%n')]; % wenn das erste Wort File ist, dann Daten auslesen und anhängen. (HIER KOMME ICH NICHT WEITER)

Und für "hier komme ich nicht weiter" lässt sich kein guter Ratschlag geben.

Zitat:
mir den Wert an der 41ten Stelle der betreffenden Zeile auslesen kann und in einem Cell abspeichern kann. Allerdings möchte ich nicht abhängig von der Zeichenanzahl sein. Ich benötige also einen Befehl der aussagt "nimm die erst/ zweite Dezimalzahl aus genau dieser Zeile"

Das ist auch noch nicht nachvollziehbar. Was ist denn "Inhalt"? Wieso suchst Du den 41.sten Buchstaben?

Zitat:
"nimm die erst/ zweite Dezimalzahl aus genau dieser Zeile"

Das klingt schon besser. Wenn Du die zweiter Dezimalzahl suchst, müssten man noch wissen, was davor kommt und wie Du die Dezimal-Zahlen von dem Drumherum unterscheiden kannst - Kommas? Leerzeichen?

Die beste Herangehensweise ist es also, das Problem zunächst präzise zu erfassen und dann auch klar aufschreiben zu können. Dann finden sich die Lösungen fast wie von selbst.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
waba
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 29
Anmeldedatum: 14.02.14
Wohnort: Dresden
Version: R2014a
     Beitrag Verfasst am: 13.08.2015, 17:43     Titel:
  Antworten mit Zitat      
Hallo Jan,

danke für deine Mühen!

also in der Zeile

File: C:\Pfad\p-6-1.adv, Probe 1 :

steht in meinem Fall die "6" als x-Koordinate an der 41ten Stelle in dieser Zeile. In der hier gezeigten Zeile ist es die 17te Stelle. Durch

Code:
fid = fopen('test.dat');
k = 0;

while ~feof(fid)
   Inhalt = fgetl(fid);
   
   if ~ischar(Inhalt), break, end  % Abbruch, falls Dateiende => Variable wird zu -1 => Abbruch
   
   File_gefunden = strfind(Inhalt,'File');
   if File_gefunden ~= 0;
      File=str2num(Inhalt(17));
      k = k+1;
      if File ~= 0;
      x{k,1} = [num2str(File)];
      end
   end
end


kann ich nun mein Dokument durchsuchen und immer wenn "File" am Zeilenanfang steht wird die 41te Stelle aus eben genau dieser Zeile in x abgespeichert. Da ich aber nun nicht immer nur die 41te Zahl auslesen möchte, sondern wenn zum Beispiel der Pfad ein anderer ist oder die x-Koordinate zweistellig ist diese eben trotzdem komplett auslesen möchte benötige ich einen befehl oder eine Funktion mit welcher dies möglich ist.

Momentan probiere ich es mit
Code:
regexp(Inhalt,'[0-9]'
das ist allerdings erstmal nur ein codeschnippsel mit dem ich herum probiere... Damit kann ich zumindest schonmal die stellen an welchen überhaupt Ziffern stehen bestimmen.

Viele Grüße
Private Nachricht senden Benutzer-Profile anzeigen
 
waba
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 29
Anmeldedatum: 14.02.14
Wohnort: Dresden
Version: R2014a
     Beitrag Verfasst am: 14.08.2015, 10:31     Titel:
  Antworten mit Zitat      
Hab mir jetzt erstmal so geholfen da meine Werte maximal zweistellig sind:

Code:
     x_Stelle = regexp(Inhalt,'[0-9]');
     
        if x_Stelle(1) + 1 == x_Stelle(2)
              X = x_Stelle(1:2);
        else
              X = x_Stelle(1);
        end
     
      File=str2num(Inhalt(X));
      k = k+1;
      if File ~= 0;
      x{k,1} = [num2str(File)];
      end


Das ganze steht natürlich eingebettet in dem Code von oben. Jetzt muss ich nur noch das Vorzeichen filtern...
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 - 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.