|
|
Suche mit strfind findet genau ein Treffer zu viel |
|
bmtil |

Forum-Anfänger
|
 |
Beiträge: 49
|
 |
|
 |
Anmeldedatum: 01.05.12
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 14.12.2016, 16:22
Titel: Suche mit strfind findet genau ein Treffer zu viel
|
 |
|
 |
|
Hallo,
ich habe mittlerweile gut 30% meines Algorithmus zur Suche und Reduktion von Variablen in einem Assemblercode hinbekommen. Momentan habe ich eine Routine implementiert, welche mir die gelesenen und geschriebenen Variablen sortiert.
Eigenschaften des zu verarbeitenden Assemblercodes:
Jede Zeile hat exakt 4 Leerzeichen
Eine Variable, welche nach dem dritten Leerzeichen steht, wird in das Register geschrieben.
Mein Algorithmus macht folgendes:
1. Sucht jede Assemblerzeile nach den Variablennamen ab
2. Sucht jede Assemblerzeile nach Leerzeichen ab
3. Berechnet die "Länge" der Assemblerzeile über die Anzahl von Leerzeichen
4. Sortiert jedes Vorkommnis eines Variablennamen, nach dem dritten Leerzeichen in VAR_write
5. Sortiert alle anderen Vorkommnisse in VAR_read
Ich habe ein Screenshot angehangen. Im Screenshot sieht man die 12 zu verarbeitenden Assemblercode Zeilen. Man sieht das Cell Array J, in welchem meine Leerzeichen stehen. Man sieht das Cell Array VAR_write, in dem die Stellen der Variablenvorkommnisse stehen.
Die [27] in VAR_write ist falsch, die darf nicht gefunden werden. Die dazugehörige [26] (halt den Variablennamen findet der direkt nach dem Leerzeichen) steht bei J Column 6.
Hier mein Algorithmus:
Beschreibung: |
|
 Download |
Dateiname: |
var_positions.JPG |
Dateigröße: |
62.75 KB |
Heruntergeladen: |
372 mal |
|
|
|
|
|
Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 15.12.2016, 13:01
Titel: Re: Suche mit strfind findet genau ein Treffer zu viel
|
 |
Hallo bmtil,
Was genau ist Deine Frage?
"k" und "K" ist tückisch. Variablennamen sollten sich nicht nur due Groß/Kleinschreibung unterscheiden.
ist wahrscheinlich so einfacher:
strfind
nimmt nämlich auch ein Cell-String als Input an.
Gruß, Jan
|
|
|
bmtil |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 49
|
 |
|
 |
Anmeldedatum: 01.05.12
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 15.12.2016, 13:34
Titel:
|
 |
Hallo,
naja ich verstehe einfach nicht, warum dort ein Treffer zu viel ist. Das würde heissen da ist irgendwo ein Leerzeichen, welches der Algorithmus extra findet. Alle anderen Treffer sind ja korrekt und auch sonst funktioniert es wunderbar bis jetz.
Ich probier das gleich mal aus mit der einfacheren Lösung. -> Funktioniert so nicht, der zweite input muss ein character array sein.
Noch eine Frage, kann ich mir irgendwie zusätzlich zu den eigentlichen Treffern K auch die Indizes der dazugehörigen Cells aus cell_new_name, die dort stehen, anzeigen lassen (quasi die elementidx)? -> Jo kann ich, sieht noch nicht sehr schön aus, und nicht nach Zeilen geordnet, aber geht:
Leider, seh ich nur bei meiner Lösung, dass er irgendwas gefunden hat, nicht wie oft. Da muss ich mir noch was einfallen lassen.
|
|
|
Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 15.12.2016, 15:06
Titel:
|
 |
|
 |
|
Hallo bmtil,
Sorry, stimmt,
strfind
nimmt die String-Liste nur im ersten Input entgegen, das Pattern muss aber ein String sein.
Zitat: |
naja ich verstehe einfach nicht, warum dort ein Treffer zu viel ist. |
Um das nachvollziehen zu können, muss man Deinen Code durcharbeiten, verstehen und die genaue Absicht dahinter erkennen. So tief wird sich aber in einem Forum kaum ein Leser einarbeiten.
Versuche mit dem Debugger den Code Zeile für Zeile durchzuarbeiten bis Du den Befehl mit den Inputs findest, der nicht wie gewünscht arbeitet. Wenn Du dann die Inputs und die Zeile postest, kann man leichter erklären, wie man das anpassen kann.
Überflüssige Klammern reduzieren die Lesbarkeit.
"IZ = [IZ idx]" ist ein iteratives Vergrößern eines Arrays. Das ist ein typischer Anfängerfehler, der dazu führt, dass die Testdaten zügig bearbeitet werden, bei echten Daten mit 100'000 Inputs aber die Laufzeit überraschen Jahre beträgt. Versuche das zu vermeiden, wann immer es möglich ist.
strfind
gibt immer nur Werte größer 0 zurück. Meinst Du:
? Wenn Matlab bei eienm IF-Befehl ein nicht-skalares Input erhältm, wird intern dies ausgeführt:
In Deinem Fall kommt da wegen des intern eingefügten
isempty
zwar das gleiche heraus, das ist aber mehr oder weniger Zufall.
Vielleicht ließe sich so Dein "K" auch einfacher konstruieren. Hier steht dann in "match", wie oft ein String gefunden worden ist.
Gruß, Jan
|
|
|
bmtil |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 49
|
 |
|
 |
Anmeldedatum: 01.05.12
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 15.12.2016, 16:35
Titel:
|
 |
Leider lässt sich mein K, so nicht bauen. Z liefert mir nur die letzte Variable "avoid".
Was gibt es noch für Wege außer über X = [X x] oder sprintf sich Arrays zu bauen?
Ja, ich meine ~isempty(p).
EDIT: Ich glaube mittlerweile, dass der Bug mit dem extra Treffer nur dann auftaucht, wenn ganz bestimmte "mov_X" Anweisungen in den Assemblerzeilen durchsucht werden müssen.
EDIT 2: habe es hinbekommen, dass Z nicht nur leer ist, es enthält die richtigen Variablen. Die Anzahl der Treffer match passt noch nicht (zum Beispiel muss t_1 in der ersten Zeile zwei mal vorhanden sein), aber sind es nicht nur Nullen.
Screenshot habe ich hochgeladen.
Habe das jetzt so:
Die alten Codeteile sind noch drin, damit ich die neue Methode mit meiner alten Variante vergleichen kann.
Vielen Dank und Grüße.
Beschreibung: |
|
 Download |
Dateiname: |
positions_matches.PNG |
Dateigröße: |
21.33 KB |
Heruntergeladen: |
363 mal |
|
|
|
Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 16.12.2016, 11:57
Titel:
|
 |
|
 |
|
Hallo bmtil,
Meinen Vorschlag mit "match" darf nicht in die innere Schleife gezogen werden. In der jetzigen Form ist der Befehl sinnlos. Auch Z wird so immer wieder überschrieben.
Da ich nicht wirklich verstehe, was Du vorhast und meine Vorschläge Dich wohl auch eher verwirren, weiß ich nicht, wie ich Dir effizient helfen kann.
Das iterative Erweitern der Outputs springt mir beim Betrachten des Codes so sehr in die Augen, dass ich abgelenkt bin.
Mir fehlen Kommentar-Zeilen, die erklären, was die Code-Abschnitte machen sollen. Eigentlich hast Du hier ja nur 2 Cell-Arrays und suchst danach, wieviele von den Ausdrücken aus dem einen pro Zeile im anderen vorkommen. Oder? Wenn das so klar irgendwo stünde, würde ich die Doppel-Schleife gerade durch etwas effizienteres ersetzen. Mir bleibt z.B. unklar, ob das
num2cell
nicht vollkommen überflüssig ist. Da ich aber die Absicht dahinter nicht kenne, kann ich das nicht überschauen.
Wie gehst Du damit um, wenn Du nach "MOV" suchst und "MOV_A" oder "MOV_MOV" vorkommt?
Gruß, Jan
|
|
|
bmtil |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 49
|
 |
|
 |
Anmeldedatum: 01.05.12
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 16.12.2016, 14:09
Titel:
|
 |
|
 |
|
Korrekt, ich habe nur zwei Arrays und suche wie oft Elemente aus Array B in Array A vorkommen und möchte die Treffer pro Zeile in Array A zählen. Siehe in Screenshot, wo zwar die Treffer bis auf den Bug passen, aber noch nicht klar ist, wie oft zum Beispiel t_1 in der ersten Zeile vorkommt, zwei mal.
num2cell benutze ich damit ich die Werte von p in Zellen speichern kann, damit ich diese dann Später als Indizes für ein Vergleichkriterium nutzen kann. Ich vergleiche später im Algorithmus die Positionen der Variablen (Array B) K mit den Positionen der Leerzeichen in Assemblercodezeilen (Array A) und werte so aus, ob die Variablen, die in den Zeilen stehen, gelesen oder geschrieben werden. Später möchte ich mit Hilfe dieser Information eine Variablenreduktion durchführen, indem ich rausfinde, ab welcher Zeile im Assemblercode, die Variablen das letzte mal gelesen wurden, ab diesem Zeitpunkt, kann ich diese nämlich mit neuen Werten belegen und somit die Gesamtanzahl der Variablen verringern.
Wenn ich "match" aus der inneren For-Schleife rausziehe, bekomme ich die Fehlermeldung, dass der Index die Matrix Größe übersteigt -> muss wohl match(codeidx) statt match(elementidx) heissen, damit es Treffer pro Zeile sind, jedoch ist auch dabei die selbe Fehlermeldung.
Ohne Fehlermeldung läuft es so:
Habe auch ein Screenshot zum jetzigen Ergebnis hochgeladen.
Damit ich in den Mnemonics keine Variablennamen finde, werte ich nur die Treffer aus, die nach dem ersten Leerzeichen erscheinen. Der Aufbau einer Assemblerzeile ist (bis jetzt, wahrscheinlich wird es nach mir erweitert)
, wobei die ersten beiden Variablen gelesen werden, die dritte ist die Zielvariable.
Beschreibung: |
|
 Download |
Dateiname: |
positions_matches.PNG |
Dateigröße: |
16.49 KB |
Heruntergeladen: |
363 mal |
|
|
|
Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 16.12.2016, 23:12
Titel:
|
 |
|
 |
|
Hallo bmtil,
Wir reden an einander vorbei.
Ich kann Deinen Beschreibungen nicht folgen, weil ich nicht in das Problem eingearbeitet bin, das Du bearbeitest.
Zitat: |
ich habe nur zwei Arrays und suche wie oft Elemente aus Array B in Array A vorkommen und möchte die Treffer pro Zeile in Array A zählen. |
Das wäre ein Satz. Wenn Du dann noch kurze relevante Beispiel-Daten in Matlab-Syntax angibst, wäre das Problem hier im Forum schnell gelöst.
Screenshots sind grundsätzlich ungeeignet außer um etwas an einer Grafik zu zeigen.
Zitat: |
Siehe in Screenshot, wo zwar die Treffer bis auf den Bug passen, aber noch nicht klar ist, wie oft zum Beispiel t_1 in der ersten Zeile vorkommt, zwei mal. |
Was sind "die Treffer"? Welches ist "der Bug"? Was ist "t_1"? Wieso ist nicht klar, wie oft "t1" vorkommt, wenn doch
strfind
das bereits ermittelt?
Zitat: |
num2cell benutze ich damit ich die Werte von p in Zellen speichern kann, damit ich diese dann Später als Indizes für ein Vergleichkriterium nutzen kann. |
Das kann ich auch nicht nachvollziehen. Wenn Du unterschiedlich lange Vektoren in einem Cell-Array speichern willst, geht das so einfacher und klarer:
Zitat: |
Ich vergleiche später im Algorithmus die Positionen der Variablen (Array B) K mit den Positionen der Leerzeichen in Assemblercodezeilen (Array A) und werte so aus, ob die Variablen, die in den Zeilen stehen, gelesen oder geschrieben werden. |
Kannst Du verstehen, dass ich davon kein Wort kapiere? Und das ist zur Lösung der Fragen auch bestimmt nicht notwendig. Der Sinn der Variablen istr nicht ausschlaggebend, sondern für Matlab selbst sind das einfach nur Arrays.
Zitat: |
Wenn ich "match" aus der inneren For-Schleife rausziehe, bekomme ich die Fehlermeldung, dass der Index die Matrix Größe übersteigt |
Man kann nur nachvollziehen, was Du machst, wenn Du den Code postest. Ich kann mit dieser Aussage gar nichts anfangen.
Der gepostete Code ist "verwurstelt":
In "match ~= 0" fragst Du einen Index-Vektor ab, den Du gar nicht vorher vollständig befüllt hast, sondern nur von 1 bis elementindex. Das
cellstr
ist nich nachvollziehbar. Wozu soll das nutzen?
Ich denke, ich gebe hier auf. Das ist sowieso ein Brownfield-Projekt und durch meine Ratschläge wird es hier von Beitrag zu Beitrag verworrener.
Versuche die Probleme so zu betrachten und formulieren, dass es nur noch um die Matlab-Vorgänge geht. Versuche deutlich einfacheren und klareren Code zu schreiben. Ich programmiere seit 20 Jahren in Matlab, aber ich kann Dir zu keinem der Code-Abschnitte sagen, was die Absicht dahinter ist.
Wenn ich das Projekt professionell angehen würde, würde ich den gesamten bisherigen Code löschen und neuschreiben, weil das viel weniger Probleme verursachen würde. Schon die hier besprochenen 20 Zeilen finde ich undebugbar. Sorry für die pessimistische Ansicht.
|
|
|
bmtil |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 49
|
 |
|
 |
Anmeldedatum: 01.05.12
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 18.12.2016, 13:12
Titel:
|
 |
|
 |
|
Na dann, sehr entmutigend. Thx.
Zum Thema Brownfield -> ich fasse das vorhandene Projekt gar nicht mehr an, da ich alle notwendigen Daten daraus mittlerweile habe (hoffe ich zumindest). Es geht wirklich nur noch darum im vorhandenem Text nach Strings zu suchen.
Ich erklärs Schritt für Schritt, wie in der Grundschule eine Matheaufgabe.
Gegeben: Text A (entweder in Array Form so wie jetzt, sind aber auch als .txt Files vorhanden. Die Zeilen können im Text folgende Struktur haben:
Wobei das "?" als Trennzeichen funktioniert. Alle Zeilen haben die Gemeinsamkeit, dass sie immer 4 Leerzeichen besitzen. Weitere Gemeinsamkeit ist, dass "Mnemonic" niemals der selbe String seien kann wie ein Variablenstring. Ich habe das entsprechende .txt File angehangen.
Das zweite was gegeben ist, ist eine Liste der Namen der Variablen. Jedoch wenn man möchte, kann man sich diese auch aus dem .txt File holen -> Variablen ist alles was in den Zeilen steht, die mit einem "dq" anfangen und keine Constanten sind.
Nun möchte ich Zeilenweise die .txt Datei, bzw. das Array durchgehen und die vorkommenden Variablen zählen und zwar welche, wie oft in einer Zeile vorkommen. Dazu benutze ich die strfind Funktion. Leider weiss ich nicht von der strfind Funktion, wenn sie was gefunden hat, dann was sie gefunden hat.
Zum Beispiel habe ich zwei Zeilen:
Jetzt möchte ich für diese zwei Zeilen wissen:
a) wieviele Variablen es pro Zeile gibt -> strfind macht mit das
b) Welche Variablen Quell und ZielVars sind -> macht mir auch strfind, wenn ich nach Leerzeichen suche, und dann die Position des Leerzeichens mit Position der gefunden Variable vergleiche
c) Vergleich ob der Name QuellVariable_1 = Quellvariable_2 = Zielvariable ist
-> sollte auch mit strfind gehen
Im wesentlichen habe ich es hinbekommen, bis der blöde Bug aufgetaucht ist -> es wurde eine Variable als Zielvariable gefunden, obwohl nach ihr noch ein Leerzeichen kommt und noch eine Vaiable, die auch gefunden wurde.
Drücke ich mich so unverständlich aus? Falls ja, schnappe ich mir mein Russisch-Deustch Wörterbuch.
Beschreibung: |
|
 Download |
Dateiname: |
overhalf.txt |
Dateigröße: |
509 Bytes |
Heruntergeladen: |
336 mal |
|
|
|
Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 18.12.2016, 19:57
Titel:
|
 |
|
 |
|
Hallo bmtil,
Die Art, wie Du bisher meine Vorschläge in den Code eingebaut hast, hat die Probleme vergrößert. Deshalb sind meine Vorschläge hier bereits das Arbeiten in einem Brownfield-Projekt.
Zitat: |
Ich erklärs Schritt für Schritt, wie in der Grundschule eine Matheaufgabe. |
Du musst es ja nicht mir erklären, sondern Matlab.
Und dann lies Deinen text nochmal durch: Kein Grundschüler hätte dem folgen können. Und auch ich kann es nicht. Ich wüsste nicht, was ich darauf antworten könnte, außer das gesamte Programm für Dich zu schreiben.
Zitat: |
Gegeben: Text A (entweder in Array Form so wie jetzt, sind aber auch als .txt Files vorhanden. |
Was genau bedeutet "so wie jetzt"? In einem CHAR-Array oder einem Cell-String?
Bitte netscheide Dich, ob Du die Daten als Array anlieferst oder ob der Teil mit dem Text-File-Einlesen auch noch zur Frage dazu gehört.
Zitat: |
Die Zeilen können im Text folgende Struktur haben:
|
Zusätzlich scheint es da noch Kommentar-Zeilen zu geben und Kommentare nach dem abschließenden Semikolon. ODer hast Du alle Kommentare schon entfernt?
Zitat: |
Das zweite was gegeben ist, ist eine Liste der Namen der Variablen. |
In welcher Form? Die Angabe eines Beispiels, dass per Copy&Paste verwendbar ist, hilft sehr dabei, Code für Vorschläge zu erstellen.
Zitat: |
Jedoch wenn man möchte, kann man sich diese auch aus dem .txt File holen -> |
Und? Möchte "man" das oder möchte man es nicht. Ich kann das nicht erraten und ich selbst habe da natürlich keine Präferenz. Entscheide, was Du möchtest. Andernfalls kann ich ja keinen konkreten Code vorschlagen.
Zitat: |
Variablen ist alles was in den Zeilen steht, die mit einem "dq" anfangen und keine Constanten sind. |
Woher weiß man eindeutig, was "Constanten" sind?
Zitat: |
Leider weiss ich nicht von der strfind Funktion, wenn sie was gefunden hat, dann was sie gefunden hat. |
Das verstehe ich nicht. STRFIND findet natürlich die gegebenen Inputs.
Zum Beispiel habe ich zwei Zeilen:
Zitat: |
a) wieviele Variablen es pro Zeile gibt -> strfind macht mit das |
Es gibt immer 3, es sei denn es ist ein Fragezeichen enthalten, denn dann sind es nur 2. Was genau ist das Problem?
Zitat: |
b) Welche Variablen Quell und ZielVars sind -> macht mir auch strfind, wenn ich nach Leerzeichen suche, und dann die Position des Leerzeichens mit Position der gefunden Variable vergleiche |
Klingt umständlich. Die letzte Variable ist immer die Ziel-Variable, oder?
Dann hilft ein
strsplit
und man extrahiert die letzte Variable.
Zitat: |
c) Vergleich ob der Name QuellVariable_1 = Quellvariable_2 = Zielvariable ist |
Was möchtest Du vergleichen? Was soll das Ergebnis sein? Dir ist bestimmt sonnenklar, was diese Zeile bedeutet. Als Leser im Forum erfordert das aber Interpretationen.
Du hast nach
strsplit
4 Strings. Sollen die letzten 3 nun unterschiedlich sein? Dann könnte
unique
helfen. Bei 3 Strings lässt sich das aber schneller mit 2
strcmp
lösen.
Zitat: |
Im wesentlichen habe ich es hinbekommen, bis der blöde Bug aufgetaucht ist |
Tja, das ist das blöde beim Programmieren: Läuft "fast" bringt gar nichts.
Ich würde so anfangen:
1. Wie ist die Liste der Variablen definiert?
2. File einlesen, z.B. mit
textscan
. Das kann gleich alles nach einem Semikolon entfernen, falls das gewünscht ist. Falls das Einlesen schon erledigt ist, erkläre genau, in welcher Form der Text vorliegt.
3. Zeile für Zeile mit
strsplit
in Symbole teilen.
4. Hier kann man die Anzahl der Symbole untersuchen.
5. Die Inhalte der Symbole untersuchen: Abgleich mit der Variablen-Liste. Wahrscheinlich hilft
any(strcmp)
oder
ismember
weiter.
6. Genau definieren, was in welchem Fall ausgeschlossen ist.
Wenn in einem Teil-Schritt Probleme auftauchen, poste die Inputs der entsprechenden Zeile, den Code der Zeile und den gewünschten Output. Für eine Problemlösung müssen weder die Leser noch Matlab etwas über die Bedeutung der Strings wissen, das lenkt nur ab.
Wie lösen hier im Forum nur Matlab-Probleme. Wenn die Versuche Dich zu unterstützen nur noch mehr Verwirrung stiften und weder die eigentliche Frage noch der Code durchschaubar werden, kann ich mir auch keine Motivation aus den Fingern saugen.
Programmieren ist wirklich schwierig, weil man einserseits das Gesamt-Problem im Kopf haben muss, aber Matlab ganz abstrakt nur nackte Daten serviert, nur Zahlen und Buchstaben. Das sauber zu trennen ist einfach schwer und erfordert viel Übung. Das Problem in kristallklare Einzelschritte zu teilen und dabei eine elegante Aufteilung zu finden, erfordert eine Menge Erfahrung. Also lass Dich nicht entmutigen, nur weil ein Leser im Forum aussteigt.
Gruß, Jan
|
|
|
bmtil |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 49
|
 |
|
 |
Anmeldedatum: 01.05.12
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 19.12.2016, 11:23
Titel:
|
 |
|
 |
|
Jan S hat Folgendes geschrieben: |
Ich würde so anfangen:
1. Wie ist die Liste der Variablen definiert?
2. File einlesen, z.B. mit
textscan
. Das kann gleich alles nach einem Semikolon entfernen, falls das gewünscht ist. Falls das Einlesen schon erledigt ist, erkläre genau, in welcher Form der Text vorliegt.
3. Zeile für Zeile mit
strsplit
in Symbole teilen.
4. Hier kann man die Anzahl der Symbole untersuchen.
5. Die Inhalte der Symbole untersuchen: Abgleich mit der Variablen-Liste. Wahrscheinlich hilft
any(strcmp)
oder
ismember
weiter.
6. Genau definieren, was in welchem Fall ausgeschlossen ist.
|
Ok, das ist sehr hilfreich. Kann man schön Punkt für Punkt abarbeiten.
1. Die Liste der Variable ist ein Cell, mit der Größe 1x6 (in diesem Beispiel). Diese Liste ist immer die Cell Klasse.
2. Hier gibt es für mich zwei Optionen. Entweder File mit
textscan
einlesen oder sich den Inhalt des Files in dem Brownfield Teil generieren lassen. Ich lasse den Text mit generieren, entferne dabei bereits alle Kommentare (sonst wäre ja die Suche nutzlos, wenn in Kommentaren irgendwelche Strings gefunden werden). In meinem Fall, ist der zu untersuchende Text (Assembler Code) auch ein Cell mit der Größe 1x12 (12 Zeilen halt).
3.
strsplit
diese Funktion kenne ich noch gar nicht. Wenn ich mit ihr in jeder Zeile, einfach nur die letzte Variable extrahieren kann, wäre es super.
4. Das erledige ich ja, indem ich die Anzahl der Leerzeichen pro Zeile zähle. Und ich versuche gleich mal, hier die
strsplit
anzuwenden.
5. Und genau hier komme ich nicht weiter. Ich wüsste nicht, wie ich in diesem Fall
strcmp
anwenden soll.
ismember
kenne ich auch noch nicht, Werde gleich mal ausprobieren.
6. Das passiert bei der "Vorverarbeitung" der Variablen Liste (von Klasse Cell). In der Vorverarbeitung werden die Variablennamen vom Systemnamen und von allen Konstanten getrennt (diese heisen dann bei der Deklaration im Assemblercode tatsächlich nur "_ConstantX", wobei X eine beliebige Zahl ist. Diese lösche ich aus der Liste, noch bevor die ganze Suche losgeht.
Neuer Tag, neue Funktionen -> neues Glück+Wissen. Hoffentlich klappts. Vielen Dank aufjedenfall für die Mühe.
|
|
|
|
|
Einstellungen und Berechtigungen
|
|
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
| 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.
|
|