txt-Datei auf Inhalt prüfen und NUR ganze Zeile berücksichtigen

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

Es gibt 27 Antworten in diesem Thema. Der letzte Beitrag () ist von wasserbombe3000.

    txt-Datei auf Inhalt prüfen und NUR ganze Zeile berücksichtigen

    hi,

    habe mich gerade hier im Forum angemeldet, weil ich ein kleines Problem habe...

    Ich lasse von einem Server eine txt-Datei runterladen. Diese besteht aus 3 oder mehr Zeilen...

    Aufbau der Txt:

    xxx123xxx
    yyy123yyy
    bla123bla

    So, jetzt möchte Ich VB gerne sagen, das es die txt-Datei untersuchen soll und nur auf True springen soll, wenn irgendeine der Zeilen komplett mit der Eingabe übereinstimmt die man vorgibt.


    Also wenn Ich in die Inputbox z.B reinschreibe: xxx123xxx - Soll das ganze Positiv erkannt werden.

    Schreibe Ich jetzt aber nur xxx123x rein, dann soll es negativ erkannt werden. Das tut es aber natürlich nicht... weil es ja in der txt "xxx123x" gibt. Das könnte Ich ja über eine festgelegte Länge absichern. Also "muss 9Zeichen haben".

    Aber wie kann ich verhindern, das man z.B. xxx123yyy eingeben darf? Und vorallem wie mache Ich VB klar, das es immer jede einzelne Zeile prüfen soll auf die o.g. vorgaben.

    Weil wenn er das gesamte txt auf einmal überprüft kann ich ja auch bla123xxx reinschreiben und es wird positiv erkannt.


    Hintergrund:

    Ich möchte eine Art Serial abfrage erstellen. Also das der User nur 1x mit einem ihm bekannten Code in dem Programm weiter kommt. (Denn wenn die Serial akzeptiert wurde, dann wird ein Downloadbutton Visible gesetzt). Und das soll nur 1x möglich sein.

    Den benutzen Key lasse Ich dann per Email an mich senden und so weis Ich, welche Serial ich aus der Txt auf dem Server löschen muss, damit die Person mit diesem Key nichts mehr machen kann...

    hat da jemand eine idee für?

    Es hängt nur an dieser Überprüfung der Serial...der rest funktioniert ohne Probleme...

    danke schonmal
    Also, wenn jede deiner Zeilen in der Textdatei Länge 9 hat, kannst du erstmal die Eingabe hinsichtlich der Länge überprüfen.
    D.h. hat die Eingabe nicht ebenfalls Länge 9 wird es negativ erkannt.
    Dann prüfst du für jede einzelne Zeile, ob diese mit der Eingabe übereinstimmt. Falls ja, wird es positiv erkannt, sonst wird die nächste zeile überprüft.
    Wenn alle zeilen überprüft wurden, aber bei keiner eine Übereinstimmung gefunden wurde wird wiederum negativ erkannt.

    Wahrscheinlich habe ich aber eh missverstanden, was du erreichen möchtest.

    Edit: Wenn du dir eine E-Mail schicken lässt dauert das aber, bis du die gelesen und die Änderung vorgenommen hast (z.B. wenn du schläfst ;-)). In der Zwischenzeit, kann der Key beliebig oft benutzt werden.
    Willkommen im Forum. :thumbup:

    wasserbombe3000 schrieb:

    und nur auf True springen
    So was:

    VB.NET-Quellcode

    1. Dim txt = "bla123bla" ' Dein Eingabe-Text
    2. Dim lines = New List(Of String)
    3. lines.AddRange(IO.File.ReadAllLines("C:\Temp\Test.txt"))
    4. If lines.Contains(txt) Then
    5. MessageBox.Show("enthalten")
    6. Else
    7. MessageBox.Show("nicht enthalten")
    8. End If
    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!
    ​Edit: Wenn du dir eine E-Mail schicken lässt dauert das aber, bis du die gelesen und die Änderung vorgenommen hast (z.B. wenn du schläfst ;-)). In der Zwischenzeit, kann der Key beliebig oft benutzt werden.


    joa ich weis. wenn das aber erstmal alles so klappt, dann werde ich auf der serverseite wohl die txt in X-Min abrufen lassen, und mit dem Inhalt der Mails abgleichen lassen. Sollte dann ein Key in der Mail mit dem der txt übereinstimmen, wie die zeile durch "luft" ersetzt und wieder auf den server geuppt.

    aber danke schonmal für die links und den code unten, habe zwar nicht soviel ahnung aber ich werde mal versuchen das zusammen zu basteln..

    wasserbombe3000 schrieb:

    aber ich werde mal versuchen
    Du hast hier eine Reihe von Teilproblemen, die Du mangels Erfahrung alle gleichzeitig iwie hinkriegen willst.
    Das kann nur schief gehen!
    Zerlege Dein Projekt in mehrere (elementare) Teilprojekte, die Du dann in je einem kleinen Teilprojekt separat löst.
    Wenn Du alle zu Deiner Zufriedenheit gelöst hast, dann füge sie alle in einem neuen Projekt zusammen.
    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!
    jawoll das hat geklappt!! danke!

    weis vielleicht noch jemand wie ich dem ding hier sagen kann, das es die txt so lassen soll wie sie ist? denn es haut mir die zeilenumbrüche raus sobald er sie runtergeladen hat...
    myWebClient.DownloadFileAsync(New Uri("http://xxx/wp/serials.txt"), "serials.txt")

    wasserbombe3000 schrieb:

    es haut mir die zeilenumbrüche raus
    Kann ich nicht so recht glauben.
    Wie hast Du das festgestellt?
    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!
    Wenn das Zeilenendeformat nur aus einem Linefeed besteht, sieht Du das im Notepad nicht.
    Ausserdem solltest Du die Daten nicht wieder speichern, angucken erlaubt ;P

    Einen guten Notepad ersatz findest du mit Notepad++, der zeigt dir auch die unterschiedlichsten Zeilenendeformate und Dateiformate korrekt an.

    Erklärung: Unxiformat für Zeilenende: LF (Linefeed), Windowsformat für Zeilenende: CR + LF (Carriage Return [Wagenrücklauf] und Linefeed [Zeilenvorschub])

    wasserbombe3000 schrieb:

    ^^
    Mit welchem Tool unter welchem Betriebssystem hast Du Dich überzeugt?
    Ist Dir bekannt, dass Zeilenumbrüche unter Windows und Linux unterschiedlich sein können?
    Nimm mal Notepad++.
    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!
    Öhm,

    hätte da vll. noch eine Frage...

    kann Ich dem Befehl DownloadFileAsync irgendwie noch mitteilen, das er die txt-Datei versteckt ablegt? Was natürlich noch cooler wäre ist, das Ich die txt verschlüsseln könnte. und vb sie nach dem downloaden dann wieder entschlüsselt. am ende wird die datei ja sowieso automatisch gelöscht.

    wasserbombe3000 schrieb:

    DownloadFileAsync
    kannst Du nix mitteilen.
    Wenn Du den Inhalt der Datei downloadest, kannst Du damit machen, was immer Du willst.
    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!

    wasserbombe3000 schrieb:

    pfad
    So was:

    VB.NET-Quellcode

    1. Dim path = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)
    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!
    uuuuuuppppss :) danke


    warum nimmt er den Appdata Path hier nicht??
    lines.AddRange(IO.File.ReadAllLines(Environment.SpecialFolder.ApplicationData, "serials.txt"))


    Fehler:

    Quellcode

    1. Der Wert vom Typ "String" kann nicht in "System.Text.Encoding" konvertiert werden.


    Muss ja schliesslich noch unten die serials wieder durchsuchen lassen viel mir gerade ein :D

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