Datei Nach String durchsuchen Syntax

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von razzzer530i.

    Datei Nach String durchsuchen Syntax

    Guten Morgen,

    habe ein dringendes Problem bei dem mir andere Beiträge kaum helfen da ich eine Syntax nicht verstehe.

    Ich habe eine Datei (Pfad und name werden mir in einer Variablen übergeben) und möchte in dieser nach dem Wort "From" suchen.

    Sieht ca so aus die Datei von innen:


    ýÿf €k J €¡‘ µ ç €
    V• æ €
    `• €— j• €c ¤ € d¥ ! € ~Õ¡W°
    € €+ ¥ € Received: with MailEnable Postoffice Connector; Wed, 3 Aug 2016 11:30:11 +0200
    Received: from EHLEN ([217.92.191.12]) by steinau.com with MailEnable ESMTP; Wed, 3 Aug 2016 11:30:09 +0200
    From: <absender@absender.com>
    To: <empfaenger@empfaenger.com>
    Subject: betreff
    Date: Wed, 3 Aug 2016 11:29:02 +0200


    _______________

    Jetzt möchte ich nach From suchen und die Email des Absenders rausfiltern.

    VB.NET-Quellcode

    1. Public Function getsender(ByVal fx$) As String 'Passwort des Benutzers suchen
    2. If Right("FROM", 1) <> ":" & Space(1) Then fx = fx
    3. With CreateObject("scripting.filesystemobject").getfile(Fx & "0tx").openastextstream
    4. On Error Resume Next
    5. getsender = Split(Split(.readall, fx$)(1), vbCrLf)(0)
    6. End With
    7. End Function


    Hab das hier mal versucht aber verstehe einfach nicht wie genau das geht.

    HILFE!
    ~Wir leben zwar alle unter dem gleichen Himmel, aber es haben nicht alle den gleichen Horizont~
    Iiiih, hör auf damit. Siehe Böses aus VB6/VB2003 - und die richtigen VB.NET-Alternativen

    .NET bietet dir mit der String-Klasse ganz viele einfache Funktionen zum Bearbeiten. Kannst ruhig auch mal auf den Link drauf klicken, dann siehst du alle mit ihrer Syntax und Funktionsweise.

    In deinem Fall kommt dann noch die Verwendung der File-Klasse hinzu:

    VB.NET-Quellcode

    1. Dim text As String = File.ReadAllText(<Dateiname>) ' Datei einlesen


    Mit der IndexOf()-Methode bekommst du den Index eines vorgegebenen Strings, also z.B. "From". Mit SubString kannst einen Teilstring aus einem String herausfiltern. Sind alles Methoden des Strings. Wie gesagt, oben auf den Link draufklicken, dann siehst du alle Funktionen mit Definition, Überladungen und Erklärungen. Teilweise sogar mit Beispielen.

    VB.NET-Quellcode

    1. ...
    2. Dim index As Integer = text.IndexOf("From: <")
    3. Dim indexEndeDerZeile As Integer = text.IndexOf(Environment.NewLine, index)
    4. Dim adresse As String = text.SubString(index, indexEndeDerZeile - index)
    So oder so ähnlich sollte das dann funktionieren.
    Musst halt eventuell ein bisschen mit den Werten rumspielen...

    LG :)

    Edit: Ach und bitte lese dir den in der ersten Zeile verlinkten Artikel durch! Bitte tu es einfach ^^
    Hab das soweit durchgelesen.
    Habe folgendes Problem:

    Ich verstehe einfach nicht wie genau die Datei durchsucht wird. Mir ist aufgefallen, dass die Dateien nicht immer gleich sind.

    Es kann in Zeile 5 stehen: From: "Duhastgesendet" <senderemail@mail.com>

    Aber es kann auch in Zeile 6 stehen : From: <sender@email.com>
    Jetzt steht aber auch in Zeile 20 noch: from <by@email.com>

    Ich suche also nach dem Inhalt von <....> in der Zeile wo From: steht.

    Sorry dass ich das nicht so auf die Kette kriege. Bis jetzt klappt alles an meinem Programm nur das hier eben nicht -.- Aber danke für die Antwort steht viel nützliches bei
    ~Wir leben zwar alle unter dem gleichen Himmel, aber es haben nicht alle den gleichen Horizont~
    Das ist halt sehr blöd, wenn die Dateien nicht immer gleich sind. Mal kurz ne ausführliche Erklärung was mein obiger Code macht:

    Jedes Zeichen in einem String hat ja eine Position. Nehmen wir an, wir haben das Wort Apfel. Dann wäre das A an Position 0, das p an Position 1 und so weiter. Mit Dim index As Integer = text.IndexOf("From: <") habe ich mir nun die erste Position der Zeichenkette From: < ausgelesen. Wenn die Datei nun so aufgebaut ist: From: <absender@absender.com>, dann weiß ich, dass ab der Position die ich ausgelesen habe + 7 (wegen "From :<" = 7 Zeichen) bis zum Zeilenende - 1 wegen dem ">" die Adresse steht. Dann habe ich die benötigten Angaben um mit SubString eine Teilzeichenfolge rauszufiltern. SubString funktioniert in der einfachsten Version so: text.SubString(position, länge). Wenn jetzt natürlich noch etwas davor steht, musst du dich mit IndexOf etwas durch hageln. Es gibt da nämlich noch eine Überladung: IndexOf("", int), mit der kannst du Startposition der Suche festlegen, d.h. du suchst erst nach "From:", und dann suchst du ab der Position von "From:" nach "<" und filterst dann mit den Angaben deine Adresse raus. Ich hoffe das ist einigermaßen verständlich erklärt :/

    razzzer530i schrieb:

    Jetzt steht aber auch in Zeile 20 noch: from <by@email.com>
    Steht das zusätzlich noch drin? Und wenn ja, brauchst du diese Angabe?

    Steht das zusätzlich noch drin? Und wenn ja, brauchst du diese Angabe?

    Die Angaben benötige ich auf keinen Fall. Daher will ich die nicht drin haben.
    Habe das soweit verstanden was du mir da geschrieben hast allerdings habe ich keinen Schimmer wie das geht.
    kriegt hier jemand ein Beispiel für mich zusammen? Wäre super
    LG
    ~Wir leben zwar alle unter dem gleichen Himmel, aber es haben nicht alle den gleichen Horizont~
    Habe das Problem gelöst bekommen:

    VB.NET-Quellcode

    1. dim text123 as String
    2. dim AbsenderdN as String
    3. text123 = My.Computer.FileSystem.ReadAllText(f2, System.Text.Encoding.Default) 'f2 ist der Dateipfad
    4. index = text123.IndexOf("From:")
    5. index2 = text123.IndexOf("<", index)
    6. index3 = text123.IndexOf(">", index2)
    7. AbsenderdN = text123.Substring(index2 + 1, index3 - index2 - 1)


    Danke für die Hilfe:)
    ~Wir leben zwar alle unter dem gleichen Himmel, aber es haben nicht alle den gleichen Horizont~