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

text file auslesen

 

shena
Forum-Anfänger

Forum-Anfänger


Beiträge: 36
Anmeldedatum: 17.03.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.07.2015, 13:00     Titel: text file auslesen
  Antworten mit Zitat      
Hallo

ich möchte aus einem Textfile nach einem bestimmten Wort suchen (im Beispiel "Hallo") und dann alles danach bis zu einem anderen Wort ("Tschüss") auslesen.
Mein textfile sieht folgendemaßen aus:
Hallo
5 5 7 8
Tschüss

ich möchte jetzt also nur die Zahlen dazwischen. Habe folgenden Code:
Code:
liste=dir('*.txt');
file = fopen('test.txt');
C=textscan(file, '%s','delimiter');

TF=strncmp(C,'Hallo',5)

if TF == 1
    celldisp(C)
end


Allerdings klappt das schon nicht und das "Tschüss" habe ich auch noch nicht drin. Könnt ihr mir eventuell einen Tipp geben, wie ich weiterkommen könnte? Danke!
Viele Grüße
shena
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: 27.07.2015, 13:12     Titel:
  Antworten mit Zitat      
Zitat:
Allerdings klappt das schon nicht
das ist keine sehr ausführliche fehlerbeschreibung.


Zitat:
doc zu if: An expression is true when its result is nonempty and contains only nonzero elements

dein zeile
Zitat:
if TF == 1
ist also immer false falls nicht überall hallo steht.

Code:

gibt einfach nur die ganze cell C aus. mit alles was drin steht. das ist nicht das was du willst.
guck dir mal logsches indizieren an oder auch strfind
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
shena
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 36
Anmeldedatum: 17.03.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.07.2015, 14:40     Titel:
  Antworten mit Zitat      
Vielen Dank für deinen Tip!

mit
Code:
idx = strfind(C{1,1}, 'Hallo')

idx2 = strfind(C{1,1}, 'Tschüss')
kann ich nun auch die Indexes von den beiden Strings auslesen, allerdings weiß ich immernoch nicht wie dann an die Daten dazwischen komme. Hatte an sowas gedacht:
Code:
Z = [C; data(idx:idx2)]


Aber da bekomme ich die Fehlermeldung Undefined function or method
'_colonobj' for input arguments of type
'cell'.

Was mache ich falsch?
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: 27.07.2015, 14:45     Titel:
  Antworten mit Zitat      
Zitat:
Code:
Z = [C; data(idx:idx2)]

was ist data? was ist C? sind C die daten aus deinem ersten post? warum sollten nur teile ausgegeben werden wenn Z das komplette C zuordnest und dann nochmal irgendetwas das Data heist unten anhängst? guck am besten mal in der doc. da steht wie man auf die elemente von cells zugreift. ohne ein lauffähigs beispiel muss man da nur raten. sihe dazu auch den thread aus meiner signatur.
grüße
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
shena
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 36
Anmeldedatum: 17.03.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.07.2015, 15:08     Titel:
  Antworten mit Zitat      
Hallo,

also mein Code sieht folgendermaßen aus
Code:
liste=dir('*.txt');
file = fopen('test.txt');
C=textscan(file, '%s','delimiter');

idx = strfind(C{1,:}, 'Hallo')

idx2 = strfind(C{1,:}, 'Tschüss')


es fehlt also "nur" noch der letzte Teil, um alles zwischen idx und idx2 auszulesen. Allerdings stehe ich da momentan total auf dem Schlauch. idx und idx2 sind auch nicht bei jedem File gleich, nutzt mir das dann überhaupt etwas? Wie man auf Elemente zugreift weiss ich eigentlich schon, allerdings nicht wie mir das hier nutzt...

Gruß
shena
Private Nachricht senden Benutzer-Profile anzeigen
 
shena
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 36
Anmeldedatum: 17.03.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.07.2015, 15:13     Titel:
  Antworten mit Zitat      
mit folgendem Zusatz
Code:
C{1,1}(2:5)  

würde es funktionieren wenn Hallo und Tschüss immer an der gleichen Stelle (Stelle 1 und 6) steht, aber das tut es ja nicht.
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: 27.07.2015, 15:17     Titel:
  Antworten mit Zitat      
Zitat:
würde es funktionieren wenn Hallo und Tschüss immer an der gleichen Stelle (Stelle 1 und 6) steht, aber das tut es ja nicht.

du hast doch den index bestimmt. benutze ihn doch. das ist doch der sinn daran das du erst suchst wo die worte stehen.
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
shena
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 36
Anmeldedatum: 17.03.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.07.2015, 15:19     Titel:
  Antworten mit Zitat      
Meinst du mit dem Befehl
Code:
C{1,1}(idx:idx2)  
? Da bekomme ich die Fehlermeldung:
Undefined function or method '_colonobj' for input arguments of type 'cell'.
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: 27.07.2015, 15:29     Titel:
  Antworten mit Zitat      
es ist immer um längen einfacher wenn man lauffähige beispiele generiert... jetzt musste ich mir selber eins ausdenken.
Code:
C={'hallo';'1 2 3';'345';'tschüss'}
idx = find(strcmp(C, 'hallo'));
idx2 = find(strcmp(C, 'tschüss'));
Z=C(idx+1:idx2-1);

dabei sind nicht die dinger berücksichtigt wenn hallo oder tschüss mehr als einmal vorkommen oder eines der worte garnicht etc. oder tschüss vor hallo.
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
shena
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 36
Anmeldedatum: 17.03.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.07.2015, 15:39     Titel:
  Antworten mit Zitat      
Sorry, hatte in meinem ersten Post das Textfile dazu geschrieben, aber leider nicht richtig generiert.

Jetzt funktioniert es auf jeden Fall! Vielen Dank!!!

Eine Verständnisfrage hätte ich aber dennoch: Warum funktioniert es mit find(strcmp) und nicht mit strfind?
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: 27.07.2015, 15:47     Titel:
  Antworten mit Zitat      
weil strfind in jedem cell nach dem wort sucht und dann den index angibt ab wo es steht und ein cell zurück gibt. strcmp gibt ein logic array zurück das man dann nach dem index durchsuchen kann.
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
shena
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 36
Anmeldedatum: 17.03.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.07.2015, 15:56     Titel:
  Antworten mit Zitat      
Alles klar, habe ich verstanden! Vielen Dank!
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.