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 ab bestimmter Zeile erst einlesen

 

Lexis

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.05.2009, 10:20     Titel: Text ab bestimmter Zeile erst einlesen
  Antworten mit Zitat      
Hallo,

ich möchte ein Text-File mit fgetl einlesen, allerdings erst ab der Zeile nach den "------------".

Code:


res = struct;
fid = fopen(filename);
   
   Keyword = {'---'};
 
   while ~feof(fid);
          line = fgetl(fid);
         
        if  strcmp(line, Keyword) == 1
           
            % hier muss irgendwie etwas geändert werden  Rolling Eyes
           
          res.(['X' line(21:end)]) = datenum(line(1:19),'dd.mm.yyyy HH:MM:SS:FFF');
        end
   end
fclose(fid);
end

 


kann mir jemand helfen?
lg lexis[/quote]


Lucia
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 55
Anmeldedatum: 19.03.09
Wohnort: ---
Version: R2008b
     Beitrag Verfasst am: 06.05.2009, 10:51     Titel:
  Antworten mit Zitat      
Hi,
steht denn "---" in einer eigenen Zeile, und alle Zeilen danach sollen eingelesen werden?
Code:

...
while ~feof(fid) && ~strcmp(line, Keyword)
       line = fgetl(fid);
end
while ~feof(fid)
   line = fgetl(fid); % erste Zeile nach ---
...
 

Falls in der Zeile nach den Zeichen '---' noch was anderes stehen sollte, kann man strncmp verwenden.
Private Nachricht senden Benutzer-Profile anzeigen
 
Lexis

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.05.2009, 11:01     Titel:
  Antworten mit Zitat      
hey vielen dank,

für die schnelle antwort.
Die datei hat einen header von ca. 5 zeilen
und alles nach der Zeile mit "--------------" soll eingelesen werden.



Code:
function res = read_frame(filename)
res = struct;
fid = fopen(filename);
   
   Keyword = {'---'};
   line = fgetl(fid);
   
   while ~feof(fid) && ~strcmp(line, Keyword)
       line = fgetl(fid);
   end

   while ~feof(fid)
        line = fgetl(fid);
           
          res.(['X' line(21:end)]) = datenum(line(1:19),'dd.mm.yyyy HH:MM:SS:FFF');
       
   end
fclose(fid);
end
 


funktioniert leider noch nicht, da ja vor der Zeile "----------" noch andere zeilen sind, die ebenfalls nicht eingelesen werden sollen.
 
marco_lissabon
Forum-Anfänger

Forum-Anfänger


Beiträge: 16
Anmeldedatum: 06.02.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.05.2009, 11:27     Titel:
  Antworten mit Zitat      
Hallo.

Ich habe genau die selbe frage: wollte jetzt gerade ein neues Thema oeffnen...(telepatie?)

Ich muss auch ein .txt file oeffnen (vide Anhang: 200806010600) ABER zeile nummer (1+k*15) ist 'header' und soll, deswegen, ignoriert werden.
t.
Ich habe, soweit, etwas in dieser Art implementier:

Code:


fid = fopen('200806010600t.txt', 'r');
% name of file to be opened
d = {};

while ~feof(fid)
% header row
fgetl(fid);

% Five data columns.
c = textscan(fid, '%n %n %n %n %n');
d = [d; c];
end;
fclose(fid);

% preallocate: size of preallocation matrix matches my imported file

B=NaN(720*15,5);

% data are arrayed as: 15Lines-5Columns
for col=1:5

% following code is for padding the matrix at right location (row and col)    
for lin=16:15:10800
sMan=['B(1:15,',int2str(col),')=d{1,',int2str(col),'};'];
s1 = ['B(',int2str(lin),':',int2str(lin+14),',',int2str(col),')=d{',int2str(((lin-1)/15)+1),',',int2str(col),'};'];
eval(sMan);
eval(s1);
    end
end
 

If hoffe diese code kann irgendwie hilfbar sein.

Ich haette, dazu, eine Frage:
die code hier oben benuetzte ich fuer folgendes:
1-File oeffnen
2- 'header' zu ignorieren, jede 16-te Zeile
3-speichere die restliche daten
4-schreib eine Matrix ("B") die geanu so ausseiht wie 200806010600.txt, ohne header. (also schreib nur die daten die in punkt 3 gelesen sind).

ABER

das muss ich systematish (sequentiaell) fuer eine (sehr!) lange reihe daten machen: ich hab ein 6 studen zeitschritt. Zb: (YYY_MM_DD_HH_MM_SS) 2008_06_01_06_00_00 ist der erste file.
Der zweite ist: 2008_06_01_12_00_00.
Der letzte is: 2008_06_30_18_00_00.

Ich moechte, also, eine schleife implementieren sodass MatLab es sequentiaell lesen kann.

Der namen des file(s) er esen sollte wolte ich ihn mit
Code:
erklaehren:
Code:

format bank
n1=datenum('Jun 01, 2008  0:00:00 AM');

format bank
n2=datenum('Jun 30, 2008  06:00:00 Pm');
% 0.25 ist zeit-schritt in Julianische Tage-Format
for i=n1:0.25:n2
% error!!!!!!!!
fid = fopen('datenum(n,'YYYYMMDDHHMMSS'),'.txt', 'r');
d = {};
end
 


So, Die schleife schleift nicht... Mad
Es liget an den format (klammern und so weiter).
Kann mir jemand bitte helfen????
Wie soll ich das FORMAL schreiben in matlab code?

Danke und liebe gruesse
Marco

200806010600.txt
 Beschreibung:

Download
 Dateiname:  200806010600.txt
 Dateigröße:  876.8 KB
 Heruntergeladen:  712 mal
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Lucia
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 55
Anmeldedatum: 19.03.09
Wohnort: ---
Version: R2008b
     Beitrag Verfasst am: 06.05.2009, 14:21     Titel:
  Antworten mit Zitat      
Hallo Lexis,
eigentlich sollte diese Schleife
Code:

while ~feof(fid) && ~strcmp(line, Keyword)
       line = fgetl(fid);
end
dazu führen, dass man die Zeilen vor '---' liest und überspringt. Was funktioniert da denn nicht?

Hallo Marco, das ist glaube ich ein anderes Problem. Probier mal:
Code:

fid = fopen(strcat(datestr(i,'yyyy_mm_dd_HH_MM_SS'),'.txt'), 'r');
 

(Das n in der Schleife ist wohl ein i? Ich weiß aber nicht, ob du das .txt brauchst...)

Viele Grüße! Lucia
Private Nachricht senden Benutzer-Profile anzeigen
 
marco_lissabon
Forum-Anfänger

Forum-Anfänger


Beiträge: 16
Anmeldedatum: 06.02.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.05.2009, 15:02     Titel:
  Antworten mit Zitat      
Hallo Lucia,

vielen dank fuer deine antwort.
Ich hab dein vorschlag probiert (mit und ohne .txt) aber funktioniert leider nicht.
Und ja: n ist ein i....

??? Error using ==> feof
Invalid file identifier. Use fopen to generate a valid file identifier.

Error in ==> prova at 23
while ~feof(fid)

Code:
format bank
n1=datenum('Oct 01, 2008  0:00:00 AM');

format bank
n2=datenum('Oct 31, 2008  06:00:00 Pm');


for a=n1:0.25:n2;
   
 

 fid = fopen(strcat(datestr(a,'yyyymmddHHMMSS'),'.dat'),'r'); % .dat war % vorher .txt
 d = {};


matrix= ['B',datestr(a,'yyyymmddHHMMSS'),'=NaN(720*15,5);'];
eval(matrix)
   
while ~feof(fid) % problmem liegt hier: ABER WARUM??????????????
fgetl(fid); % header row
c = textscan(fid, '%n %n %n %n %n'); % Five data columns.
d = [d; c]; % d is NOT growing inside a loop: do not worry, MatLab!
end;
fclose(fid);
for col=1:5
    for lin=16:15:10800
 sMan=['B',datestr(a,'yyyymmddHHMMSS'),'(1:15,',int2str(col),')=d{1,',int2str(col),'};']; % erster schritt fuellt di matrix manuell
s1 = ['B',datestr(a,'yyyymmddHHMMSS'),'(',int2str(lin),':',int2str(lin+14),',',int2str(col),')=d{',int2str(((lin-1)/15)+1),',',int2str(col),'};']; % restliche schritte fuellen die matrix automatisch
eval(sMan);
eval(s1);
    end
end
 clear s1 sMan fid d c % vielleicht nicht noetig??
end

 


WIE WUERDEST DU DAS LOESEN?
DANKE

Marco
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Lucia
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 55
Anmeldedatum: 19.03.09
Wohnort: ---
Version: R2008b
     Beitrag Verfasst am: 06.05.2009, 15:24     Titel:
  Antworten mit Zitat      
Hallo Marco,

das heißt, dass es das File nicht gibt. Wie sehen denn die Dateinamen genau aus? Mir ist jetzt erst aufgefallen, dass die Datei, die du angehängt hast, gar keine Sekunden im Namen hat (anders als im Programmcode). Bei mir funktioniert mit dieser Datei Folgendes (die ist noch txt, nicht dat):
Code:

a = datenum('Jun 01, 2008 06:00:00 AM');
fid = fopen(strcat(datestr(a,'yyyymmddHHMM'),'.txt'),'r');
 

Hoffe, das hilft dir weiter, sonst lass dir mal die erzeugten Strings ausgeben und vergleich sie mit den Dateinamen...

Lucia
Private Nachricht senden Benutzer-Profile anzeigen
 
marco_lissabon
Forum-Anfänger

Forum-Anfänger


Beiträge: 16
Anmeldedatum: 06.02.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.05.2009, 16:40     Titel:
  Antworten mit Zitat      
Oh...Sch*****e!

du hattest recht, Lucia!! hab gar nicht bemerkt dass der format der datei yyyymmddHHMM und nicht yyyymmddHHMMSS war..

Ich brauche urlaub.

Jetzt funktioniert es: es leuft ohne probleme.
Vielen dank

Marco
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
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.