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

Datei nach Stichwörtern filtern und diese speichern.

 

manphiz
Forum-Anfänger

Forum-Anfänger


Beiträge: 33
Anmeldedatum: 24.03.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.03.2017, 09:19     Titel: Datei nach Stichwörtern filtern und diese speichern.
  Antworten mit Zitat      
Hallo zusammen,

habe bereits im Forum gesucht, leider nur ähnliche Themen gefunden, die mir nicht genau weitergeholfen haben. Daher nun das Thema.
Gegeben ist eine (text)datei die eingelesen und nach bestimmten Stichwörtern durchsucht werden soll. Anschließend sollen die X nachfolgenden Zeichen (als Vektor) gespeichert werden.

Hier ein Auszug der Datei:
: 35 ; 350
: 30 ; 300
Demo_xyz [9].Duasip [IDOW(76)] 3 ; 3
[Stichwort] 2650 ;
: 2650 ;
: 2850 ;
: 3250 ;
: 3375 ;
: 3375 ;
: 3375 ;
kdsafsdfg [87].fjsadf
usw

Gesucht sind die 7 Zahlen nach [Stichwort], als Vektor gespeichert.
Vielen Dank für eure Vorschläge.
Private Nachricht senden Benutzer-Profile anzeigen


manphiz
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 33
Anmeldedatum: 24.03.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.03.2017, 08:51     Titel:
  Antworten mit Zitat      
Hallo nochmal,

bisher klappt das Einlesen und das Suchen nach dem Stichwort, allerdings spuckt er mir nur aus, wo sich "Stichwort" befindet. Leider komme ich nicht weiter.
Hoff es kann jemand helfen.
Code:
filename = 'Dateicode.txt';
fid = fopen (filename, 'r');                %Datei wird gelesen
if (fid<0)                                  %?berpr?fen ob fid g?ltig ist
    fprintf ('Datei %s kann nicht geoeffnet werden \n', filename);
    return;                         %im Fehlerfall Funktion beenden
end
inputtext=textscan(fid,'%s','delimiter','\n','whitespace',' ');
Datei=inputtext{1};
 
 stichwort=strfind(Datei,'[Stichwort]')
 
Private Nachricht senden Benutzer-Profile anzeigen
 
manphiz
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 33
Anmeldedatum: 24.03.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.03.2017, 12:47     Titel:
  Antworten mit Zitat      
Habe einen Alternativvorschlag:
Code:
FID=fopen('Datenblatt.txt');
Search='Stichwort';
Line='leer';
found=false;
nSearch=length(Search);
while ischar(Line);
Line=fgetl(FID);
if strncmp(Line, Search, nSearch)
    found=true;
    break;
end
end
if found
    b=zeros(1,6);  
   for iLine = 1:6
      Line = fgetl(FID);
      [a,b(iLine)] = strread(Line, '%s%f%*[^\n]', 'delimiter', ' ');
         end
end

fclose(FID);
return;


Problem hier ist: Das Stichwort muss am Dateianfang stehen, dies trifft aber nicht zu und der erste Wert direkt neben Stichwort wird unterschlagen.

Über Hilfe wäre ich sehr dankbar.
Grüße
Private Nachricht senden Benutzer-Profile anzeigen
 
manphiz
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 33
Anmeldedatum: 24.03.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.03.2017, 10:14     Titel:
  Antworten mit Zitat      
Sorry für Tripleposting, aber die Editierfunktion geht nur einmal.

Habe nun eine Lösung gefunden, falls jemand ein gleiches Problem hat.

Code:
if found
    b=zeros(1,7);          %Erstellen leerer Vektor
      for iLine = 1:1
      [a,b(iLine)] = strread(Line, '%s %f%*[^\n]', 'delimiter', ' ');     %leerer Vekotor mit Daten aus Stand füllen
      end
   for iLine = 2:7
      Line = fgetl(FID);        
      [a,b(iLine)] = strread(Line, '%s%f%*[^\n]', 'delimiter', ' ');    %leerer Vekotor mit Daten aus Stand füllen
   end
     end
 


Leider etwas unelegant, bin weiterhin für bessere Vorschläge offen.
Private Nachricht senden Benutzer-Profile anzeigen
 
manphiz
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 33
Anmeldedatum: 24.03.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.04.2017, 08:37     Titel:
  Antworten mit Zitat      
Hallo Leute,

habe es nun geschafft (siehe oben) die Zahlen als Vektor zu speichern.
Im weiteren Programmverlauf werden die Werte im Vektor verändert.
Ziel ist jetzt den neuen Vektor, bzw. die Werte, in der ursprünglichen Textdatei einzuschreiben und als .txt unter neuen Namen abzuspeichern.

Falls jemand eine gute Idee hat, bin ich sehr dankbar.
Natürlich werde ich weiterhin selbst suchen.

Viele Grüße
Private Nachricht senden Benutzer-Profile anzeigen
 
manphiz
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 33
Anmeldedatum: 24.03.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.04.2017, 09:46     Titel:
  Antworten mit Zitat      
kleiner Ansatz meinerseits:

Code:

fid  = fopen('Eingabedatei.txt','r');
f=fread(fid,'*char')';
fclose(fid);
f = strrep(f,'Stichwort','neues Wort');
fid  = fopen('Ausgabedatei.txt','w');
fprintf(fid,'%s',f);
fclose(fid);


allerdings wird nur 'Stichwort' ersetzt und die restlichen Werte nicht.
Speziell nach den Werten suchen kann ich nicht, da man diese Werte nicht kennt.
Lediglich das 'Stichwort' ist ein Indikator.

Hoffe jemand kann helfen Smile
Private Nachricht senden Benutzer-Profile anzeigen
 
manphiz
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 33
Anmeldedatum: 24.03.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.05.2017, 15:55     Titel:
  Antworten mit Zitat      
Guten Tag zusammen,

habe das zweite Problem nun gelöst. Hier der Code dazu:

Code:


filename= 'Dateicode.txt';
fidInFile = fopen(filename,'r');            % Öffne Eingabedatei zum Lesen
fidOutFile = fopen(['neu_' filename],'wt');  % Öffne Ausgabedatei zum Schreiben
nextLine = fgetl(fidInFile);                % Erste Zeile der Eingabedatei

while nextLine >= 0    % Schleife bis -1 (end of file)
fprintf(fidOutFile,'%s\n', nextLine) ;
nextLine = strrep(nextLine, '[Stichwort] 2650' , '[Stichwort neu] 4444' ); % ersetzt Teil 1 mit Teil 2
 fprintf(fidOutFile,'%s\n', nextLine)     ;             % Zeile in Ausgabedatei schreiben
  nextLine=fgetl(fidInFile);  
  nextLine = strrep(nextLine, '2650', '5555');
  fprintf(fidOutFile,'%s\n' ,nextLine);  
  nextLine=fgetl(fidInFile);
  nextLine = strrep(nextLine, '2850', '5555');
  fprintf(fidOutFile,'%s\n',nextLine);
  nextLine=fgetl(fidInFile);
  nextLine = strrep(nextLine, '3250', '5555');  
  fprintf(fidOutFile,'%s\n',nextLine);  
% usw
  end
 



Leider Leider ist das ein sehr langsamer Prozess, und in großen Datenmengen echt eine Zumutung.
Ich wäre daher sehr dankbar, wenn jemand dazu eine andere Lösung hat!
Ebenso bei dem ersten Problem dauert es einfach zu lange Sad

Hoffe es kann jemand helfen.

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