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

Suchen -Finden - Vektor

 

Destino
Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 13.07.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.07.2010, 11:49     Titel: Suchen -Finden - Vektor
  Antworten mit Zitat      
Hey Leute.
Will das Forum nicht zu bombadieren aber ich hab ein paar Fragen.

Ich würde eine Suchfunktion brauchen die aus einem Vektor namens 'Material' der Sieben Zeilen hat. Jeweils den ersten dann den zweiten dann den dritten usw. herausnimmt und den Text darauf durchsucht und dann wenn er es findet nicht die nächsten Zeilen ausgibt sondern die 5te und die 7te Zeile.

Als kleines Beispiel:

Material=
MgF2 heiß 2010-03 selm0,8862-0,00670
TiO2sellm4,290_,0655 mit extinktion 2010-03
SiO2sellm1,15_0,01
TiO2sellm4,290_,0655 mit extinktion 2010-03
SiO2sellm1,15_0,01
TiO2sellm4,290_,0655 mit extinktion 2010-03
SiO2sellm1,15_0,01

Search mit 'MgF2 heiß 2010-03 selm0,8862-0,00670'

Gefunden haben soll er dann :

Layer material # 3 (F, Active): MgF2 heiß 2010-03 selm0,8862-0,00670
Comment: No comment
n given by Sellmeier 1 formula
Coefficients:
A0 = 1.00000E+000
A1 = 8.86200E-001
A2 = 6.70000E-003


Ausgeben soll er

A1=8.862.000E-001
A2=6.7E-003

wenn möglich am besten wäre ein neuer Vektor
mit den ganzen Zahlen von der ganzen Suche.

z.b.
SellMat=
8.862E-001,6.7000E-003
..
.:
:.
..
:.
:.
.:

==> Ist sowas möglich? Hat jemand Ansätze? oder gar einen Lösungsvorschlag?
Ich bettle um Hilfe.
Danke
Destino
Private Nachricht senden Benutzer-Profile anzeigen


Napoleon
Forum-Anfänger

Forum-Anfänger


Beiträge: 41
Anmeldedatum: 22.07.10
Wohnort: Heidelberg
Version: ---
     Beitrag Verfasst am: 26.07.2010, 11:55     Titel:
  Antworten mit Zitat      
Hallo,

kannst du die text-datei hochladen sodass man bisschen experimentieren kann ?
Private Nachricht senden Benutzer-Profile anzeigen
 
Destino
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 13.07.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.07.2010, 12:11     Titel:
  Antworten mit Zitat      
Natürlich

das ist mein, mit dem Forum zusammengebauter, Code für den ersten Teil:
Code:


FID = fopen('Testdatei', 'rb');



Line = 'dummy';
found = false;

Search ='   #  Physical'

nSearch = length(Search);


while ischar(Line);
   Line = fgetl(FID);
   if strncmp(Line, Search, nSearch)
      found = true;
      break;
   end
end

if found
    n=zeros(1,n_layer);
    d_all=zeros(1,n_layer);
    opticalth=zeros(1,n_layer);
    FWOT=zeros(1,n_layer);
    QWOT=zeros(1,n_layer);
    mat_all=cell(n_layer,1);
    State=cell(n_layer,1);
     Material=cell(n_layer,1);
   


   
    for iLine = 1:n_layer
      Line = fgetl(FID);
     
     
     
      [n(iLine),d_all(iLine),opticalth(iLine),FWOT(iLine),QWOT(iLine),mat_all(iLine),State(iLine),Material(iLine)] = strread(Line, '%d%f%f%f%f%s%s%[^\n]s', 'delimiter', ' ');
                         
                     end;
                 end;  
   
                     

 


und anbei ist noch die Textdatei.

Sollte es noch Fragen geben- einfach posten

Danke Danke

Testdatei.txt
 Beschreibung:

Download
 Dateiname:  Testdatei.txt
 Dateigröße:  7.24 KB
 Heruntergeladen:  1167 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Des_tino

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.07.2010, 12:20     Titel:
  Antworten mit Zitat      
n_Layer ist hier 7 Very Happy
 
Des

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.07.2010, 07:25     Titel:
  Antworten mit Zitat      
kann mir keiner helfen?
Shocked
 
Napoleon
Forum-Anfänger

Forum-Anfänger


Beiträge: 41
Anmeldedatum: 22.07.10
Wohnort: Heidelberg
Version: ---
     Beitrag Verfasst am: 27.07.2010, 07:52     Titel:
  Antworten mit Zitat      
Hallo,

ich hab auf die schnelle was gebastelt, noch nicht komplett, vlt kannst du damit was anfangen. ich nehme an du hast 5.te und 6.te zeile gemeint...
die gelesenen werte sind unter A{1},A{2}.....
Code:

file='C:\Documents ...............\t.txt';
fid=fopen(file,'r');

Material={
'MgF2 heiß 2010-03 selm0,8862-0,00670',
'TiO2sellm4,290_,0655 mit extinktion 2010-03',
'SiO2sellm1,15_0,01',
'TiO2sellm4,290_,0655 mit extinktion 2010-03',
'SiO2sellm1,15_0,01',
'TiO2sellm4,290_,0655 mit extinktion 2010-03',
'SiO2sellm1,15_0,01' };
k=1;
for ii=1:1:7
    search=Material{ii};
    while(1)
        line=fgetl(fid);
        if findstr(line,search)>=1
            A(k)=textscan(fid,'   %*s =   %f',2,'headerLines',4);
            frewind(fid);
            k=k+1;
            break;
        end
    end
end


grüsse
Private Nachricht senden Benutzer-Profile anzeigen
 
Des.tino

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.07.2010, 08:35     Titel:
  Antworten mit Zitat      
Danke Napoleon.

Für deinen Vorschlag.
Wo müsste ich die Funktion deiner Meinung nach noch verbessern?
Könntest du mir behilflich sein und mir helfen diese besser zu verstehen?

Dankend

Des
 
Napoleon
Forum-Anfänger

Forum-Anfänger


Beiträge: 41
Anmeldedatum: 22.07.10
Wohnort: Heidelberg
Version: ---
     Beitrag Verfasst am: 27.07.2010, 08:57     Titel:
  Antworten mit Zitat      
Hallo,

du sagtest du willst am ende einen vektor mit den Zhlen der ganzen suche.
ABER:
bei den strings:
-Ta2O5 sellm 3,459-0,028
-SiO2sellm1,15_0,01

sind die zahlen die gelesen werden anders ( einmal eine spalte, und beim 2.string 3 spalten)

ist es so ( es wird kompliziert) oder war das nur ein beispiel von dir, und in material sind nur strings wo die gelesenen werte nur eine spalte ist:
(A0..A3...)

grüsse
Private Nachricht senden Benutzer-Profile anzeigen
 
Des

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.07.2010, 09:11     Titel:
  Antworten mit Zitat      
hm. Ich verstehe deine Frage nicht wirklich, aber ich kanns ja mal probieren dir anzuworten, sollte ich dich richtig verstanden haben. Smile

Wichtig sind immer nur

A1 und A2, keine Wellenlängen und keine Spalten immer nur A1 und A2.
Anhand von der Testdatei wäre es so:

3.08400E+000 ,3.02000E-002
4.29000E+000,3.02000E-00
4.85200E-001, 5.1212E-003
...

Das wären so die Zahlen die gesucht sind, natürlich dann im Programm mit einer Reihenfolge. wäre super Smile

Das Beispiel ist natürlich ein bisschen blöd habe wahllos Zahlen geändert sonst hätte ich es nicht uploaden können.
Normalerweise sind es schöne Gleitpunktkommazahlen in einer Spalte.

Danke dass du dir Zeit nimmst mir zu helfen.

Danke

Des
 
Napoleon
Forum-Anfänger

Forum-Anfänger


Beiträge: 41
Anmeldedatum: 22.07.10
Wohnort: Heidelberg
Version: ---
     Beitrag Verfasst am: 27.07.2010, 11:44     Titel:
  Antworten mit Zitat      
Hallo,

das würde funktionieren für die datei die du hochgeladen hast, weiss nicht die originale aussieht, musst du vlt bisschen anpassen.
Code:

file='C:\...........\t.txt';
fid=fopen(file,'r');

Material={
'1,88 N-LASF31A',
'heiß 2010-03 selm3,084-0,0302',
'TiO2sellm4,290_,0655',
'heiß 2010-03 selm0,8862-0,00670',
'heiß 2010-03 selm2,286-0,0247',
'Ta2O5 sellm 3,459-0,028' };
k=1;
for ii=1:1:6
    search=Material{ii};
    while(1)
        line=fgetl(fid);
        if findstr(line,search)>=1
            if (strcmp(search,'1,88 N-LASF31A')==1)
                A(k)=textscan(fid,'   %*s =   %f',2,'headerLines',3);
                k=k+1;
            else
                A(k)=textscan(fid,'   %*s =   %f',2,'headerLines',4);
                k=k+1;
            end
            break;
        end
    end
end

for ii=1:1:6
    vector(ii,:)=reshape(A{ii},[2,1]);
end
 


in vector sind deine letzten ergebnisse.

gruss
Private Nachricht senden Benutzer-Profile anzeigen
 
Des

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.07.2010, 11:52     Titel:
  Antworten mit Zitat      
Danke Napoleon! Das ist echt super.

Ich wollte das gerade eben ausprobieren und mir sagt der PC er kenne textscan nicht. Mein Matlab kennt überhaupt kein textscan. Komisch oder?
Hast du eine Idee warum?

Dankend^1000

Des
 
Napoleon
Forum-Anfänger

Forum-Anfänger


Beiträge: 41
Anmeldedatum: 22.07.10
Wohnort: Heidelberg
Version: ---
     Beitrag Verfasst am: 27.07.2010, 12:00     Titel:
  Antworten mit Zitat      
Hi,

diesmal habe ich leider kein Plan :roll:
tut mir leid.
Private Nachricht senden Benutzer-Profile anzeigen
 
derOli
Forum-Meister

Forum-Meister


Beiträge: 579
Anmeldedatum: 19.03.08
Wohnort: Leipzig
Version: 2010a
     Beitrag Verfasst am: 27.07.2010, 12:10     Titel:
  Antworten mit Zitat      
Hi Des, was genau sagt Matlab denn. Hast du eine Matlabfile so genannt oder eine Variable?

Grüße

Oli
Private Nachricht senden Benutzer-Profile anzeigen
 
Des

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.07.2010, 12:41     Titel:
  Antworten mit Zitat      
Hey Olli,

also ich habe diese Textscan funktion in meinem Code
[ ich füge ihn zur Sicherheit nochmal ein]

Code:

file=C:........
fid=fopen(file,'r');

Material={
'MgF2 heiß 2010-03 selm0,8862-0,00670',
'TiO2sellm4,290_,0655 mit extinktion 2010-03',
'SiO2sellm1,15_0,01',
'TiO2sellm4,290_,0655 mit extinktion 2010-03',
'SiO2sellm1,15_0,01',
'TiO2sellm4,290_,0655 mit extinktion 2010-03',
'SiO2sellm1,15_0,01'};
k=1;
for ii=1:1:6
    search=Material{ii};
    while(1)
        line=fgetl(fid);
        if findstr(line,search)>=1
            if (strcmp(search,'MgF2 heiß 2010-03 selm0,8862-0,00670')==1)
                A(k)= textscan (fid,'   %*s =   %f',2,'headerLines',3);
                k=k+1;
            else
                A(k)= textscan (fid,'   %*s =   %f',2,'headerLines',4);
                k=k+1;
            end
            break;
        end
    end
end

for ii=1:1:6
    vector(ii,:)=reshape(A{ii},[2,1]);
   
end
 


So jetzt will ich diese Funktion ausführen und Matlab sagt:

??? Undefined function or variable 'textscan'.

Error in ==> C:..........==>
On line 20 ==> A(k)= textscan (fid,' %*s = %f',2,'headerLines',3);

Ja und das ist das Einzige und das Programm macht dann gar nichts mehr.

vielleicht kannst du mir ja helfen.

Danke.

Des
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 27.07.2010, 14:25     Titel:
  Antworten mit Zitat      
Hallo Des,

Welche Matlab Version verwendest Du?
In Matlab 6.5 können die meisten Funktionen von TEXTSCAN mit STRREAD gelöst werden.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite 1, 2  Weiter

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.