Announcement

Collapse
No announcement yet.

c# url in txt finden

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • c# url in txt finden

    Hallo,

    ich habe nen Text-Datei und da sind mehrere Links verteilt, die ich gerne kopieren und in ein extra links.txt file einfügen möchte.

    die Textdatei ist so aufgebaut
    blabla bala bla url":"google.de";" bla bla bla bla url":"yahoo.de";"

    und nun möchte ich alle Links in dieser Text-File filtern und in ein extra Text-Datei wie folgt abspeichern
    Zeile 1: google.de
    Zeile 2: yahoo.de
    Zeile n: link n

    Hat jemand ne Idee wie ich das Problem in c# umsetzen kann.

    mfg

  • #2
    Hallo beyaz-17,

    wenn das Format immer url":"{content}";" ist, so kann das per string.IndexOf und string.SubString gelöst werden.

    Z.B. (ziemlich aktuelle C# und .NET Version vorausgesetzt, z.B. .NET 7)

    Code:
    using StreamReader reader = File.OpenText("Content.txt");
    using StreamWriter writer = File.CreateText("links.txt");
    
    foreach ((string url, int row) in ParseLinks(reader))
    {
        writer.WriteLine($"Zeile {row}: {url}");
    }
    
    static IEnumerable<(string Url, int Row)> ParseLinks(StreamReader reader)
    {
        const string UrlStart = "url\":\"";
        const string UrlEnd   = "\";\"";
    
        for (int row = 0; !reader.EndOfStream; ++row)
        {
            string? line = reader.ReadLine();
    
            if (line is null) break;
    
            int start = 0;
    
            while (start < line.Length)
            {
                start = line.IndexOf(UrlStart, start);
    
                if (start < 0) break;    // Keine url gefunden -> nächste Zeile -> diese Schleife verlassen
    
                start  += UrlStart.Length;
                int end = line.IndexOf(UrlEnd, start);
    
                if (end < 0)
                {
                    // Url gefunden, aber inkorrektes Schema
                    throw new Exception($"Invalid url-pattern at row {row}");
                }
    
                yield return (line[start..end], row);
    
                start = end + UrlEnd.Length;
            }
        }
    }
    (Sollten Fehler im Code sein, so sehe ich kein Problem, denn du sollst ja daraus lernen können (mit dem Debugger))

    Sind die Urls allgemeiner gegeben, so ist ein Weg via Regex

    mfG Gü
    "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

    Comment


    • #3


      perfekt. danke sehr. funktioniert einwandfrei.
      Zuletzt editiert von Christian Marquardt; 19.05.2023, 06:27. Reason: Zitat entfernt

      Comment


      • #4
        Hallo beyaz-17,

        ich hoffe du verstehst auch warum es funktioniert.

        mfG Gü
        "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

        Comment

        Working...
        X