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

Finde spez. Position in File

 

Slip

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.10.2011, 10:38     Titel: Finde spez. Position in File
  Antworten mit Zitat      
Hallo Community

Ich versuche gerade für meine Projektarbeit in MATlab etwas bestimmtes zu realisieren. Ich finde nur einen Befehl nicht den ich benötige. Evtl kann mir ja hier jemand behilflich sein

Erklärung:

Ich habe ein *.txt file in dem meherere Daten in mehreren Zeilen stehen. z.B.

------------
text1
text2
x=asd;y=xyf;
text4
z=1234;
usw...

Nun möchte ich mit fopen die datei einlesen und z.b. z auslesen und mir in eine Variable packen. In C ging das u.a. mit fgets.

Leider stehe ich entweder böse auf dem Schlauch oder stell mich zu doof für Matlab an. Ich bekomms nicht hin, dass ich eine Spezifische Stelle in der Datei auslesen kann. Also z.b. so:

VAR1 = Finde stelle "Z=" lese von dort bis zum delimiter ";"


Kann mir jemand behilflich sein?
Danke im Voraus!


Harald
Forum-Meister

Forum-Meister


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

auch in MATLAB kannst du dafür FGETS oder FGETL verwenden.
Was hast du denn bisher versucht?

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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.10.2011, 15:33     Titel:
  Antworten mit Zitat      
Meherer Dinge ... Aber weder mit FGETS noch mit FGETL bekomm ich das was ich haben will. Exeprimentiere nun mit regexp. Aber auch das bietet nicht die richtige Funktionalität


Nochmal zu dem Beispiel:
------------
text1
text2
x=asd;y=xyf;
text4
z=1234;
usw...


Ich möchte ums genau zu sagen dass ich den Wert "xyf" ausgegeben bekomme.

Also muss ich
1) Die gesamte Datei (und die is schweine lang) einlesen
2) Eine bestimmte Anfagsposition suchen (hier 'y=')
3) Text einlesen bis Wert erreicht (hier ';')

Die Matlab Beispiele in der Hilfe sind teilweise zwar ganz okay, aber furchtbar schlecht beschrieben. Bei regexp soll man start / ende angeben können, aber es gibt nicht ein Beispiel wie man da Werte hinterlegt...
 
Harald
Forum-Meister

Forum-Meister


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

ich meinte schon, dass du das, was deinem Ziel am nächsten kam, auch postest (also: den Code).
Hier mal ein Versuch von mir:

Code:
fid = fopen('daten1.txt');
while ~feof(fid)
    z = fgetl(fid);
    pos = strfind(z, 'y=');
    if ~isempty(pos)
        ende = strfind(z(pos:end), ';');
        wert = z(pos+2:pos+ende(1)-2);
    end
end


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Balu
Forum-Anfänger

Forum-Anfänger


Beiträge: 28
Anmeldedatum: 17.09.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.09.2012, 13:05     Titel:
  Antworten mit Zitat      
hallo Harald,

bei mir gibt die Schleife solchen Fehler ab:

Attempted to access ende(1); index out of bounds because numel(ende)=0

leider verstehe ich nicht was es bedeutet, kannst du kurz erklären was es ist?

Gruß
Dieter
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: 25.09.2012, 19:12     Titel:
  Antworten mit Zitat      
Hallo,

der Code war auf einen sehr speziellen Fall zugeschnitten: Suche nach einem String, der mit "y=" anfängt und mit ";" endet.

Ich vermute mal, dass du nicht ganz genau das gleiche Problem hast. Die Frage wird also sein, was bei dir anders ist und warum der Code bei dir dann nicht funktioniert.
Die Frage kannst aber nur du beantworten, indem du ein Beispiel der zu analysierenden Datei und den Code, den du verwendest, postest.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Balu
Forum-Anfänger

Forum-Anfänger


Beiträge: 28
Anmeldedatum: 17.09.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.09.2012, 07:32     Titel:
  Antworten mit Zitat      
Hallo Harald,

mein Text (es ist eine csv Datei) schauet so aus:

Zitat:
Blisterprüfung CC-Cord 1
Artikelbezeichnung: Hedstroem Zeitstempel Prüf Ende: 2012.08.23_23_53_42
(article description) (report time:)
Artikel-Nr: V040373025045 Gesamte Pruefzeit: 0,46h
(article no.) (total testing time:)
Fertigungsauftrag 025691 Gesamte Fertigungsmenge: 201
(work order no.) (total manufacturing quantity)
Chargennummer: 025691 Anzahl Gutteile: 163
(lot no. job) (total quantity accepted parts)
Lotnr Stahl: 018514 Anzahl Schlechtteile: 38
(lot no. steel) (total quantity not accepted parts)

und so hab ich deinen Code benutzt:

Code:
fid = fopen('daten1.txt');
while ~feof(fid)
    z = fgetl(fid);
    pos = strfind(z, 'V040373025045');
    if ~isempty(pos)
        ende = strfind(z(pos:end), ';');
        wert = z(pos+2:pos+ende(1)-2);
    end
end


Es funktioniert tatsächlich=) aber gibt oben genannten Fehler, wie kann ich dann so machen, das Matlab mir nur "V040373025045" findet?
Und es sollen praktisch mehrere Dateien nach diesen Nummer durchgesucht werden.
Gruß
Dieter

Zuletzt bearbeitet von Balu am 26.09.2012, 08:38, insgesamt einmal bearbeitet
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: 26.09.2012, 22:01     Titel:
  Antworten mit Zitat      
Hallo,

das Problem ist dann, dass mein (und auch dein) Code nach einem ; als Abschluss der Sequenz sucht.

Mal die Gegenfrage: der dich interessierende Teil beginnt mit V040373025045, wenn ich das richtig verstehe. Dann stellt sich die Frage: was genau ist der interessante Teil, insbesondere: wo hört er auf?

Grüße,
Harald
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.