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
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
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)) case2900
value = 2901 case200
value = 202 end
data2(p,2) = value;
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)) case2900
value = 2901 case200
value = 202 end
data2(p,2) = value;
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.
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.