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

Nur bestimmte Zeilen aus Text auslesen

 

pfeili
Forum-Century

Forum-Century


Beiträge: 177
Anmeldedatum: 27.08.08
Wohnort: ---
Version: R2019b
     Beitrag Verfasst am: 16.08.2011, 09:39     Titel:
  Antworten mit Zitat      
Lieber Chris,

super. Es funktioniert. Ich danke dir. Kannst du mir vielleicht noch sagen, wie ich in der ersten Spalte einen bestimmten String suche, z. B. 'esv_p1' und mir den in genau dieser Zeile stehenden Wert, der ja in Spalte 3 steht, ausgeben lasse? Ich will es möglichst flexibel gestalten, da sich die Zeilennummer des gesuchten Strings auch mal ändern kann.

Das wäre mir eine riesige Hilfe.

pfeili
Private Nachricht senden Benutzer-Profile anzeigen


pfeili
Forum-Century

Forum-Century


Beiträge: 177
Anmeldedatum: 27.08.08
Wohnort: ---
Version: R2019b
     Beitrag Verfasst am: 16.08.2011, 10:13     Titel:
  Antworten mit Zitat      
Es müsste doch irgendwie in folgende Richtung gehen:

Code:

fid = fopen('C:\Windows\Temp\text.txt', 'r');
data = {}
    while ~feof(fid)
        l = fgetl(fid)
        data = [data,textscan(l, '%s %s %f')];
   end
% die komplette erste Spalte der Cells, in denen gesucht werden soll
str = data{:,1};
% wonach soll gesucht werden
pat = 'esv_p1_bar';
% ausführen mit strfind
[items] = strfind(str,pat);
 


Funktioniert aber nicht so recht.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

falls das noch nicht geklärt ist, wie immer die Rückfragen:
Gibt es eine Fehlermeldung? Welche?
Stimmt das Ergebnis nicht mit dem erwarteten überein? Inwiefern?

"Funktioniert aber nicht so recht." ist leider nicht aussagekräftig.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
pfeili
Forum-Century

Forum-Century


Beiträge: 177
Anmeldedatum: 27.08.08
Wohnort: ---
Version: R2019b
     Beitrag Verfasst am: 19.08.2011, 09:28     Titel:
  Antworten mit Zitat      
Hallo Harald,

sorry. Ist natürlich wirklich nicht hilfreich. Das Problem hat sich mittlerweile insofern gelöst, da ich in der Ausgangstextdatei einen Fehler hatte (35-0 statt 35.0). Da kam er mit der Matrixgröße nicht zurecht.

So lautet jetzt mein Code:

Code:

fid = fopen('C:\Windows\Temp\text.txt', 'r');
data = {}
    while ~feof(fid)
        l = fgetl(fid)
        data = [data; textscan(l, '%s %s %f')];
   end

for i =1:length(data)
textdata(i) = data{i,1}
numdata(i) = data{i,3}
end

pat = 'esv_p1_bar';

[items] = strfind(textdata,pat);
 


Folgende zwei Probleme habe ich aber noch:

1. wie wandle ich die numdata (das sind ja Cells) in den Datentyp double um, damit ich damit rechnen kann?

2. bisher suche ich nur nach einem String und items ist eine Matrix, die überall leer ist und nur an der Stelle eine 1 ausgibt, wo eine Übereinstimmung gefunden wird. Ich benötige aber die exakte Zeile. Wie geht das dann? UND: Kann ich das auch mit einer Matrix aus Strings machen, mir also für jeden String die entsprechende Zeile anzeigen lassen? Es soll nämlich nicht ausgeschlossen werden, dass sich die Ausgangstextdatei von der Anordnung her auch mal ändern kann.

Oder vielleicht noch einfacher gesagt: wie bekomme ich es hin, dass ich Variablen erzeuge, die den Namen aus data{i,1} tragen und denen ihr Wert aus data{i,3} zugewiesen wird, um sie genau so innerhalb von Matlab verwenden zu können, wie ich es aus der Textdatei entnehme (Variable = Wert)?

Beste Grüße

pfeili

Zuletzt bearbeitet von pfeili am 19.08.2011, 10:30, insgesamt einmal bearbeitet
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

bitte Code überprüfen.
- Willst du wirklich ein Komma zwischen data und textscan haben, statt eines Strichpunkts?
- Was ist die Variable str? Sie wird hier nicht zugewiesen.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
pfeili
Forum-Century

Forum-Century


Beiträge: 177
Anmeldedatum: 27.08.08
Wohnort: ---
Version: R2019b
     Beitrag Verfasst am: 19.08.2011, 10:32     Titel:
  Antworten mit Zitat      
Hallo Harald,

jaja, das passiert wenn man auf zwei Rechnern arbeitet und auf dem mit dem Matlab-Code keinen Internetanschluss hat, wodurch beim Abtippen Fehler passieren. Danke, ich habe es gleich oben ausgebessert.

Beste Grüße

pfeili
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 19.08.2011, 11:01     Titel:
  Antworten mit Zitat      
und was ist mit der Variable str?
Private Nachricht senden Benutzer-Profile anzeigen
 
pfeili
Forum-Century

Forum-Century


Beiträge: 177
Anmeldedatum: 27.08.08
Wohnort: ---
Version: R2019b
     Beitrag Verfasst am: 19.08.2011, 12:00     Titel:
  Antworten mit Zitat      
Die gibt es doch nicht mehr. Ich habe doch stattdessen textdata eingesetzt.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 19.08.2011, 12:38     Titel:
  Antworten mit Zitat      
Hallo,

1. Daten sind schon numerisch.
2.
Code:


Die weiteren Teile, vor allem den "einfacher gesagt" - Teil, verstehe ich leider nicht.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
BlackDread
Forum-Century

Forum-Century


Beiträge: 212
Anmeldedatum: 11.05.11
Wohnort: ---
Version: 2015a
     Beitrag Verfasst am: 19.08.2011, 13:59     Titel:
  Antworten mit Zitat      
(@Harald: ich glaube das meint er)
Mit ausdrücklicher Warnung, dass es vermieden werden sollte wenn möglich! (und das ich nicht gesteinigt werde, weil ich dir eval aufdrück Very Happy)

Code:
eval([data{i,1}{1,1} '=' num2str(data{i,3}) ';'])


Hiermit kannst du zwar "variabel" arbeiten, es stiftet allerdings Verwirrung, du kriegst Probleme wirklich zu wissen, welche Variablen gerade existieren, musst also das wiederum umständlich herausfinden usw. und so fort.

Also lieber umgehen falls möglich

Gruß Chris
Private Nachricht senden Benutzer-Profile anzeigen
 
pfeili
Forum-Century

Forum-Century


Beiträge: 177
Anmeldedatum: 27.08.08
Wohnort: ---
Version: R2019b
     Beitrag Verfasst am: 22.08.2011, 10:42     Titel:
  Antworten mit Zitat      
Danke vielmals für eure Antworten. Leider kann ich die Vorschläge noch nicht ausprobieren, weil er mir jetzt folgende Fehlermeldung ausgibt:

Zitat:

??? Improper assignment with rectangular empty matrix.

Error in ==> main_menu>load_calculation_data_Callback at 1181
numdata(i) = data{i,3}



Was läuft denn jetzt auf einmal falsch?

Zur Erklärung des "einfacher-gesagt-Teils":

1. ich lade eine txt-Datei, in welcher zeilenweise steht Variable = Wert

Code:

fid = fopen(PathName, 'r');
 


2. ich lade alles zeilenweise ein und trenne es in 3 Spalten auf (%s %s %f), solange, bis ich das Ende der txt-Datei erreiche

Code:

while ~feof(fid)
    l = fgetl(fid);
    data = [data; textscan(l, '%s %s %f')]
end
 


3. ich möchte Matlab vermitteln, dass die erste Spalte Namen enthält, die ich als Variablen in Matlab genauso bezeichnen und ihnen die Werte aus Spalte drei zuweisen möchte. Genau das ist mein Knackpunkt.

Beste Grüße

pfeili
Private Nachricht senden Benutzer-Profile anzeigen
 
pfeili
Forum-Century

Forum-Century


Beiträge: 177
Anmeldedatum: 27.08.08
Wohnort: ---
Version: R2019b
     Beitrag Verfasst am: 22.08.2011, 15:18     Titel:
  Antworten mit Zitat      
Teil 1 meiner vorhergehenden Frage kann ich beantworten. Es lag an bestimmten Zeilen in der Ausgangsdatei, welche eben nicht das Format String-String-Float hatten. Das konnte ich durch Entfernen der jeweiligen Zeilen aus der Welt schaffen.

Teil 2 ist immer noch ein Buch mit sieben Siegeln.

pfeili
Private Nachricht senden Benutzer-Profile anzeigen
 
pfeili
Forum-Century

Forum-Century


Beiträge: 177
Anmeldedatum: 27.08.08
Wohnort: ---
Version: R2019b
     Beitrag Verfasst am: 23.08.2011, 13:13     Titel:
  Antworten mit Zitat      
Hier ein Auszug des Formats meiner txt-Datei:

Zitat:

gen_num_csv = 5
gen_num_pipes = 1
turb_d1n_mm = 902.0
turb_d1w_mm = 1959.0
turb_c1ax_ms = 83.2
turb_c1u_ms = 204.0
turb_v1_m3kg = 4.8
turb_beta1_deg = 70.0
turb_d2n_mm = 902.0
turb_d1w_mm = 2226.0
turb_c2ax_ms = 209.0
turb_c2u_ms = -33.8
turb_v2_m3kg = 21.0
turb_beta2_deg = 32.0
turb_ila = 64
turb_lla_mm = 130
turb_hla_mm = 34
turb_dw1_mm = 20


Nun möchte ich wissen

1. welche Parameter sind mir anhand der txt-Datei übergeben worden? -> das steht in der Spalte {:,1}

2. wie lege ich sie als Variable mit zugehörigem Wert (diese stehen in {:,3}) in meinem Matlab-Programm ab?

Hat noch jemand eine Idee?

pfeili
Private Nachricht senden Benutzer-Profile anzeigen
 
BlackDread
Forum-Century

Forum-Century


Beiträge: 212
Anmeldedatum: 11.05.11
Wohnort: ---
Version: 2015a
     Beitrag Verfasst am: 23.08.2011, 13:40     Titel:
  Antworten mit Zitat      
Hallo pfeili,

wenn du 2. wirklich so willst... nur hast du danach Probleme mit diesen Variablen weiter zu arbeiten, da du ja nicht wirklich weißt welche existieren und musst dann umständlich mit whos arbeiten.

Code:

fid = fopen('C:\Windows\Temp\text.txt', 'r');
data = {}
    while ~feof(fid)
        l = fgetl(fid)
        data = [data; textscan(l, '%s %s %f')];
   end

for i =1:length(data)
eval([data{i,1}{1,1} '=' num2str(data{i,3}) ';'])
end


Gruß Chris
Private Nachricht senden Benutzer-Profile anzeigen
 
pfeili
Forum-Century

Forum-Century


Beiträge: 177
Anmeldedatum: 27.08.08
Wohnort: ---
Version: R2019b
     Beitrag Verfasst am: 24.08.2011, 14:40     Titel:
  Antworten mit Zitat      
Hallo,

genauso geht es. Very Happy Vielen Dank. Ihr habt mir wahnsinnig geholfen. Danke und einen herrlichen Tag wünscht

pfeili
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite Zurück  1, 2

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.