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 innerhalb Datei finden

 

japixly
Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 20.10.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.10.2008, 14:41     Titel: Text innerhalb Datei finden
  Antworten mit Zitat      
Hallo,
Ich bin immer noch an einem alten Problem und zwar will ich aus der angehängten Datei die Daten auslesen, welche nach der Zeile * Number of Barrier Hits folgen. Die Zeile nach *Number of.... gibt mir an wie viele Zeilen danach es noch auslesen soll. Von den ausgelesenen Daten soll es nun die dritte Spalte nehmen und unter demselben Namen, also Rock_Fall_test_Sheet abspeichern. Alllerdings nun als .csv.

Ist mir noch zu helfen? Ich scheine einfach zu dumm zu sein. Sad

Oder anders gefragt, was mach ich da falsch?->
Code:

    fid = fopen('Rock_Fall_test_Sheet.fal', 'r');
    while 1
        tline = fgetl(fid);
        if ~ischar(tline), break, end
        disp(tline);
    end
    Keyword = ('* Number of Barrier Hits');
    strcmp(Keyword, fid);
        Headline=fgetl(fid);
    Daten = fscanf(fid, '%*f %*f %f %*f %*f %*f %*f %*f %*f');
    csvwrite('Rock_Fall_test_Sheet', Daten)
    fclose(fid);


Rock_Fall_test_Sheet.zip
 Beschreibung:

Download
 Dateiname:  Rock_Fall_test_Sheet.zip
 Dateigröße:  53.45 KB
 Heruntergeladen:  494 mal
Private Nachricht senden Benutzer-Profile anzeigen


Schrank
Forum-Century

Forum-Century


Beiträge: 203
Anmeldedatum: 10.07.08
Wohnort: Berlin
Version: ---
     Beitrag Verfasst am: 25.10.2008, 12:37     Titel:
  Antworten mit Zitat      
Hallo japixly,
ich finde es ja löblich das du deinen Code selbst schreibst, aber warum benutzt du nicht einfach den ich dir letzt geschrieben habe? Da musst du nur *.txt durch *.fal ersetzen.
In deinem aktuellen Code kommt mein Matlab mit ~ischar nicht zu recht. Ansonsten suchst du ja in der Schleife nur nach Text, und nicht nach dem Keyword. Da kannst du nicht an der richtigen Stelle landen.


Code:
clc
clear all;
Path = 'C:\Dokumente und Einstellungen\Matthias\Desktop\'; % legt den % Pfad fest
files = dir(strcat(Path, '*.fal')); % sucht in dem Pfad alle Dateien mit .fal
FileName = {files.name}; % speichert alle FileNamen in FileName

for iFileAnzahl=1:length(FileName) % für alle Dateien
    fid = fopen(fullfile(Path, FileName{iFileAnzahl})); % öffnen
    Keyword = '* Number of Barrier Hits'; % Keyword festlegen
    Headline = ''; % variable vorbereiten damit sie in der Schleife existiert
    while (strncmp(Headline, Keyword, 16) ~=1 &&  feof(fid) == 0) % ließt % solange Zeilenweise ein, bis Headline Keyword enthällt oder die Datei % zuende ist
        Headline=fgetl(fid);
    end
    NumberOfBarrierHits = fgetl(fid); % speichert die NumberOfBarriereHits
    Daten = fscanf(fid, '%*f %*f %f %*f %*f %*f %*f %*f %*f'); % ließt % alle Datein ein un ignoriert alle bis auf die 3 Spalte
    [pathstr, Name] = fileparts(FileName{iFileAnzahl}); %s etzt den zu % schreibenden Namen zusammen
    Name = strcat(Name,'.csv');
    csvwrite(fullfile(Path, Name), Daten) % speichert
    fclose(fid); % Schließt die Datei
end


Nochmal der funktionierende Code mit Kommentaren.
Gruß Schrank
Private Nachricht senden Benutzer-Profile anzeigen
 
japixly
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 20.10.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.10.2008, 19:32     Titel:
  Antworten mit Zitat      
Wollt's halt einfach mal selbst probieren. Aber dein Code ist super. Danke vielmals. Very Happy

Bei mir funktionierts momentan noch nicht. Aber das wird schon.

Aber darf ich folgendes noch fragen: Warum kommst du beim Befehl strncmp auf 16 als N?

Und

Bei Headline = '', heisst das einfach, dass es Leerschläge ignorieren soll?

Wenn dir die Fragen zu blöd sind, dann einfach nicht antworten. Ich weiss ich bin ein Spätzünder Rolling Eyes
Private Nachricht senden Benutzer-Profile anzeigen
 
Schrank
Forum-Century

Forum-Century


Beiträge: 203
Anmeldedatum: 10.07.08
Wohnort: Berlin
Version: ---
     Beitrag Verfasst am: 28.10.2008, 06:51     Titel:
  Antworten mit Zitat      
Hallo japixly,
das finde ich alles sehr lobenswert. Nur so kommt man selbst weiter! Also weiter so!
Das N = 16 ist eigentlich völlig willkürlich. Bedeutet ja nur. das die ersten 16 Zeichen verglichen werden. Wenn ich mich recht an deine Beispieldatei erinnere, müssen wenigstens die ersten 13 verglichen werden, um die richtige Zeile zu finden.
Headline = '' schreibe ich nur, damit Headline in der while Abfrage schon existiert. Sonst würde ich ohne Fehler nicht in die Schleife reinkommen.

Frage deine Fragen! Und du weißt ja, doofe Fragen gibts es nicht und man/ich merke ja das du motiviert bist etwas dazu zu lernen. Tut mir leid, wenn ich deinen Tatendrang durch etwas funktionierendes gebremst habe. Smile

Gruß Schrank
Private Nachricht senden Benutzer-Profile anzeigen
 
japixly
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 20.10.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.10.2008, 14:10     Titel:
  Antworten mit Zitat      
Ahaaa! Ja das war nur ein Ausschnitt aus der ganzen Datei. *Numer of Barrier Hits befindet sich etwa in der 680ten Zeile. Cool dann kann ich ja für n einfach 700 einsetzen und das sollte trotzdem klappen!

Danke! Smile
Private Nachricht senden Benutzer-Profile anzeigen
 
Schrank
Forum-Century

Forum-Century


Beiträge: 203
Anmeldedatum: 10.07.08
Wohnort: Berlin
Version: ---
     Beitrag Verfasst am: 28.10.2008, 18:13     Titel:
  Antworten mit Zitat      
ähh, nein.
es werden die ersten 16 Zeichen jeder Zeile verglichen. Es wird mit fgetl immer eine Zeile eingelesen und diese wird dann mit * Number of Barrier Hits verglichen.
Gruß Schrank
Private Nachricht senden Benutzer-Profile anzeigen
 
japixly
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 20.10.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.10.2008, 10:02     Titel:
  Antworten mit Zitat      
ach so... naja ich hab das ganze jetzt so verändert und nun läuft's paletti Cool

Code:
%Code um Daten auszulesen und als csv unter gleichem Namen zu speichern.

clc
clear all;
Path = 'D:\Temp\matlab\'; % legt den Pfad fest
files = dir(fullfile(Path, '*.fal')); % sucht in dem Pfad alle Dateien mit .fal

counter = 1;
for iFileAnzahl=1:length(files) % für alle Dateien
    tmpName = files(counter).name;
    fid = fopen(fullfile(Path, tmpName)); % öffnen
    Keyword = '* Number of Barrier Hits'; % Keyword festlegen
    Headline = ''; % variable vorbereiten damit sie in der Schleife existiert
    while (strcmp(Headline, Keyword) ~=1 &&  feof(fid) == 0) % ließt solange Zeilenweise ein, bis Headline Keyword enthällt oder die Datei zuende ist
        Headline=fgetl(fid);
    end
    NumberOfBarrierHits = fgetl(fid); % speichert die NumberOfBarriereHits
    Daten = fscanf(fid, '%*f %*f %f %*f %*f %*f %*f %*f %*f'); % ließt alle Daten ein un ignoriert alle bis auf die 3 Spalte
    %[pathstr, Name] = fileparts(FileName{iFileAnzahl}); %setzt den zu schreibenden Namen zusammen
    Name = strcat(tmpName,'.csv');
    csvwrite(fullfile(Path, Name), Daten); % speichert
    fclose(fid); % Schließt die Datei
    counter = counter + 1;
end
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.