|
| Autor |
Nachricht |
c0re_ « Moderator »

Anmeldedatum: 29.11.2007 Beiträge: 425
|
Existiert ein String im String
Verfasst am: 15.02.2008, 21:20 |
|
|
Weiß jemand, wie ich testen kann, ob ein String in einem String existiert?
Hatte mir da schon mal was zusammengeproggt, was aber nur über On Error lief.
Kennt jemand eine bessere Möglichkeit?
mfg Orbz |
|
| |
|
 |
ZiG_ Überflieger

Anmeldedatum: 07.03.2007 Beiträge: 1248
|
Verfasst am: 15.02.2008, 21:26 |
|
|
If Instr(1, string, "Gesuchter Text") <> 0 then Wer nicht auf seine Weise denkt, denkt überhaupt nicht. (Oscar Wilde) |
|
| |
|
 |
c0re_ « Moderator »

Anmeldedatum: 29.11.2007 Beiträge: 425
|
Verfasst am: 15.02.2008, 21:42 |
|
|
| Danke. Ich habe nur noch ein Problem. In meinem String kommt das Zeichen " vor. So klappt das ganze nicht. Der String liegt in einer Datei. Kann ich das Zeichen vielleicht vor dem Einlesen entfernen? Über API, oder so? |
|
| |
|
 |
seraph1n_ Coder

Anmeldedatum: 06.01.2008 Beiträge: 93 Wohnort: aaaaaaaaa Level: 1337
|
Verfasst am: 15.02.2008, 21:47 |
|
|
ich glaube ' " ' = ' "" '... sollte doch funktionieren, oder hab ich etwas falsch verstanden?
| the_gam3r hat Folgendes geschrieben: | | scheisse stimmt, muss noch besser vb lernen^^ |
| tr4st hat Folgendes geschrieben: | | Du solltest überhaupt mal VB lernen. |
|
|
| |
|
 |
c0re_ « Moderator »

Anmeldedatum: 29.11.2007 Beiträge: 425
|
Verfasst am: 15.02.2008, 21:49 |
|
|
Nein, ich meine " nicht '.
^^
Funktioniert InStr auch bei Multiline Strings? |
|
| |
|
 |
ZiG_ Überflieger

Anmeldedatum: 07.03.2007 Beiträge: 1248
|
Verfasst am: 15.02.2008, 21:52 |
|
|
Ja tut es. Ist ja einfach nur ein langer String^^
Beim suchen einfach " doppelt schreiben oder mit Chr().
Ersetzen kannst du sie mit "Replace()". Wer nicht auf seine Weise denkt, denkt überhaupt nicht. (Oscar Wilde) |
|
| |
|
 |
seraph1n_ Coder

Anmeldedatum: 06.01.2008 Beiträge: 93 Wohnort: aaaaaaaaa Level: 1337
|
Verfasst am: 15.02.2008, 22:01 |
|
|
ich miente das, was zig sagte, nur das mir dabei als Anführungszeichen diente, da es sonst ein bisschen verwirrend wirken würde. naja, das tat es ja auch so. ^^
| the_gam3r hat Folgendes geschrieben: | | scheisse stimmt, muss noch besser vb lernen^^ |
| tr4st hat Folgendes geschrieben: | | Du solltest überhaupt mal VB lernen. |
|
|
| |
|
 |
c0re_ « Moderator »

Anmeldedatum: 29.11.2007 Beiträge: 425
|
Verfasst am: 15.02.2008, 22:02 |
|
|
Argh warum funktioniert das nicht? Ich lese die Owner.mdb aus, in der das ICQ Passwort gespeichert ist. Ich suche nach der Zeile, in der "S t o r e d P a s s w o r d" vorkommt.
| Code: | Open DateiPfad For Input As #1
Do
Input #1, MyLine
MyLine = Replace(MyLine, Chr(132), "'")
If InStr(1, MyLine, "S t o r e d P a s s w o r d") <> 0 Then
Found = True
End If
Loop Until EOF(1)
Close #1
If Found = True Then
MsgBox MyLine
Else
MsgBox "Der String wurde nicht gefunden!"
End If |
Müsste doch eigentlich funktionieren, oder? |
|
| |
|
 |
ZiG_ Überflieger

Anmeldedatum: 07.03.2007 Beiträge: 1248
|
Verfasst am: 15.02.2008, 22:15 |
|
|
Und was funktioniert nicht?
Ich würde zwar so manches anders coden, aber im Grunde sollte es glaube ich gehen^^ Wer nicht auf seine Weise denkt, denkt überhaupt nicht. (Oscar Wilde) |
|
| |
|
 |
c0re_ « Moderator »

Anmeldedatum: 29.11.2007 Beiträge: 425
|
Verfasst am: 15.02.2008, 22:19 |
|
|
Es geht aber nicht.
^^
Found steht am Ende auf False, obwohl der String in der Datei vorhanden ist.
Wäre nett, wenn du mir verraten könntest, was du anders machen würdest. |
|
| |
|
 |
ZiG_ Überflieger

Anmeldedatum: 07.03.2007 Beiträge: 1248
|
Verfasst am: 15.02.2008, 22:34 |
|
|
Eine Möglichkeit.
| Code: |
Dim Dateipfad as string
Dim Found as Boolean
Dim MyLine as string
Dim ff as Integer
Dateipfad = "Pfad"
Found = False
ff = FreeFile
Open DateiPfad For Input As #ff
Do Until EOF(ff)
Line Input #ff, MyLine
MyLine = Replace(MyLine, Chr(132), "'")
If InStr(1, LCase$(MyLine), LCase$("S t o r e d P a s s w o r d)") <> 0 Then
Found = True
Exit do
End If
Loop
Close #ff
If Found Then
MsgBox MyLine
Else
MsgBox "Der String wurde nicht gefunden!"
End If
|
Andere Möglichkeit wäre einfach die Datei in einen string laden und so per Instr die Datei aufeinmal zu durchsuchen.
Man könnte auch per Replace einfach den gesuchten string ersetzen und überprüfen ob sich die Größe des String verkleinert hat.
Somit sollte es ja wohl auch drinn sein. Wer nicht auf seine Weise denkt, denkt überhaupt nicht. (Oscar Wilde) |
|
| |
|
 |
c0re_ « Moderator »

Anmeldedatum: 29.11.2007 Beiträge: 425
|
Verfasst am: 15.02.2008, 23:10 |
|
|
Hm, ich kann den String ja schlecht ersetzen, wenn er nicht mal gefunden wird.
Mit deinem Code klappt es auch nicht besser. |
|
| |
|
 |
ZiG_ Überflieger

Anmeldedatum: 07.03.2007 Beiträge: 1248
|
Verfasst am: 15.02.2008, 23:12 |
|
|
Also wenn ich ne Testdatei erstelle, dann findet er den String auch.
Debuggen soll ja Wunder wirken bei solchen Problemen. Wer nicht auf seine Weise denkt, denkt überhaupt nicht. (Oscar Wilde) |
|
| |
|
 |
c0re_ « Moderator »

Anmeldedatum: 29.11.2007 Beiträge: 425
|
Verfasst am: 15.02.2008, 23:27 |
|
|
Ja, mit einer kleineren Datei funktioniert es.
Ist wohl zu groß das Ding. Kann ich das evtl. fixen? |
|
| |
|
 |
ZiG_ Überflieger

Anmeldedatum: 07.03.2007 Beiträge: 1248
|
Verfasst am: 15.02.2008, 23:41 |
|
|
Also wenn du die Datei zeilenweise einliest, dann kann es eigentlich nicht zu groß sein.
Es wird nur länger dauern. Wer nicht auf seine Weise denkt, denkt überhaupt nicht. (Oscar Wilde) |
|
| |
|
 |
c0re_ « Moderator »

Anmeldedatum: 29.11.2007 Beiträge: 425
|
Verfasst am: 15.02.2008, 23:44 |
|
|
| Eine Pause in einer Schleife? |
|
| |
|
 |
ZiG_ Überflieger

Anmeldedatum: 07.03.2007 Beiträge: 1248
|
Verfasst am: 15.02.2008, 23:47 |
|
|
Ein DoEvents sollte noch rein. Hast recht.
Sonst würde es beim Zeilen einlesen einfrieren. Wer nicht auf seine Weise denkt, denkt überhaupt nicht. (Oscar Wilde) |
|
| |
|
 |
c0re_ « Moderator »

Anmeldedatum: 29.11.2007 Beiträge: 425
|
Verfasst am: 15.02.2008, 23:51 |
|
|
DoEvents habe ich schon probiert. Hat auch nicht funktioniert.
Gibt es nicht etwas schnelleres als InStr? |
|
| |
|
 |
ZiG_ Überflieger

Anmeldedatum: 07.03.2007 Beiträge: 1248
|
Verfasst am: 15.02.2008, 23:58 |
|
|
Also sorry, aber ich weiß echt nicht was du für Probs hast.^^
Wie groß kann denn die scheiß Datei schon sein?
Bei SQLRIP hab ichs mit viel größeren files zu tun.
Edit//
Wenn es dir nur zu langsam ist, dann solltest du nicht jede Zeile einzeln überprüfen ob der gesuchte Text drinnen steht.
Hab ja schon gesagt. Ganze Datei laden und durchsuchen.
Außer die Datei ist wirklich sehr groß.
Ich sag mal bis 100MB könnte noch verschmerzbar sein. Wer nicht auf seine Weise denkt, denkt überhaupt nicht. (Oscar Wilde) |
|
| |
|
 |
c0re_ « Moderator »

Anmeldedatum: 29.11.2007 Beiträge: 425
|
Verfasst am: 16.02.2008, 00:09 |
|
|
Sehr groß ist sie ja nicht. Das finde ich ja so seltsam. Sind nur lächerliche 280kb.
Was mein Problem ist weiß ich nicht. Deshalb poste ich ja hier. |
|
| |
|
 |
ZiG_ Überflieger

Anmeldedatum: 07.03.2007 Beiträge: 1248
|
Verfasst am: 16.02.2008, 11:00 |
|
|
Wie schwer kann es sein das Programm zu debuggen und zu schauen was genau passiert?
Wahrscheinlich suchst du iwie nach den falschen string.
Oder der string hat ein anderes Format.
Ich hab die Datei nicht zum testen da, sonst hätte ich dir schon längst die Lösung gegeben. Wer nicht auf seine Weise denkt, denkt überhaupt nicht. (Oscar Wilde) |
|
| |
|
 |
c0re_ « Moderator »

Anmeldedatum: 29.11.2007 Beiträge: 425
|
Verfasst am: 16.02.2008, 11:36 |
|
|
Ok, ich hab die Datei mal Zeile für Zeile in eine TextBox eingelesen.
Das tut er nicht so richtig. Nach 2 Zeilen ist da Schluss.
Aus irgendeinem Grund hat VB Probleme mit der Datei. Hab sie jetzt mal hochgeladen. Hoffentlich kann jetzt jemand helfen. http://rapidshare.com/files/92291028/Owner.mdb |
|
| |
|
 |
ZiG_ Überflieger

Anmeldedatum: 07.03.2007 Beiträge: 1248
|
Verfasst am: 16.02.2008, 11:41 |
|
|
Ich kann dir so ziemlich jetzt schon sagen warum das so ist.
Das ist ja keine Textdatei mit Zeilenumbrüchen, also kann er auch nicht Zeilenweise auslesen.
Ich sehs mir mal genauer an und poste dann nen source. Wer nicht auf seine Weise denkt, denkt überhaupt nicht. (Oscar Wilde) |
|
| |
|
 |
c0re_ « Moderator »

Anmeldedatum: 29.11.2007 Beiträge: 425
|
Verfasst am: 16.02.2008, 11:41 |
|
|
| Ach so. Hab ich mir auch gerade gedacht. Der Zeilenumbruch entsteht nur durch die Länge der Zeilen, oder? |
|
| |
|
 |
ZiG_ Überflieger

Anmeldedatum: 07.03.2007 Beiträge: 1248
|
Verfasst am: 16.02.2008, 12:04 |
|
|
| Code: |
Option Explicit
Private Sub Command1_Click()
Dim Dateipfad As String
Dim MyFile As String
Dim ff As Integer
Dim pos As Long
Dateipfad = App.Path & "\Owner.mdb"
ff = FreeFile
Open Dateipfad For Binary As #ff
MyFile = Space(LOF(ff))
Get #ff, , MyFile
MyFile = Replace(MyFile, Chr(0), "")
MyFile = Replace(MyFile, Chr(132), "'")
pos = InStr(1, MyFile, "StoredPassword")
If pos <> 0 Then
MsgBox pos
Else
MsgBox "Der String wurde nicht gefunden!"
End If
Close #ff
End Sub
|
So sollte es gehen.
Er gibt dir die Position zurück.
Wenn man sich die Datei per wordpad ansieht, dann sieht man sehr viele Quadrate(Chr(0)).
Die musste ich vorher entfernen, damit er nach dem string richtig suchen kann.
Hoffe es passt jetzt so. Wer nicht auf seine Weise denkt, denkt überhaupt nicht. (Oscar Wilde) |
|
| |
|
 |
c0re_ « Moderator »

Anmeldedatum: 29.11.2007 Beiträge: 425
|
Verfasst am: 16.02.2008, 12:34 |
|
|
Funktioniert super, danke. Habs einfach falsch angesetzt gehabt. =( |
|
| |
|
 |