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

Vektoren auf gleiche Strings untersuchen & Indizes speic

 

Micha123

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.11.2012, 12:59     Titel: Vektoren auf gleiche Strings untersuchen & Indizes speic
  Antworten mit Zitat      
Hallo zusammen,

ich habe ein kleines Problem mit meinem Programm und hoffe hier Hilfe zu finden. Ich beschreibe kurz mein Tool und stelle dann meine Frage.
- Das Tool findet in einer Textdatei bestimmte Variablen und speichert diese in der Vektor 'vars'. Anschließend werden diese noch aussortiert und die letztlich gesuchten Variablen in dem Vektor 'ergebnis' gespeichert.
- Dann lade ich ein Exel-sheet, um die Variablen mit diesen im Vektor 'ergebnis' zu vergleichen. Bis hierher passt alles.

Aber das Vergleichen will irgendwie will es nicht klappen. Ich versuche es mit der Funktion strcmp(x,y)... das müsste doch richtig sein oder!? Manchmal findet er die erste Variable und speichert diesen einen Index aber das wars dann. Daher denke ich, dass ich von einer Lösung nicht all zu weit weg bin. Finde die Bugs aber einfach nicht! Wäre sehr dankbar über einen Tipp!

Hier siehst du mein Programm! Wäre super, wenn du mir helfen könntest!
Vielen dank in voraus.
Grüße Micha

Code:


clear all; close all; clc

a=1;
j=2;
k=1;
p=1;
ergebnis=zeros(100,1);
endergebnis=zeros(100,1);


%% load XMLfile -->  Find 'DFC'  --> Ausgabe im Zeilenvektor 'vars'


[FileName, PathName] = uigetfile('D:\Projekte_Matlab\Auslesetool\Dateien\test.txt');

fid = fopen(fullfile(PathName,FileName));
txt = textscan(fid,'%s','delimiter','\n');
txt = [txt{:}];
fclose(fid);
txt  = regexp(txt,'<VT>DFC\w+</VT>','match');
txt = [txt{:}];
vars= regexprep(txt,'<VT>(\w+)</VT>','$1');



%% "DFC_Unused" aussortieren


for i=1:1:100

    unused = strcmp('DFC_Unused',vars(1,i));

  if unused == 0
    ergebnis(k,1) = vars (1,i);
    k=k+1;
  end

end
 


%% Einlesen des Exel-sheets

[nums, txt, raw] = xlsread('D:\Projekte_Matlab\Auslesetool\Dateien\DFC_Kodierung.xls'); %Einlesen der Datei



%% DFC's mit Exel-sheet vergleichen und gesuchte Inizies in Vektor 'Endergebnis' speichern

while j<1020

    u = raw(j,2);
    o = ergebnis(a,1);
   
    TS = strcmp(u,o);
       
     if TS==1
      j = j-1;
      endergebnis(p,1) = j;
      a=a+1;
      p=p+1;
      j=1;
     end
     
    j=j+1;
   
end
 
 


Sirius3
Forum-Guru

Forum-Guru


Beiträge: 441
Anmeldedatum: 12.11.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.11.2012, 15:30     Titel:
  Antworten mit Zitat      
Hallo Micha,

wenn es sich um eine xml-Datei handelt, ist es besser diese mit xmlread zu lesen:
Code:
doc=xmlread(fullfile(PathName,FileName));
vt=doc.getElementsByTagName('VT');
vars=cell(vt.getLength,1);
for k=0:vt.getLength-1
  vars{k+1}=char(vt.item(k).getTextContent);
end


Die Funktion strcmp kann auch mit cells umgehen:
Code:
ergebnis=vars(~strcmp('DFC_Unused',vars));


Die festen Schleifengrenzen haben ihren Grund?
Oder sollte es sich um size(raws,1) oder length(vars) handeln?

Dann wird es für mich verwirrend. j wird innerhalb der while-Schleife
immer mal wieder auf 1 gesetzt. Für a wird aber nirgends eine Abbruchbedingung
festgelegt. p ist überflüssig, da a und p immer den gleichen Wert enthalten.

Suchst Du etwas wie
Code:
[~,idxe,idxr]=intersect(ergebnis,raw(:,2));
endergebnis(idxe)=idxr;


Grüße
Sirius
Private Nachricht senden Benutzer-Profile anzeigen
 
dmjr
Forum-Century

Forum-Century


Beiträge: 199
Anmeldedatum: 02.10.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.11.2012, 16:41     Titel:
  Antworten mit Zitat      
http://www.gomatlab.de/vektoren-auf.....index-speiche-t26048.html

Du hast immer noch zwei Variablen mit identischen Werten, die sind jetzt nur umbenannt: a und p
Private Nachricht senden Benutzer-Profile anzeigen
 
Micha123

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.11.2012, 12:49     Titel:
  Antworten mit Zitat      
Hi Sirius,

danke für deine Anteort und Tipps! Also das mit xmlread muss ich noch probieren! Bin noch am Anfang von MATLAB... deswegen tu ich mich noch ein bisschen schwer!
Die festen Schleifengrenzen haben nur den Grund, weil das Exel-sheet immer gleich viele Zeilen hat... deswegen habe ich die Grenzen so gewählt. Mein Plan dabei war, dass ich nach der Reihe eine Variable aus dem Vektor 'ergebnis' mit allen aus dem Exel-sheet vergleiche und wenn ich eine Übereinstimmung gefunden habe (TS==1) den Index in 'endergebnis' abspeichere. Dann inkremmentiere ich Vektor 'ergebnis' und 'endergebnis' (p=p+1)... fange im exel-sheet aber wieder von oben an (j=1). Variable a habe ich raus genommen... stimmt was ihr gesagt habt. Ist immer a=p.
Weiß nicht, ob das so zu kompliziert gedacht ist aber so erschien es mir logisch.

Die intersect Funktion hört sich ziemlich gut an für das Problem. Danke!
Habe dazu in der Hilfe nachgelesen und noch Fragen.

Code:

[c, ia, ib] = intersect(a, b)
 


Hier könnte ich doch die Indizes der Übereinstimmungen wie du es gemacht hast einfach in 'ib' ablesen. Muss ich da noch anderes beachten, weil es nicht funktioniert. Muss ich bei dem Ergebisvektor etrwas beachten... weil 'ia' 'ib' nicht im workspace auftaucht.

Grüße
Micha
 
Micha123

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.11.2012, 11:40     Titel:
  Antworten mit Zitat      
Hallo zusammen,

vielen Dank für eure Mithilfe. Ich habe es jetzt nach folgender Methode gelöst.

Code:

a=1;
i=1;

while i<1100

    u = austausch(i,1);
    o = spalte(a,1);
   
    TS = strcmp(u,o);
       
     if TS==1
      indizes(a)=i-1;
      a=a+1;
     i=1;
     end
     
  i=i+1;
   
end

 


So klappt es. Die Indizes werden in den vektor 'indizes' geschrieben. Mit intersect hat es nicht funktioniert, weil die DAtentypen scheinbar nicht gepasst haben obwohl ich zwei cells habe.
Naja, so gehts auf jeden Fall Smile!
Danke nochmal für eure mithilfe!
 
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.