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

Txt-Datei einlesen -> String suchen -> Wert danach spe

 

JaSoIstEs
Forum-Guru

Forum-Guru


Beiträge: 266
Anmeldedatum: 01.10.12
Wohnort: Hessen
Version: 2019b
     Beitrag Verfasst am: 04.05.2018, 17:59     Titel: Txt-Datei einlesen -> String suchen -> Wert danach spe
  Antworten mit Zitat      
Hallo,

wie schaffe ich es durch eine Text-Datei Zeile für Zeile durchzugehen und nach bestimmten String/Character Reihenfolge zu suchen und Wert der danach dort aufgeschrieben ist zu speichern.
Würde gerne alle gefundenen Werte in einem Vector speichern (Reihenfolge muss so bleiben wie er diese gefunden hat).

Text-Zeile kann wie folgt aussehen:

1/200 t = 0 s

Und ich brauche nur die 0.
1000 Zeilen später könnte dann wieder erneut

2/200 t = 0.5 s

stehen. Dann brauche ich nur die 0.5.

Vielen Dank im Voraus.
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.05.2018, 10:13     Titel:
  Antworten mit Zitat      
Hallo,

ich würde es mit textscan und einem Formatstring wie '%*f t = %f s' versuchen.
Wenn in der Datei auch anders strukturierte Zeilen enthalten sind, die einzelnen Zeilen mit fgetl holen und z.B. vorab testen, ob = enthalten ist.

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

Forum-Guru

Forum-Guru


Beiträge: 266
Anmeldedatum: 01.10.12
Wohnort: Hessen
Version: 2019b
     Beitrag Verfasst am: 07.05.2018, 09:32     Titel:
  Antworten mit Zitat      
Hallo Harald,

danke dir für deine schnelle Antwort.
Ich hab dir hier mal eine Beispiel Datei angehängt.
Wenn ich deinen Vorschlag einpflege bekomme ich nur [] in mein Cell geschrieben.
Zum einlesen der zwei Spalten welche die Werte beinhalten verwende ich folgendes:

Code:

clc;
clear all;

fmt = '%f %f';
fid=fopen(Beispiel_Datei.txt','r');
k = 1;
while (~feof(fid))
    k = k+1;
    c(k-1,1)=textscan(fid,fmt,'collectoutput',true,'HeaderLines',7);
end

fid=fclose(fid);
 


Beispiel_Datei.txt
 Beschreibung:

Download
 Dateiname:  Beispiel_Datei.txt
 Dateigröße:  598 Bytes
 Heruntergeladen:  258 mal
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.05.2018, 19:50     Titel:
  Antworten mit Zitat      
Hallo,

Code:
fmt = '%f ';
fid=fopen('Beispiel_Datei.txt','r');
k = 1;
c = [];
while (~feof(fid))
    l = fgetl(fid);
    eqpos = strfind(l, '=');
    if ~isempty(eqpos)
        c = cell2mat([c; textscan(l(eqpos+1:end),fmt)]);
    end
end
c
fid=fclose(fid);


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

Forum-Guru

Forum-Guru


Beiträge: 266
Anmeldedatum: 01.10.12
Wohnort: Hessen
Version: 2019b
     Beitrag Verfasst am: 07.05.2018, 22:57     Titel:
  Antworten mit Zitat      
Vielen Dank für deine Hilfe.
Funktioniert wie es soll.
Aber sobald ich deinen Code in meine While setze überspringt er dann einen Wert.
Woran kann das liegen?

Kleine Frage nebenbei... . Kann man beim einlesen einer Text-File die Daten so "manipulieren" das sie nicht so viel Speicherplatz einnehmen bzw. kann man die Byte Zahl senken in dem man den Datentyp ändert?
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: 08.05.2018, 07:16     Titel:
  Antworten mit Zitat      
Hallo,

warum denn noch eine for-Schleife?
Bitte den Code posten.

Du kannst die Daten z.B. als Single importieren, siehe Doku von textscan. Was anderes bietet sich für mich bei Dezimalzahlen nicht an.

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

Forum-Guru

Forum-Guru


Beiträge: 266
Anmeldedatum: 01.10.12
Wohnort: Hessen
Version: 2019b
     Beitrag Verfasst am: 10.05.2018, 17:29     Titel:
  Antworten mit Zitat      
Ne nicht noch eine For-Schleife.
Im Moment habe ich zwei While-Schleifen drin.
1. Zum einlesen der zwei Zahlen reihen
2. Zum finden und speichern der Zeitwerte
Wenn ich deinen Code (Ohne while) in meine while verpacken will vertragen die sich nicht. Ich kann es mir leider nicht so ganz erklären. Vielleicht habe ich textscan hier nicht so richtig verstanden.
Im folgenden Fall funktioniert alles so wie ich es will.

Code:

clc;
clear all;

fmt = '%f %f';
fid=fopen('Beispiel_Datei.txt','r');
k = 1;
while (~feof(fid))
    k = k+1;
    c(k-1,1) = textscan(fid,fmt,'collectoutput',true,'HeaderLines',7);
end

fmt = '%f ';
d = [];
while (~feof(fid))
    l = fgetl(fid);
    eqpos = strfind(l, '=');
    if ~isempty(eqpos)
        d = cell2mat([d; textscan(l(eqpos+1:end),fmt)]);
    end
end
fid=fclose(fid);
 


Wenn ich das aber so codiere:
Code:
fmt = '%f %f';
fmttime = '%f ';
fid=fopen('Beispiel_Datei.txt','r');
k = 1;
d = [];
while (~feof(fid))
    k = k+1;
    l = fgetl(fid);
    eqpos = strfind(l, '=');
    if ~isempty(eqpos)
        d = cell2mat([d; textscan(l(eqpos+1:end),fmttime)]);
    end
    c(k-1,1) = textscan(fid,fmt,'collectoutput',true,'HeaderLines',7);
end

Dann nimmt er bei mir das erste "t = " nicht mit bzw. überspringt er das.
Private Nachricht senden Benutzer-Profile anzeigen
 
JaSoIstEs
Themenstarter

Forum-Guru

Forum-Guru


Beiträge: 266
Anmeldedatum: 01.10.12
Wohnort: Hessen
Version: 2019b
     Beitrag Verfasst am: 10.05.2018, 22:27     Titel:
  Antworten mit Zitat      
Mir ist gerade noch ein Problem aufgefallen.
Beim einlesen der zwei Zahlen-Spalten kommt ja irgendwann die Zeile
"2/3 t = 0.682667 s"
Hier nimmt er die zwei für die erste Spalte und für "/" fügt er ein NaN rein.
Kann an diese Zeile irgendwie ignorieren? Oder gibt es hier einen Workaround?
Ist mir leider erst eben aufgefallen.
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.