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

Ein txt-File editieren mit Hilfe eines anderen txt-Files

 

denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 12.02.2014, 12:37     Titel:
  Antworten mit Zitat      
Hallo

ich vermute man soll last_line_commented aus ELSEIF entfernen:
Code:

fid = fopen('FE-Delete-S14B.dat', 'rt');
C = textscan (fid, '%s', 'delimiter', '\n');
C = C{1};
C2 ={};
for t = 1:length(C);
   tline = C{t};
   if strncmpi(tline, 'C', 1) && ~ any(strncmpi(tline, {'CORD', 'CEND'}, 4));
      C2{end+1} = regexprep(tline, ' +', ' ');
   end
end
fclose(fid);

fid2 = fopen('GNSFF.SDB.SE.b', 'rt');
D = textscan (fid2, '%s', 'delimiter', '\n');
D = D{1};
fclose(fid2);

fid_out = fopen('FE-modif-Dollar-Elemente.txt', 'wt');
last_line_commented = 0;
for i = 1:length(D);
   line = D{i};
   line_no_double_space = regexprep(line, ' +', ' ');
   
   if any(strncmpi(C2, line_no_double_space, 12));
      fprintf(fid_out, '%s\n', ['$ ' line]);
      last_line_commented = 1;
   elseif strncmpi(line_no_double_space, '+', 1)
     
      if last_line_commented == 1
         fprintf(fid_out, '%s\n', ['$ ' line]);
         %         else
         %             fprintf(fid_out, '%s\n', [line]);
         %             %last_line_commented = 0;
      end

   else
      fprintf(fid_out, '%s\n', [line]);
      last_line_commented = 0;
   end
end
fclose(fid_out);

 


PS: wenn du Beispiel Textfiles zu Verfügung stellst da kann man dir besser helfen
Private Nachricht senden Benutzer-Profile anzeigen


gubii
Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 10.02.14
Wohnort: Hamburg
Version: ab Matlab R2010b
     Beitrag Verfasst am: 12.02.2014, 13:52     Titel:
  Antworten mit Zitat      
Danke Denny, dann hat es auch geklappt Smile

Danke für den Tipp, beim nächsten Mal gebe ich Beispiel Textfiles mit an. Wink

Nochmal Danke für deine Hilfe!
Private Nachricht senden Benutzer-Profile anzeigen
 
gubii
Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 10.02.14
Wohnort: Hamburg
Version: ab Matlab R2010b
     Beitrag Verfasst am: 12.02.2014, 16:29     Titel:
  Antworten mit Zitat      
Noch eine hoffentlich letzte Frage Smile

Ich habe eine Datei1 und Datei2, die sind auch diesmal mit angehängt, aber nur Teile der Datei, um zu wissen wie die Dateien aussehen Smile

Beide Dateien sollen verglichen werden --> Die Zeilen, die übereinstimmen nach dem vergleichen, sollen in der Datei2 so verändert werden, dass dort "sozusagen" der dritte String oder die dritte Spalte (wahrscheinlich die Nummern 2900, 2801 oder 200) durch eine andere Nummer ersetzt wird. Die Nummer 2900 (als String rauslesen) soll mit 2901 ersetzt werden, die 200 mit 202....usw...

Es kommt jetzt darauf an, wie lese ich die beiden Dateien ein? Ich könnte pro Zeile als 1 String einlesen, aber dann würde es schwer werden, die Spalten auseinander zu halten. Ich hätte mir wie bei meinem vorigen Beispiel ein for Loop gedacht, aber die Schwere ist hier auch, dass nur die 3. Spalte/3. String (wie ihr wollt) geändert werden soll, denn die 7. Spalte ist oft identisch wie die 3.Spalte, aber die 7.Spalte soll NICHT geändert werden.

Was ist euer Vorschlag? Was sagst du Denny?

datei2.txt
 Beschreibung:
Datei 2: sozusagen die Output-Datei, nur dass die Zeilen mit Grid (die vergleichen mit Datei 1 und die Zeilen verändern die gleich sind), die Spalte 3 in dieser Zeile soll mit einer anderen Nummer/String ersetzt werden

Download
 Dateiname:  datei2.txt
 Dateigröße:  9.65 KB
 Heruntergeladen:  253 mal
datei1.txt
 Beschreibung:
Datei 1

Download
 Dateiname:  datei1.txt
 Dateigröße:  7.96 KB
 Heruntergeladen:  211 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 12.02.2014, 18:38     Titel:
  Antworten mit Zitat      
Hallo

ich würde nach 2 Spalte vergleichen, sieht für mich unique aus
Es gibt ein Problem in Datei1, dort sind nicht alle Spalten von einander getrennt. in so einem Zustand wird diese Datei kaum möglich zu verarbeiten.
Also die Formatierung musst du selbst anpassen.

Code:

% lese geamste datei2
fid  = fopen('datei2.txt');
txt2 = textscan(fid,'%s','delimiter','\n')
txt2 = [txt2{:}]
fclose(fid)
%
% such die Zeilen mit GRID
grid_pos = find(strncmpi(txt2, 'GRID', 4))

% lese datei1 formatiert ein also ohne GRID
fid  = fopen('datei1.txt')
data1 = textscan(fid,'GRID %n %n %f %f %f %n','delimiter','\n','CollectOutput', true)
data1 = [data1{:}]

% formatiere nur ein Teil mit dr GRID aus datei2
txt2_grid = sprintf('%s\n', txt2{grid_pos})
data2     = textscan(txt2_grid ,'GRID %n %n %f %f %f %n %n','delimiter','\n','CollectOutput', true)
data2 = [data2{:}]

% vergleiche die 2.Spalte miteinander,
% da GRID  wird nicht eingelesen, deswegen Spalte 1
match_pos = find(ismember(data2(:,1), data1(:,1)))

txt2(grid_pos(match_pos))

% jetzt kann man mit dem SPRINTF manipulierte data2, die Zeilen ersetzen in txt2
% dann kann man txt2 in Text-Datei wieder schreiben
for p = match_pos'
 value = 0
 switch(data2(p, 2))
 case 2900
    value = 2901
 case  200
    value = 202
 end
 data2(p,2) = value;

 txt2{grid_pos(p)} = sprintf('GRID \t %d \t %d \t %f \t %f \t %f \t %d \t %d', data2(p,:))
end


fid = fopen('datei3.txt', 'wt+');
fprintf(fid, '%s\n', txt2{:});
fclose(fid);
 
Private Nachricht senden Benutzer-Profile anzeigen
 
gubii
Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 10.02.14
Wohnort: Hamburg
Version: ab Matlab R2010b
     Beitrag Verfasst am: 13.02.2014, 11:01     Titel:
  Antworten mit Zitat      
denny hat Folgendes geschrieben:
Hallo

ich würde nach 2 Spalte vergleichen, sieht für mich unique aus
Es gibt ein Problem in Datei1, dort sind nicht alle Spalten von einander getrennt. in so einem Zustand wird diese Datei kaum möglich zu verarbeiten.
Also die Formatierung musst du selbst anpassen.

Code:

% lese geamste datei2
fid  = fopen('datei2.txt');
txt2 = textscan(fid,'%s','delimiter','\n')
txt2 = [txt2{:}]
fclose(fid)
%
% such die Zeilen mit GRID
grid_pos = find(strncmpi(txt2, 'GRID', 4))

% lese datei1 formatiert ein also ohne GRID
fid  = fopen('datei1.txt')
data1 = textscan(fid,'GRID %n %n %f %f %f %n','delimiter','\n','CollectOutput', true)
data1 = [data1{:}]

% formatiere nur ein Teil mit dr GRID aus datei2
txt2_grid = sprintf('%s\n', txt2{grid_pos})
data2     = textscan(txt2_grid ,'GRID %n %n %f %f %f %n %n','delimiter','\n','CollectOutput', true)
data2 = [data2{:}]

% vergleiche die 2.Spalte miteinander,
% da GRID  wird nicht eingelesen, deswegen Spalte 1
match_pos = find(ismember(data2(:,1), data1(:,1)))

txt2(grid_pos(match_pos))

% jetzt kann man mit dem SPRINTF manipulierte data2, die Zeilen ersetzen in txt2
% dann kann man txt2 in Text-Datei wieder schreiben
for p = match_pos'
 value = 0
 switch(data2(p, 2))
 case 2900
    value = 2901
 case  200
    value = 202
 end
 data2(p,2) = value;

 txt2{grid_pos(p)} = sprintf('GRID \t %d \t %d \t %f \t %f \t %f \t %d \t %d', data2(p,:))
end


fid = fopen('datei3.txt', 'wt+');
fprintf(fid, '%s\n', txt2{:});
fclose(fid);
 


es ist so, dass jede Spalte 8 Strings/Zeichen hat, die 'blanks' zählen auch als Zeichen....daher kann es manchmal sein, dass es so aussieht, dass die Spalten nicht voneinander getrennt sind und die Strings/Zeichen/Zahlen zusammen bleiben. Aber jede Spalte besitzt 8 Zeichen.
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite Zurück  1, 2

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.