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

Merken der Zeilennummer

 

bmtil
Forum-Anfänger

Forum-Anfänger


Beiträge: 49
Anmeldedatum: 01.05.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.01.2017, 14:11     Titel: Merken der Zeilennummer
  Antworten mit Zitat      
Hallo, in meinem Algorithmus muss ich generierte Code-Zeilen durchgehen und diese nach Variablennamen durchsuchen. In 10 Schritten ist der Algorithmus zusammengefasst:

Code:

1) Ich erstelle mir eine Liste von Variablen, die in den erzeugtem Code verwendet werden.
2) Für jede Variable erstelle ich mir eine Zaehlvariable
3) Ich geh den erzeugten Code Zeile fuer Zeile durch, und suche nach der ersten Variable aus der Liste
4)Falls eine Variable in der Zeile gefunden wurde, erhoeht sich die Zaehlvariable countvar, die countvar kann folgende Werte einnehmen: 0, 1, 2, 3. Countvar ist die Enstcheidungsvariable, was mit der generierten Codezeile gemacht werden muss.
5)Merke die Zeilennummer t, wo die Variable gefunden wurde
6)Entscheide ob die Variable in der Zeilennumer t gelesen oder geschrieben wird
7)Falls die Variable nur gelesen wird, und ab da nicht mehr geschrieben, markiere die nächste generierte Zeile t+1
8)ersetze in der t+1 den Variablennamen, der in t+1 geschrieben wird, mit dem Variablennamen, nach dem gesucht wurde. Merke ersetzten Namen
9)suche alle Codezeile t+rest nach den ersetzten Namen aus t+1 und ersetze diesen mit dem Variablennamen aus 8).
10)geh zu 3), nimm nächste Variable.
11)End, wenn Variablenliste durch ist.



Ich habe angefangen den Algorithmus in Matlab zu gießen und bin erstmal bis Schritt 5 gekommen und habe dabei festgestellt, ich weiss nicht wie ich die Variable t erstellen und speichern soll.

Code:
cell_new_name = {'t_1'; 't_2'; 't_5'; 't_6';};
node_list = regexp( fileread('overhalf.txt'), '\n', 'split');
    for elementidx = 1:length(cell_new_name)
        nks=strfind(ln, cell_new_name{elementidx}); %search for variables in the line
        if ~isempty(nks)
            % if found, split the line string into components (parsing of the line)
            compons = strsplit(ln, delim);
            % find position in compons
     for t = 1:length(node_list)
            for ks=1:length(compons)
                if strcmp(compons{ks}, cell_new_name{elementidx} );                    
                    if ks > 3;  %if found positions is greater than third space position within the same row
                        str3 = [str3 't=' num2str(codeidx) ' v=' cell_new_name{elementidx} '; ']; %save write variable
                    else
                        str2 = [str2 't=' num2str(codeidx) ' v=' cell_new_name{elementidx} '; ']; %save read variable
                    end
                end
             end
    end
    end


Waere toll wenn mir da jemand helfen könnte, mit der Variable t steht und faellt mein Algorithmus.
Grüße, bmtil.
Private Nachricht senden Benutzer-Profile anzeigen


bmtil
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 49
Anmeldedatum: 01.05.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.01.2017, 16:23     Titel:
  Antworten mit Zitat      
Ich habe die Lösung für mein Problem gefunden, und kann mir die getrennten Variablen und die dazugehörigen Zeilennummern ausgeben lassen:

Code:

Var_write =
    'l=8 v=t_2; l=9 v=t_6; l=10 v=t_5; l=11 v=t_2; l=12 v=t_1; '


Habe einfach nur nicht daran gedacht mir eine zusaetzliche Zaehlvariable einzufuegen.

Aber ich habe eine dennoch eine zusaetzliche Frage:
Var_write ist eine Cell, mit der Größe 1x1. Kann ich irgendwie diese einzelne Zelle in kleine aufteilen, so dass ich auf die einzelnen l und die einzelnen v Werte zugreifen kann? Also, dass quasi die Zelle Var_write noch mal in Zellen Var_write_L mit Elementen l hat und Var_write_V, wo die v stehen?
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 17.01.2017, 16:34     Titel:
  Antworten mit Zitat      
Hallo bmtil,

Ich verstehe die Frage nicht genau. Wie soll das Ergebnis genau aussehen? "wo die v stehen" ist da noch nicht eindeutig.

An sich sollte die Aufteilung mit dem Befehl gehen, mit dem Du schon die Zeilen des Files erzeugt hast:
Zitat:
regexp(Var_write{1}, ';', 'split')

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
bmtil
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 49
Anmeldedatum: 01.05.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.01.2017, 16:52     Titel:
  Antworten mit Zitat      
Alles cool, ich habe alles hinbekommen mit den Zeilennummern und Zugriff auf die einzelnen Elemente aus dem String. Habe ein bisschen an der Ausgabe rumgefeilt.
Code:
                   if ks > 3;  %if found positions is greater than third space position within the same row
                        str3 = cellstr([str3 ['l=' num2str(codeidx) ' v=' cell_new_name{elementidx} '; ']]); %save write variable
                        l_write = num2cell(codeidx);
                        %l_write
                        %cell_new_name{elementidx}
                        L_write = [L_write l_write];
                    else
                        str2 = cellstr([str2 ['l=' num2str(codeidx) ' v=' cell_new_name{elementidx} '; ']]); %save read variable
                        l_read = num2cell(codeidx);
                        %l_read
                        L_read = [L_read l_read];
                        %cell_new_name{elementidx}
                    end


L_read und L_write sind jetzt meine Zeilenindexe, von den Codezeilen wo entweder gelesene oder geschriebene Variablen gefunden wurden. Jetzt stehen folgende Schritte noch aus:

1)Vergleich Variablen aus Var_write{length(L_write)} (Ich kann length(L_write) als Index nehmen, da pro Zeile immer nur max eine Variable geschrieben werden kann) mit denen aus Var_read. Dazu möchte ich einfach strcmp nutzen.

2)Falls eine Übereinstimmung in Var_read gefunden wurde, und die dazugehörige L_write L_write Max ist,

3)dann überprüfe ob L_write_max, kleiner ist als die dazugehörige L_read,

4)falls ja, ersetze in der nachfolgenden Codezeile codeidx das vierte Element (compons{4}, siehe erster post) mit der Variable aus Var_write

Entschuldigung fuer die Textwand und viele Grueße.
Private Nachricht senden Benutzer-Profile anzeigen
 
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 - 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.