TextBox Suche

  • VB.NET

Es gibt 63 Antworten in diesem Thema. Der letzte Beitrag () ist von Xylon.

    @ErfinderDesRades
    Also mit Instr würde es ja gehen. Kann man irgendwie deklarieren, das immer 2 Zahlen dann Hex(+ 4) sind? Und dann irgendwie für die TextBox so:
    TextBox2.Text = 80000000 + deklaration
    Oder ist mein denkansatz da irgenwie nicht richtig?

    Xylon schrieb:

    Oder ist mein denkansatz da irgenwie nicht richtig?
    Dein kapitaler Denkansatz-Fehler ist sowas zu denken:

    Xylon schrieb:

    Also mit Instr würde es ja gehen.
    Ich habe nix gegen alte oder auch uralte Funktionen, wenns nix besseres gibt.
    Annererseits hat man als Programmierer keine Wahl zw. was gutem und was besseren: Man nimmt immer das bessere.

    Bleib bei VB6, da gibts nix besseres als Instr.
    Also ich hätte es soweit eigentlich schon hinbekommen, leider tritt wieder ein Problem auf. Deshalb brauche ich eine andere Möglichkeit um zu suchen. Ich schildere einfach nochmal was ich brauche, vielleicht kann mir dann jemand netterweise ein paar tipps geben :)
    Ich muss unbedingt zu Anfang irgendwie deklarieren das (vom Anfang) immer 8 Zahlen = 80000000 + 4 in Hex sein muss. Es ist wichtig das das Programm das schon zu beginn weiß, und das das +4 nicht angehängt, sondern addiert wird (Math funktioniert hier irgendwie nicht).
    Nun zum eigentlichen Problem. Wenn also jeder Wert eine Adresse hat kann die Suche beginnen. In der 1. Box gibt der Benutzer seinen Code ein der z.B. so aussieht:
    04E03D03 14F00000
    Das Problem hierbei ist, das der Wert in Hex ist, und mein Programm dann immer abstürzt. Nun soll in der rtb2 nach der Adresse 04E03D03 gesucht werden. Das 04 wird dabei zu 80.
    Und gang gang wichtig: Ich bräuchte einen Zähler, der die Anzahl der suchen Zählt, was mich zu meinem nächsten Problem bringt:
    Kann man mit Contains oder InStr mehrere suchen machen oder brauche ich da einen anderen Code? Jedenfalls wenn dann in der rtb2 gesucht wurde, soll nach dem Wert auch in der rtb3 gesucht werden, und zwar genauso oft wie in der rtb2(dafür der Zähler)

    Ich weiß ist ein wenig kompliziert, aber ich würdes gerne machen, und ich würde mich über ein paar tipps oder so wirklich freuen. ^^
    Also ich hab mir das nu durchgelesen aber verstehe so garnicht was du willst, glaube ich.

    Ich fasse mal zusammen was ich verstanden habe.
    Du hast eine Richtextbox mit mehreren hexadezimalen Zahlen. Ich nenne sie einfach mal RtbWerte.
    Du hast eine Textbox mit einem Suchbegriff. Ich nenne sie einfach mal TxtSuche.
    Du hast eine Richtextbox in die die Suchergebnisse geschrieben werden sollen. Ich nenne sie RtbErgebnisse.
    Du willst dass der Text in RtbWerte nach dem Text aus TxtSuche durchsucht wird und wenn dieser gefunden wurde in RtbErgebnisse geschrieben wird.

    Fragen:
    Sind die hexadezimalen Zahlen alle hintereinander oder durch irgendein Zeichen (zB. ein Leerzeichen) getrennt?
    Was bitte heißt für dich "zu Anfang deklarieren"? Wann ist der "Anfang"? Von was der Anfang? Der Anfang des Inhalts in RtbWete, oder in TxtSuche? Ich weiß nicht was du meinst.
    Was heißt der Wert muss Hex sein? Du willst eine 8-Stellige Zahl von Hex nach Dezimal umrechnen, 4 dazu addieren und das Ganze wieder nach Hex umrechnen und das dann suchen? Oder soll diese Zahl dann gesucht werden? Ich versteh nicht was du da meinst.

    Was soll der Satz bedeuten "Wenn jeder Wert eine Adresse hat"? Welcher Wert?

    Was heißt dann für dich "einen Zähler, der die Anzahl der suchen Zählt"? Wann zählt er hoch? Was genau ist für dich EINE Suche?
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D

    Xylon schrieb:

    Ich muss unbedingt zu Anfang irgendwie deklarieren das (vom Anfang) immer 8 Zahlen = 80000000 + 4 in Hex sein muss. Es ist wichtig das das Programm das schon zu beginn weiß, und das das +4 nicht angehängt, sondern addiert wird (Math funktioniert hier irgendwie nicht).
    Aber Du arbeitest mit Option Strict On :?: :!: :?:

    VB.NET-Quellcode

    1. Dim adresse As Long = &H80000000
    2. Dim adresse2 As Long = adresse + 4
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @MemoAnMichSelbst
    Ja okay. Also erstmal habe ich folgende Controls:
    rtb2, rtb3, txt1, txt2,
    In der txt1 steht ein Code. z.B. 04E30408 13F00000. Das 04E30408 ist die Adresse also der Standort des Wertes 13F00000 in der rtb2. (04 wird hier zu 80). Nochmal um das zu verdeutlichen:
    postimg.org/image/6e59qc0nb/
    Wichtig ist, das währenddessen gezählt wird, wie oft der Wert bis zum schluss dann vorkam, und das genauso oft in der rechten gesucht wird.

    @RodFromGermany
    Ja ich arbeite mit strict on. Also so einfach geht das? Damit müsste ich doch dann schon nach einer Adresse suchen können oder?

    Jetzt muss ich noch wissen, kann man mit InStr noch weitersuchen? Ich möchte von Anfang an halt suchen starten und die währenddessen zählen.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Xylon“ ()

    Xylon schrieb:

    Jetzt muss ich noch wissen
    Probier mal dies:

    VB.NET-Quellcode

    1. Dim txt = "askljklöjhasljiklöasoiuzioutzaslökzhuöozas"
    2. Dim index = 0
    3. Do While (index >= 0)
    4. index = txt.IndexOf("as", index + 1)
    5. Debug.WriteLine(index.ToString)
    6. Loop
    Output:
    10
    18
    29
    40
    -1
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @RodFromGermany
    Also nochmal ganz wichtig:
    Der Wert (32bit zahl in txt1, 13F00000) Soll links so lange gesucht werden, bis der Wert an der Stelle 80E30408 gefunden wurde. Das wäre Stelle 3719426 oder sowas.

    Damit geht das dann? Das muss wirklich genau so sein... Also wird mit dem Code oben von 0 gesucht bis as gefunden wurde richtig? und das index + 1 ist dann der zähler? Aber wieso dann soviel output?
    Weiß irgendwie garnicht mehr wie ich anfangen muss damit es auch passt :/ Wie kann man denn von Beginn an sagen das jeder Wert also jede 32bit zahl von Anfang an = adresse2 ist?
    Ich dachte an sowas:

    VB.NET-Quellcode

    1. Dim adresse As Long = &H80000000
    2. Dim adresse2 As Long = adresse + 4
    3. adresse2 = CLng(RichTextBox2.Text.StartsWith(CStr(1)) And RichTextBox2.Text.EndsWith(CStr(8)))

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Xylon“ ()

    Du kannst doch einfach addieren...

    VB.NET-Quellcode

    1. Dim adresse As Long = &H4E30408 + &H4
    (in deinem Beispiel)
    Da musste doch nix umrechnen.

    Du hast nu erklär dass du 4 verschiedene Controls hast...
    Und dass in txt1 der "Code" steht. Der Code ist wohl das was durchsucht werden soll.
    In rtb2 steht nur ein "04"? Wieso ne Richtextbox für eine simple "04"?

    Und was ist mit rtb3 und txt2?

    Für mich ergibt da ne "Suchanzahl" keinen Sinn, solange nur EIN wert in EINER Box gesucht werden soll.
    Oder kann der Wert mehrfach vorkommen?
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D

    Xylon schrieb:

    das index + 1
    sorgt dafür, dass Du nicht permanent ein und dieselbe Stelle im Text findest, sondern die nächste. Gugst Du hier.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Willst du nur die Position wissen, an der dein Ergebnis steht?????
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D
    @MemoAnMichSelbst
    Nein das nicht. Okay nochmal ganz ganz deutlich:

    postimg.org/image/9las1ztip/
    In der TextBox1 (Links) steht einmal die Adresse(04E...) und der Wert der <- Adresse (13F...). In der RichTextBox links sind natürlich nur die Werte:
    postimg.org/image/6e59qc0nb/

    Und die Adressen bestimmen halt die Position der Werte. Nun möchte ich, dass der Wert 13F00000 und der darauffolgende (32bit) in der RichTextBox(links) gesucht wird, mit dem Standort der Adresse 04E03000. Dabei soll gezählt werden wie oft der Wert 13F00000 (und der darauffolgende) vorkommt bis zu der Adresse 04E03000. Diese Zahl ist extrem wichtig.
    So nun weiter: Da ich jetzt die Anzahl der Vorkommenden Werte links habe, kann ich rechts mit genau der gleichen Anzahl nach 13F00000 (und darauffolgend) suchen.

    Hier ein Beispiel zur verdeutlichung:
    txt1 =
    0412EF08 23000000

    Suche:
    23000000 mit dem Standort 0412EF08. (Hier eine While Schleife oder so, wie oft der Wert bis zu Standort 0412EF08 vorkommt, sagen wir mal hier 5mal) Die nächsten 8 Zahlen nach 23000000 sind meinetwegen 10000000.

    Suche2 (rtb2):
    2300000010000000 und zwar 5 mal von anfang an. Standort (adresse) soll dann in der TextBox2 ausgegeben werden.

    Hoffe das ist deutlich genug...Achja, das mit dem umrechnen ist deshalb nötig weil VB mein &H04000000 immer zu &H4000000 macht...
    &H04000000 = &H4000000

    Bei Hex gibts auch keine vorstehenden Nullen.

    Ich fasse neu zusammen.
    Du hast in der Textbox1 zwei Hexadezimale Zahlen mit einer Leertaste voneinander getrennt stehen.
    Der wert der zuerst kommt gibt den Index an, bis wo in der Richtextbox nach der zweiten Zahl aus Textbox1 gesucht werden soll.
    Und du möchtest nun alle Positionen/Indexwerte kennen, an denen der zu suchende Text vorkommt?
    Anhand dieser Indexwerte willst du nun in der zweiten Richtextbox nach Werten suchen.

    Und wenn der gesuchte Wert sowohl in der Richtextbox1 als auch in der Richtextbox2 an der gleichen Stelle vorkommt, willst du den Index als Hexadezimale Zahl in die Textbox2 schreiben.

    Ist das nun richtig verstanden?
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D
    Also ich hab das nu ausm Kopf geschrieben also keine Garantie für Richtigkeit.
    Aber vom Prinziep her würd ich das so versuchen:

    VB.NET-Quellcode

    1. Dim Ende As Boolean = False
    2. Dim iBegin As Integer = 0
    3. Dim iErgebnis As Integer
    4. Dim listErgebnisse As New List(Of Integer)
    5. Dim sSuche As String = TextBox1.Text.Split(" "c)(1)
    6. Dim lAdresse As Long = CLng(String.Concat("&H", TextBox1.Text.Split(" "c)(0)))
    7. Do Until ende
    8. iErgebnis = RichTextBox1.Text.IndexOf(sSuche, iBegin)
    9. If iErgebnis > iBegin And iErgebnis <= lAdresse Then
    10. iBegin = iErgebnis + 1
    11. listErgebnisse.Add(iErgebnis + 1)
    12. Else
    13. Ende = True
    14. End If
    15. Loop
    16. For Each adresse As Integer In listErgebnisse
    17. If Strings.Mid(RichTextBox2.Text, adresse, 8).Contains(sSuche) Then
    18. TextBox2.Text += String.Concat(Hex(adresse).ToString.PadLeft(8, "0"c), " ")
    19. End If
    20. Next
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D
    @MemoAnMichSelbst
    Mh danke aber leider passiert nichts...
    @RodFromGermany
    Funktioniet das IndexOf auch mit nur einem Klick auf den Button? Es soll ja automatisch so oft gesucht werden wie links gesucht wurde.

    Dieser Code gefällt mir schon ganz gut:

    VB.NET-Quellcode

    1. Dim tempcode As String = Mid(TextBox1.Text, 10, 8)
    2. Dim tempadress As String = Mid(TextBox1.Text, 1, 8)
    3. Dim fadress As String = Mid(RichTextBox2.Text, CInt(tempcode), 8)
    4. Dim null As String = "0"
    5. Dim adresse As Long = &H80000000
    6. Dim adresse2 As Long = CLng(adresse + CDbl(Hex(4)))
    7. Dim startsearch As Integer = 0
    8. Dim txt = RichTextBox2.Text
    9. Dim index = 0
    10. Dim partadress = Mid(TextBox1.Text, 3, 8)
    11. Dim achtnull As String = "80"
    12. Do While (index >= 0)
    13. index = txt.IndexOf(achtnull + partadress, index + 1)
    14. TextBox2.Text = index.ToString
    15. Loop


    Da fehlt jetzt nur noch ein Zähler der den Index zählt, und ganz wichtig: Hier sucht der ja nach 80 + die Adresse aus der ersten txt. Nur weiß das Programm ja noch garnicht das der Standort des Werts dann jene Adresse ist. Wo und wie müsste ich das noch einbauen?

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „Xylon“ ()