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

Problemstellung ImportData mit textread/textscan

 

eupho
Forum-Meister

Forum-Meister


Beiträge: 777
Anmeldedatum: 07.01.09
Wohnort: Marburg
Version: R2009b
     Beitrag Verfasst am: 10.08.2010, 09:23     Titel: Problemstellung ImportData mit textread/textscan
  Antworten mit Zitat      
Hallo,

ich versuche seit Stunden ein .txt-File mit Daten auszulesen und in eine entsprechende Matrix zu importieren. Die textscan Funktion müsste dies leisten, allerdings finde ich den Umgang extrem umständlich und bitte daher hier um Hilfe.

Mein .txt-File sieht so aus:

Code:
Patient Name                  :  Patient^First
Patient ID                    :  1
Date                          :  03.07.1985 12:00:00
Type                          :  Cumulative Dose Volume Histogram
Item                          :  P1-EFFECTIVE


VOI                           :  Skin
Volume                   [ccm]:  89193.944
Dose minimum             [GyE]:  0.000
Dose maximum             [GyE]:  112.698
Dose mean                [GyE]:  0.459
Dose median              [GyE]:  0.000
Standard dev             [GyE]:  5.479

Dose[GyE]           Volume[%]           Dose[GyE]           Volume[ccm]        
112.70              0.03                112.70              22.30              
98.49               0.08                98.49               66.90              
89.60               0.13                89.60               111.49              
75.43               0.18                75.43               156.09              
66.77               0.23                66.77               200.69    
......
......
......
0.00                99.83               0.00                89037.85          
0.00                99.88               0.00                89082.45          
0.00                99.93               0.00                89127.05          
0.00                99.98               0.00                89171.64          
0.00                100.00              0.00                89193.94          

VOI                           :  Target2
Volume                   [ccm]:  24.603
Dose minimum             [GyE]:  8.143
Dose maximum             [GyE]:  112.698
Dose mean                [GyE]:  81.452
Dose median              [GyE]:  97.919
Standard dev             [GyE]:  28.905

Dose[GyE]           Volume[%]           Dose[GyE]           Volume[ccm]        
112.70              0.03                112.70              0.01                
109.96              0.08                109.96              0.02                
109.45              0.13                109.45              0.03                          


Die ersten 7 Zeilen werden nicht benötigt, danach würde ich gerne die Daten der 4 Spalten für jede VOI in eine eigene Matrix mit dem Namen der Struktur schreiben, im Beispiel: "Skin" und "Target2".

Vielen Dank für die Hilfe && || Tipps

Daniel
Private Nachricht senden Benutzer-Profile anzeigen


Frank

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.08.2010, 09:42     Titel:
  Antworten mit Zitat      
Servus,

wenn die textdatei nicht zu gross ist, kannst du sie ruhig hochladen,
man kann dann einfacher experementieren.

viele grüsse
 
eupho
Themenstarter

Forum-Meister

Forum-Meister


Beiträge: 777
Anmeldedatum: 07.01.09
Wohnort: Marburg
Version: R2009b
     Beitrag Verfasst am: 10.08.2010, 09:45     Titel:
  Antworten mit Zitat      
Oh, das ging aber flott..
Vielen Dank für die schnelle Rückmeldung, Datei im Anhang (cave: das ist die Orginaldatei, die hat noch Kommas drin (nicht wie im Thread gepastet)).

Gruß,
Daniel

data.txt
 Beschreibung:

Download
 Dateiname:  data.txt
 Dateigröße:  1.22 MB
 Heruntergeladen:  525 mal
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: 10.08.2010, 12:17     Titel:
  Antworten mit Zitat      
Hallo Daniel,

in deiner textdatei sind zahlen die folgendermassen aussehen:
Code:

6.92                1.13                6.92                1,003.43            
5.82                1.18                5.82                1,048.03            
5.06                1.23                5.06                1,092.63            
2.92                1.28                2.92                1,137.22
 


was bedeutet das in der 4.spalte (komma,punkt) sind das jetzt 5 spalten?

gruss
_________________

Ein schlechter General ist besser als zwei gute.
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: 10.08.2010, 12:36     Titel:
  Antworten mit Zitat      
egal
ich hab die kommas entfernt.


option 1: deine matrizen speicherst du als CELL, da die anzahl der spalten unterschiedlich ist.
deine matrizen sind dann : M{1}, M{2}.....

du wolltest ähnliche matrizenname wie namen der strukturen, da musste man EVAL benutzen (gefährlich), deswegen habe ich stattdessen stucturen genommen,
dann wären deine matrizen : M.Skin, M.Target....
das problem es gibt unvalide namen wie target2.3
deswegen die funktion strrep um zb target2.3 zu target2_3 umzuwandeln.
Code:

file='C:\-----------------------------------\d1.txt';
fid=fopen(file,'r');
k=1;
zz=0;
zeile=[];
while(1)
   
    Line=fgetl(fid);
    zz=zz+1;
    if findstr(Line,'VOI')>=0
        str{k}=sscanf(Line,'%*s                           :  %s');    % namen der VOIS merken
        zeile=[zeile;zz];                          % zeilen merken
        k=k+1;
    end
   
if ~ischar(Line), break, end
end

len= length(zeile);

for ii=1:1:len-1
    M.(strrep(sprintf('%s',str{ii}),'.','_'))=dlmread(file,'',[zeile(ii)+8 0 zeile(ii+1)-3 3]);
end

M.(strrep(sprintf('%s',str{len}),'.','_'))=dlmread(file,'',zeile(len)+8,0);

% for ii=1:1:len-1
%     M{ii}=dlmread(file,'',[zeile(ii)+8 0 zeile(ii+1)-3 3]);
% end
%
% M{len}=dlmread(file,'',zeile(len)+8,0);
 


hier hast du beide möglichkeiten CELLs oder STUCTS.

von EVAL würde ich die Finger weglassen.

gruss
_________________

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

Forum-Meister

Forum-Meister


Beiträge: 777
Anmeldedatum: 07.01.09
Wohnort: Marburg
Version: R2009b
     Beitrag Verfasst am: 10.08.2010, 13:06     Titel:
  Antworten mit Zitat      
Hui,
vielen Dank für die Hilfe, funktioniert einwandfrei!

Ich muss mir allerdings den Code mal noch genauer anschauen, vorneweg aber noch eine Frage:

Die Kommas sind englische 1000er-Trennzeichen, der Code funktioniert (wie du ja angemerkt hast) nur, wenn die Kommas vorher manuell entfernt wurden. Wie kann ich denn die Kommas mit MATLAB entfernen?

Gruß,
Daniel

edit: PS: nochmal vielen Dank! Smile
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: 10.08.2010, 13:59     Titel:
  Antworten mit Zitat      
Hi,

ich könnte diesen Code vorne plazieren.
Code:

file_orig='---------------------------------------\deine_original_datei.txt';
file='---------------------------------------------\data_ohne_komma.txt';

fidi=fopen(file1,'r');
fido=fopen(file,'w+t');
while feof(fidi) == 0
    line = fgetl(fidi);
    line = strrep(line, ',', '');
    fprintf(fido, '%s\n', line);
end
fclose(fidi);
fclose(fido);

fid=fopen(file,'r');                    
k=1;
zz=0;
.
.
.
 


ich weiss nicht ob es einfacher geht, oder obs doch einfacher ist die kommas manuel zu entfernen ;)

gruss

PS: irgendwo unten im ersten Code fehlt noch ein fclose(fid)
_________________

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

Forum-Meister

Forum-Meister


Beiträge: 777
Anmeldedatum: 07.01.09
Wohnort: Marburg
Version: R2009b
     Beitrag Verfasst am: 10.08.2010, 15:03     Titel:
  Antworten mit Zitat      
Funktioniert prima (nur file1 muss noch durch file_orig ersetzt werden oder andersrum).

Vielen Dank nochmal! Wie ist deine Spendenhotline? Smile
Private Nachricht senden Benutzer-Profile anzeigen
 
_Fourier

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.08.2010, 15:21     Titel:
  Antworten mit Zitat      
Zitat:

Wie ist deine Spendenhotline?


Code:

sprintf('überweise mir %d euro',randi(1000,1))
 


und nicht schummeln Wink
 
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.