Verfasst am: 24.10.2008, 13:41
Titel: Text innerhalb Datei finden
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.
Oder anders gefragt, was mach ich da falsch?->
Code:
fid = fopen('Rock_Fall_test_Sheet.fal', 'r');
while1
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);
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 clearall;
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
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.
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!
ä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
ach so... naja ich hab das ganze jetzt so verändert und nun läuft's paletti
Code:
%Code um Daten auszulesen und als csv unter gleichem Namen zu speichern.
clc clearall;
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
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
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.