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

Zusammenführen 2er Textdateien und löschen von Zeilen

 

Gast

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.08.2010, 10:14     Titel: Zusammenführen 2er Textdateien und löschen von Zeilen
  Antworten mit Zitat      
Hallo liebe Matlab Freunde,

ich komme bei einem Problem nicht weiter, vielleicht kann mir einer von euch weiterhelfen.

Ich habe zwei Textdateien die ich zuerst zu einer umwandeln möchte. Also die erste Datei (Header) kopiere ich in ein leeres Textfile und anschließend mache ich des gleiche mit der zweiten Datei. Dafür lese ich Zeile für Zeile aus und schreibe sie in des neue File. Dieses klappt auch soweit.

Header Datei schaut folgendermaßen aus:

$ FMS Section
$------1-------2-------3-------4-------5-------6-------7-------8-------9------10
NASTRAN SYSTEM(151)=1
NASTRAN SYSTEM(229)=1
$
SOL 124
TIME 6564
CEND
$
$
TITLE = BLA
SUBTITLE = BLA2
$
$ECHO = NONE
$
MAXLINES = 999999999
$
$ Material :
$------1-------2-------3-------4-------5-------6-------7-------8-------9------10
MAT1 1 1.0E10 .3 7800. 0.63E-6 100.
MAT1 2 1.0E10 .3 7800. -0.63E-6 100.
MAT1 3 1.0E11 .3 2700. 0.00E+0 100.
MAT1 4 1.0E11 .3 2700. 0.00E+0 100.
MAT1 5 1.0E10 .3 2700. 0.00E+0 100.
MAT1 6 1.0E10 .3 2700. 0.00E+0 100.
MAT1 7 1.0E10 .3 2700. 0.00E+0 100.
MAT1 8 1.0E10 .3 1000. 0.00E+0 100.


zweite Datei so (Datei ist groß):

$$------------------------------------------------------------------------------$
$$ $
$$ NASTRAN Input Deck Generated $
$$ Generated using Template Version :
$$ $
$$ Template: general $
$$ $
$$------------------------------------------------------------------------------$
$$------------------------------------------------------------------------------$
$$ Executive Control Cards $
$$------------------------------------------------------------------------------$
CEND
$$------------------------------------------------------------------------------$
$$ Case Control Cards $
$$------------------------------------------------------------------------------$
$$------------------------------------------------------------------------------$
$$ Bulk Data Cards $
$$------------------------------------------------------------------------------$
BEGIN BULK
$$
$$ GRID Data
$$
GRID 1 0.0 0.0 0.0
GRID 2 0.04 0.0 0.0
GRID 3 0.0399889.56E-040.0
GRID 4 0.0399540.00192 0.0
GRID 5 0.0398950.0028930.0
GRID 6 0.0398120.0038720.0
GRID 7 0.0397040.0048580.0
GRID 8 0.03957 0.00585 0.0

usw....


Nun zu meinem Problem:

Ich möchte dass er alle Zeilen der 2ten Datei die ein $-Zeichen (auch $$) enthalten nicht kopiert, also ignoriert.

Das meine Datei am Ende also den Header enthält und von der zweiten Datei alles außer die $-Zeichen Zeilen.

Ich schaffe es auch dass er erkennt welche Zeile gemeint ist und zum versuchen ein Enter macht, aber dass er die Zeile löscht/ignoriert bekomme ich nicht hin.

Mein Matlab Code schaut so aus:
Code:

clc
clear all
close all

% Directory
dir ='N:\NeuerOrdner\Nastran_Input\';

% Daten lesen aus .txt
fid = fopen(strcat(dir,'Header.txt'),'rt');
fid2=fopen(strcat(dir,'test2.dat'),'rt');

% Neue Datei öffnen wo kopiert werden soll
newfid = fopen(strcat(dir,'New.txt'),'wt+'); % file das neu geschrieben wird

% Zeile für Zeile auslesen und in neue Datei schreiben

while 1
  tline = fgetl(fid);
  if ~ischar(tline), break, end
  fprintf(newfid, tline);
  fprintf(newfid, '\n');
end

while 1
  tline = fgetl(fid2);
  if ~ischar(tline), break, end
  fprintf(newfid, tline);
  fprintf(newfid, '\n');
  linesp = findstr ('GRID  ',tline);       % $$ Schlüsselwort nach dem gesucht wird
  if isscalar (linesp);
    fprintf(newfid,'\n');
  end
end  
 


Eine andere Idee wäre es nach dem Schlüsselwort GRID zu suchen und erst dann die Zeilen kopieren, wobei ich gerne die drei zeilen

$$
$$ GRID Data
$$

noch mitnehemen würde.


Des ganze wiederhollt sich am Ende der Datei mit einem anderen Schlüsselwort.

Vielen Dank für eure Hilfe schon im Voraus.

Gruss

Edit by denny: Bitte die Code-Formatierung verwenden. Danke!


laurina

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.08.2010, 09:04     Titel:
  Antworten mit Zitat      
Hat keiner eine Idee? Ihr würdet mir immens weiterhelfen. Bin über jeden Ratschlag froh.

Ich möchte einfach automatisieren, dass er die Zeilen die ein $ Zeichen am Anfang haben, löscht oder nicht mitkopiert.

Danke euch,

Laura
 
aj.geissler
Forum-Guru

Forum-Guru



Beiträge: 251
Anmeldedatum: 26.11.07
Wohnort: Seeheim-Jugenheim
Version: ---
     Beitrag Verfasst am: 27.08.2010, 09:12     Titel:
  Antworten mit Zitat      
Hallo Laura,

eine Möglichkeit :

Code:

...
if ~isempty(tline),
     if abs(tline(1))~=abs('$'),   % abs('$') müsste 36 sein...
              % schreiben der Zeile
     end
end
...
 


Vielleicht hilft Dir das ?

Grüße
Andreas
_________________

Andreas Geißler
Private Nachricht senden Benutzer-Profile anzeigen
 
Fourier
Forum-Guru

Forum-Guru


Beiträge: 329
Anmeldedatum: 05.04.10
Wohnort: Karlsruhe
Version: 2009b
     Beitrag Verfasst am: 27.08.2010, 09:25     Titel:
  Antworten mit Zitat      
Hallo,

ich hab noch einen Vorschlag, ich hab die 2.Whileschleife bisschen geändert:
Code:

while 1
  tline = fgetl(fid2);
  if ~ischar(tline), break, end
  if (findstr(tline,'$')>=0),continue,end
  fprintf(newfid, tline);
  fprintf(newfid, '\n');
end  
 


gruss
_________________

Ein schlechter General ist besser als zwei gute.
Private Nachricht senden Benutzer-Profile anzeigen
 
laurina

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.08.2010, 09:58     Titel:
  Antworten mit Zitat      
wow Jungs,

ihr habt mir grad echt weitergeholfen, hab eure beiden Lösungen zum laufen gebracht. Vielen, vielen, lieben Dank für eure schnelle Hilfe.


Programmier gerade fleißig an dem m-file weiter Smile

Wisst ihr vielleicht wie ich Matlab sagen kann dass er die Datei wo er die Sachen neu reinschreibt, also die New.txt automatisch anlegen kann, also dass ich sie nicht zuerst per Hand erstellen muss?

Bis jetzt öffne ich nur die Datei, die ich manuell erstellt habe in:

wird
Code:
newfid = fopen(strcat(dir,'New.txt'),'wt+'); %file das neu geschrieben
 


Liebe Grüße
 
Fourier
Forum-Guru

Forum-Guru


Beiträge: 329
Anmeldedatum: 05.04.10
Wohnort: Karlsruhe
Version: 2009b
     Beitrag Verfasst am: 27.08.2010, 10:08     Titel:
  Antworten mit Zitat      
Hi,

bist du dir sicher dass die datei nicht automatisch angelegt wird?
ich musste sie nicht manuell anlegen als ich dein code getestet habe .

gruss
_________________

Ein schlechter General ist besser als zwei gute.
Private Nachricht senden Benutzer-Profile anzeigen
 
laurina

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.08.2010, 10:16     Titel:
  Antworten mit Zitat      
Oops,
ja, du hast recht. Danke!! Ein Problem weniger Smile
Super Forum hier!!!
 
laurina

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.08.2010, 10:39     Titel:
  Antworten mit Zitat      
Letzte Frage:

Kann ich irgendwie realisieren, dass er wenn er des erste mal GRID findet davor was schreiben soll, z.b:

**
**Grid Daten
**

Leider kann ich nicht nach der letzten Zeile suchen, weil die immer unterschiedlich ist.

Mein Versuch:

Code:
if ~ischar(tline), break, end
% fprintf(newfid, tline);
% fprintf(newfid, '\n');
linesp = findstr ('BEGIN BULK',tline);       %$$ Schlüsselwort nach dem gesucht wird
if isscalar (linesp);
fprintf(newfid,'$$\n$$GRID Data\n$$\n');


Aber so sucht er nach Begin Bulk was immer dann ja anders ist.
 
Fourier
Forum-Guru

Forum-Guru


Beiträge: 329
Anmeldedatum: 05.04.10
Wohnort: Karlsruhe
Version: 2009b
     Beitrag Verfasst am: 27.08.2010, 11:16     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:

Kann ich irgendwie realisieren, dass er wenn er des erste mal GRID findet davor was schreiben soll


man kann auch nach GRID Data suchen.
vlt hilft dir das:
Code:

while 1
 
    tline = fgetl(fid2);
    if ~ischar(tline), break, end
    if (findstr(tline,'GRID Data')>=0)
        fprintf(newfid,'$$\n$$GRID Data\n$$\n');
    elseif (findstr(tline,'$')>=0),continue
    else
        fprintf(newfid, tline);
        fprintf(newfid, '\n');
    end

end
 


gruss
_________________

Ein schlechter General ist besser als zwei gute.
Private Nachricht senden Benutzer-Profile anzeigen
 
laurina

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.08.2010, 11:34     Titel:
  Antworten mit Zitat      
Das geht leider nicht, weil ich das ja bei dem Durchlaufen, ja gelöscht habe.

Der Ausschnitt der Datei ist dann so:

...
MAT1 7 35.0E10 .3 2700. 0.00E+0 100.
MAT1 8 10.0E10 .3 1000. 0.00E+0 100.
GRID 1 0.0 0.0 0.0
GRID 2 0.04 0.0 0.0
...

und des wäre der Wunschzustand:

...
MAT1 7 35.0E10 .3 2700. 0.00E+0 100.
MAT1 8 10.0E10 .3 1000. 0.00E+0 100.
$$
$$GRID Data
$$
GRID 1 0.0 0.0 0.0
GRID 2 0.04 0.0 0.0

Also müsst ich irgendwie das Suchwort GRID (aber nur das erste, sonst schreibt er es ja nach jedem GRID) finden und dann davorschreiben oder die letzte MAT1 Zeile finden und danach erst schreiben.

lg
 
Fourier
Forum-Guru

Forum-Guru


Beiträge: 329
Anmeldedatum: 05.04.10
Wohnort: Karlsruhe
Version: 2009b
     Beitrag Verfasst am: 27.08.2010, 11:54     Titel:
  Antworten mit Zitat      
wenn es diesmal nicht klappt
Evil or Very Mad

Code:

zahl=false;
while 1
   
    tline = fgetl(fid2);
    if ~ischar(tline), break, end
    if (findstr(tline,'GRID')>=0)
        if(~zahl)
            fprintf(newfid,'$$\n$$GRID Data\n$$\n');
            zahl=true;
        end
    elseif (findstr(tline,'$')>=0)
        continue;
    end
   
    fprintf(newfid, tline);
    fprintf(newfid, '\n');
   
end
 


gruss
_________________

Ein schlechter General ist besser als zwei gute.
Private Nachricht senden Benutzer-Profile anzeigen
 
laurina

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.08.2010, 12:52     Titel:
  Antworten mit Zitat      
Danke Fourier!!!
Super Lösung!!!
Jetzt klappt alles wunderbar!!!
Jetzt hast du erstmal Ruhe vor mir Wink

Vielen Dank und liebe Grüße
 
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.