% nur die erstn 2 Chars von jedem Keyword extrahieren
test_comm1 = [];
for i=test_comm'
test_comm1 = [test_comm1 i{1}(1:2)];
end% for
%
% filenamen bilden
fname = sprintf('%s_%s_%s_%s.m', ...
test_type,trial_num,cond_num,test_comm1)
%
%file anlegen
fid1 = fopen(fname,'wt');
%
% startet bei Zeile: Test Comment
%
%überspringt die nächsten 2 Zeilen (" " und "Units...") for i=1:3 fgetl(fid);
end
%
%speichert Zeile DP LF .... bis Zeile 20 -> (Units)
%
for i=1:20
%
fprintf(fid1,'%s\n',fgetl(fid));
%
end
%
%
%
% angelegten File schliessen fclose(fid1);
%
% Zeilen überspringen bis nächster Header -> Test Type for i=1:5 fgetl(fid) end
%
end% while end% try
%
fclose(fid)
da wir ja wirkliche anfänger in sachen matlab sind stoßen wir leider bei jeder minimalen änderung die wir durchführen wollen auf eine fehlermeldung.
unser neuestes problem dürfte wieder nur eine kleinigkeit sein:
und zwar haben wir mitlerweile (dank outsider) im file 20 zeilen und 10 spalten.
über die schleife:
werden ja 20 zeilen nacheinander ausgelesen und im neuen file gespeichert. im zuge dieser schleife sollte es ja auch möglich sein, zb nur die 1,3 und 7 spalte auszulesen?
wir haben es irgendwie probiert mit:
filename=filename(1:end, [1 3 7]);
wie könnte man das am besten lösen, dass für alle files nur diese bestimmten spalten ausgelesen werden.
Das bewirkt, dass bei jedem i eine Zeile ausgelesen wird, aber nur bei den Zeilen 1, 3 und 7 auch ein Wert in die neue Datei geschrieben wird.
n00b
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 24.01.2008, 08:55
Titel:
danke erstmal, aber wir bräuchten die 1, 3, 7 Spalte und nicht Zeile..
dadurch, dass wir durchgehend den Zeilenbefehl nutzen ist es für uns irgendwie schwierig in Spaltenform umzudenken...
vielleicht kann man ja sagen "nimm das 1, 3, 7 wort in jeder Zeile" oder so...
vielleicht kann man ja sagen "nimm das 1, 3, 7 wort in jeder Zeile" oder so...
Ja, das kann man
Ich würde es folgendermaßen lösen:
Code:
for i = 1 : 20
zeile = strread(fgetl(fid),'%s','delimiter','\t' % wenn ihr die Spalten durch Tabs getrennt habt, ansonsten ' ' für Leerzeichen % zeile ist nun ein Cell-Array (mit in eurem Fall 10 Einträgen)
zeile = [zeile{1} ' ' zeile{3} ' ' zeile{7}]; % hier wird nun ein String definiert, der nur die Werte der 1., 3. und 7. Spalte enthält fprintf(fid1, '%s ', zeile);
end end
da funktioniert leider gar nichts, wir haben aber auch leider keine ahnung warum nicht. entweder es liegt daran dass die trennung der einzelnen spalten nicht gleich große abstände haben zb: 15 leerzeichen, oder hat es vielleicht mit dem delimiter zu tun.
ich schreib dir nochmals den code mit dem testfile, vielleicht kannst uns du sagen woran es diesmal liegt
% nur die erstn 2 Chars von jedem Keyword extrahieren
test_comm1 = [];
for i=test_comm'
test_comm1 = [test_comm1 i{1}(1:2)];
end % for % % filenamen bilden
fname = sprintf('%s_%s_%s_%s.m', ...
test_type,trial_num,cond_num,test_comm1) %
%file anlegen
fid1 = fopen(fname,'wt');
% % startet bei Zeile: Test Comment %
%überspringt die nächsten 2 Zeilen (" " und "Units...") for i=1:3 fgetl(fid);
end %
%speichert Zeile DP LF .... bis Zeile 20 -> (Units) % for i = 1 : 20
zeile = strread(fgetl(fid),'%s','delimiter','\t'); % wenn ihr die Spalten durch Tabs getrennt habt, ansonsten ' ' für Leerzeichen % zeile ist nun ein Cell-Array (mit in eurem Fall 10 Einträgen)
zeile = [zeile{1} ' ' zeile{6} ' ' zeile{8}]; % hier wird nun ein String definiert, der nur die Werte der 1., 3. und 7. Spalte enthält fprintf(fid1, '%s ', zeile);
end end
%
% % angelegten File schliessen fclose(fid1);
% % Zeilen überspringen bis nächster Header -> Test Type for i=1:5 fgetl(fid) end % end% while end% try % fclose(fid)
Die Fehler liegen u.a. in der Code-Umgebung fürs Forum zusammen ;)
In Zeile 56 muss das "end" gelöscht werden. Vermutlich kam es durch einen Fehler beim Kopieren rein (dass z.B. das alte noch da stand oder sowas).
In Zeile 54 muss ein \n hinter das %s, damit die Zeilen auch wirklich als verschiedene Zeilen ausgegeben werden. Leider wird das hier im Forum in der Code-Umgebung gefiltert.
In Zeile 49 muss als Delimiterangabe kein '\t' stehen, sondern ein ' ', wie auch im Kommentar vermerkt ist: Euer Delimiter ist kein Tabulator, sondern ein Leerzeichen. Dabei spielt es dann keine Rolle mehr, wie viele Leerzeichen es sind.
Edit: Ich finde es immer sehr hilfreich, für while, if oder try (als Beispiele) den Code jeweils um einen Tabulator einzurücken, die Einrückung verringere ich entsprechend bei jedem "end". Meiner Meinung nach wird es dadurch übersichtlicher, und es lassen sich leichter Fehler wie der mit dem zusätzlichen "end" beheben.
Im neuesten Matlab-Editor (der von Version R2007b) wird zusätzlich rechts am Rand angegeben, wenn ich irgendwelchen Zeilen Fehler auftreten, das ist auch ungemein hilfreich.
Zuletzt bearbeitet von keloid am 24.01.2008, 10:26, insgesamt einmal bearbeitet
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.