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

Daten aus editorfile ohne header auslesen

 

keloid
Forum-Century

Forum-Century


Beiträge: 216
Anmeldedatum: 04.10.07
Wohnort: ---
Version: 7.5.0.342 (R2007b)
     Beitrag Verfasst am: 21.01.2008, 16:53     Titel:
  Antworten mit Zitat      
Da kann ich Dir leider nicht helfen, da es für mich mit weniger Aufwand verbunden war, eine Lizenz für die neuere Version zu ergattern.
Private Nachricht senden Benutzer-Profile anzeigen


outsider
Forum-Meister

Forum-Meister


Beiträge: 806
Anmeldedatum: 03.09.07
Wohnort: München
Version: R2012b
     Beitrag Verfasst am: 21.01.2008, 16:59     Titel:
  Antworten mit Zitat      
Zitat:
ps: ne kiste österreichisches bier steht noch immer in wien zum abholen bereit!!!

wenn das so ist, dann gibt es heute Abend einen Patch! Very Happy


MfG
Private Nachricht senden Benutzer-Profile anzeigen
 
noob
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 70
Anmeldedatum: 15.01.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.01.2008, 10:02     Titel:
  Antworten mit Zitat      
gestern ist sichs wohl nicht mehr ausgegangen Very Happy

naja wir haben ja zeit.... noch bis heute abend

lg die ratlosen
Private Nachricht senden Benutzer-Profile anzeigen
 
outsider
Forum-Meister

Forum-Meister


Beiträge: 806
Anmeldedatum: 03.09.07
Wohnort: München
Version: R2012b
     Beitrag Verfasst am: 22.01.2008, 10:24     Titel:
  Antworten mit Zitat      
wie versprochen...
Habe CELLFUN gegen FOR-Schleife ersetzt.
Codetuning ist eure Sache...

Code:
fid = fopen('testfile.txt')
%
% Main-Header überspringen (14 Zeilen)
for i=1:14;
   fgetl(fid)
end
%
try
   n = 0;
   while 1
      %
      n = n+1
      % Type auslesen
      test_type = sscanf(fgetl(fid),'Test Type: %s');
      fgetl(fid);fgetl(fid);fgetl(fid);fgetl(fid);
      cond_num = sscanf(fgetl(fid),'Condition Number: %s');
      trial_num = sscanf(fgetl(fid),'Trial Number: %s');
      fgetl(fid);fgetl(fid);fgetl(fid);fgetl(fid);
      %
      tmp = fgetl(fid);
      test_comm = strread(tmp,'%s');
      %
      test_comm = test_comm(3:end);
      % '/' backslash eliminieren
      test_comm(ismember(test_comm,'/'))=[];
     
      % 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)



MfG
Private Nachricht senden Benutzer-Profile anzeigen
 
noob
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 70
Anmeldedatum: 15.01.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.01.2008, 10:58     Titel:
  Antworten mit Zitat      
tausend dank
Private Nachricht senden Benutzer-Profile anzeigen
 
noob
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 70
Anmeldedatum: 15.01.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.01.2008, 12:15     Titel:
  Antworten mit Zitat      
hi

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:
Code:

for i=1:20
fprintf(fid1,'%s \n',fgetl(fid);
end
 

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.
Private Nachricht senden Benutzer-Profile anzeigen
 
keloid
Forum-Century

Forum-Century


Beiträge: 216
Anmeldedatum: 04.10.07
Wohnort: ---
Version: 7.5.0.342 (R2007b)
     Beitrag Verfasst am: 23.01.2008, 19:50     Titel:
  Antworten mit Zitat      
Versucht es mal mit:
Code:

for i = 1 : 20
zeile = fgetl(fid)
if (i == 1) | (i==3) | (i==7)
fprintf(fid1, '%s \n', zeile);
end
end
 


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.
Private Nachricht senden Benutzer-Profile anzeigen
 
n00b

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.01.2008, 09:55     Titel:
  Antworten mit Zitat      
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...

mfg
 
steve
Ehrenmitglied

Ehrenmitglied



Beiträge: 2.022
Anmeldedatum: 03.09.07
Wohnort: Wien
Version: R2023b
     Beitrag Verfasst am: 24.01.2008, 10:25     Titel:
  Antworten mit Zitat      
Moin,

n00b hat Folgendes geschrieben:

vielleicht kann man ja sagen "nimm das 1, 3, 7 wort in jeder Zeile" oder so...


Ja, das kann man Wink
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


Ich denke so sollte es klappen Smile

Gruß
Alex
_________________

>> I told me to.

____________________________________
Matlab Cheat Sheet
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
Private Nachricht senden Benutzer-Profile anzeigen
 
noob
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 70
Anmeldedatum: 15.01.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.01.2008, 10:50     Titel:
  Antworten mit Zitat      
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



Code:

fid = fopen('testfile.txt')
%
% Main-Header überspringen (14 Zeilen)
for i=1:14;
fgetl(fid)
end
%
try
n = 0;
while 1
%
n = n+1
% Type auslesen
test_type = sscanf(fgetl(fid),'Test Type: %s');
fgetl(fid);fgetl(fid);fgetl(fid);fgetl(fid);
cond_num = sscanf(fgetl(fid),'Condition Number: %s');
trial_num = sscanf(fgetl(fid),'Trial Number: %s');
fgetl(fid);fgetl(fid);fgetl(fid);fgetl(fid);
%
tmp = fgetl(fid);
test_comm = strread(tmp,'%s');
%
test_comm = test_comm(3:end);
% '/' backslash eliminieren
test_comm(ismember(test_comm,'/'))=[];

% 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)
 



lg und danke für die unterstützung

testfile.txt
 Beschreibung:

Download
 Dateiname:  testfile.txt
 Dateigröße:  10.42 KB
 Heruntergeladen:  940 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
keloid
Forum-Century

Forum-Century


Beiträge: 216
Anmeldedatum: 04.10.07
Wohnort: ---
Version: 7.5.0.342 (R2007b)
     Beitrag Verfasst am: 24.01.2008, 11:06     Titel:
  Antworten mit Zitat      
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, 11:26, insgesamt einmal bearbeitet
Private Nachricht senden Benutzer-Profile anzeigen
 
noob
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 70
Anmeldedatum: 15.01.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.01.2008, 11:12     Titel:
  Antworten mit Zitat      
sorry falscher alarm....

sind grad selber drauf kommen

aber ohne dich wäre es nicht möglich gewesen

über das fehlende \n haben wir uns schon mehrmals gewundert...


danke vielmals

lg die matlab-pros *ggg*
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 - 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.