Laden...

Text durchsuchen *schon wieder ;)*

Erstellt von axelfxxx vor 17 Jahren Letzter Beitrag vor 17 Jahren 1.986 Views
axelfxxx Themenstarter:in
139 Beiträge seit 2006
vor 17 Jahren
Text durchsuchen *schon wieder ;)*

Hi @ All

mein Problem diesmal:

(Und kommt mir jetzt bitte nicht mit der Forumsuche, die Kenn ich !! Hier gibts in der Richtung nichts 🙂).

Ich möchte meine Favoriten in mein Programm importieren.
Nun sehen aber Favoriten "meistens" / aber eben nicht immer so aus:

eine kleine Textdatei mit Extention: URL und folgendem Inhalt:

 
[DEFAULT]
BASEURL=http://www.mycsharp.de/wbb2/
[InternetShortcut]
URL=http://www.mycsharp.de/wbb2/
Modified=6061A4764070C60152

Die Zeile unter [InternetShortcut] ändert sich stetig, halt pro Favorit.
Wie kann ich genau nur diese Zeile darunter bekommen ?

Wie ich einlese und hinterher damit verfahre weis ich



string path = System.Environment.GetFolderPath(Environment.SpecialFolder.Favorites);
                this.info_panel.Text = "Lade Favoriten...";
                string[] favs = Directory.GetFiles(path, "*.url", SearchOption.AllDirectories);
                foreach (string inhalt in favs)
                {
                    TextReader tr = new StreamReader(inhalt.ToString());
                     // Hier komm ich nicht weiter ;)
                    
            
                    
                }



Ich öffne hinterher eine kleine Textdatei, welche die ganzen Urls beinhaltet und importiere diese dann in meinen Browser.

Ich währ euch echt dankbar, über eine Hilfestellung.

´//Edit: Nach meiner Meinung bringt REGEX auch nichts, weil sich ja die URL ständig ändert !?

ALEX

---- >
Keine Signatur 😉

L
497 Beiträge seit 2006
vor 17 Jahren

Original von axelfxxx
´//Edit: Nach meiner Meinung bringt REGEX auch nichts, weil sich ja die URL ständig ändert !?

Doch, das ist ja genau der Sinn von RegEx 🙂
Die betreffende RegEx müsste so ungefähr aussehen - zumindest nach Standard-POSIX-Syntax: ^URL=.$ - anschließend kann man mit $1 auf das zugreifen, was unter . stand. Weiß allerdings nicht, wie das jetzt genau bei C# aussieht...

Sarkusmus ist, wenn nichts mehr hilft, außer Lachen.

3.170 Beiträge seit 2006
vor 17 Jahren

Hallo,
Du könntest mit tr.ReadLine in einer Schleife die einzelnen Zeilen auslesen. Wenn der gelesene String "[InternetShortcut]" ist, noch eine Zeile lesen: das ist Deine!!

Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca

axelfxxx Themenstarter:in
139 Beiträge seit 2006
vor 17 Jahren

Danke erstmal an Alle 😉

Ich hab mit REGEX nocht nicht gearbeitet, aber wie ginge das mit dem ReadLine ?
Nur so ungefähr, den Rest mach ich dann !?

Alex

---- >
Keine Signatur 😉

3.170 Beiträge seit 2006
vor 17 Jahren

Hallo,
etwa so:

string result = tr.ReadLine();
while((result != null) && (result != "[InternetShortcut]"))
{
  result = tr.ReadLine();
}
if(result!=null)
{
  result = tr.ReadLine();
}
if(result!=null)
{
  // result enthält jetzt die gesuchte Zeile!!
}

// die !=null Abfragen dienen nur zur Sicherheit, auch wirklich die Daten bekommen zu haben.

Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca

axelfxxx Themenstarter:in
139 Beiträge seit 2006
vor 17 Jahren

GEEEEEIIILLL, danke werd ich probieren gg

---- >
Keine Signatur 😉

49.485 Beiträge seit 2005
vor 17 Jahren

Hallo axelfxxx,

aber wie ginge das mit dem ReadLine ?

hm, wenn ich so Fragen sehe, denke ich immer: Da hat einer noch nie ein C#-Buch gelesen und will sich vom Forum C# beibringen lassen. Kein guter Weg, weder fürs Forum noch für dich. Mal abgesehen davon, dass ein Blick in die SDK-/MSDN-Doku hier wohl schon geholfen hätte.

Ansonsten sieht mir das nach einem ziemlichen Gebastel aus. Die Datei hat doch das Ini-Format. Um solche Dateien auszulesen, gibt es fertige Lösungen. Sogar eine hier im Forum: IniReader . Zeitgemäßer wäre natürlich XML.

herbivore

axelfxxx Themenstarter:in
139 Beiträge seit 2006
vor 17 Jahren

Danke herbivore,

  1. für die ausführliche Erklärung: Aber wie man StreamReader.ReadLine() in solchen Situationen anwendet, habe ich in den Büchern die ich bis jetzt gelesen habe nicht gefunden: (z.B. O'REILLY - Programmieren mit C#) Ansonsten war mir die Handhabung dieses Befehls schon vertraut.

  2. Vielen Dank an MARSSTEIN 😉 Hat Alles bestens geklappt !!

  3. Für die Leute, die Ohne "Viel gebastel" die Favoriten in Ihr programm importiert haben wollen: Hier der Quellcode.



private void favoritenImportierenToolStripMenuItem_Click(object sender, EventArgs e)
        {
            try
            {
                string path = System.Environment.GetFolderPath(Environment.SpecialFolder.Favorites);
                this.info_panel.Text = "Lade Favoriten...";
                string[] favs = Directory.GetFiles(path, "*.url", SearchOption.AllDirectories);
                foreach (string inhalt in favs)
                {
                    TextReader tr = new StreamReader(inhalt.ToString());
                    string result = tr.ReadLine();
                    while ((result != null) && (result != "[InternetShortcut]"))
                    {
                        result = tr.ReadLine();
                    }
                    if (result != null)
                    {
                        result = tr.ReadLine();
                    }
                    if (result != null)
                    {
                        result = result.Replace("URL=","");
                        tr.Close();
                        tr.Dispose();

                        // Die favoritenTextDatei öffnen und das RESULT einbauen
                        TextWriter tw = new StreamWriter("C:\\fav.txt", true);
                        tw.WriteLine(result);
                        tw.Flush();
                        tw.Close();
                        tw.Dispose();
                    }

                    // die !=null Abfragen dienen nur zur Sicherheit, auch wirklich die Daten bekommen zu haben. (MarsStein)

                }
                
            }
            catch(System.Exception err) 
            {
                MessageBox.Show(err.ToString());
            }
            finally
            {
                this.info_panel.Text = "Favoriten erfolgreich importiert!";
            }
        }

 

Jetzt nur noch die TextDatei am Start des Browsers, per DropDownOpening() einlesen 😉


private void favoriten_box_DropDownOpening(object sender, EventArgs e)
        {
            try
            {
                if (File.Exists("C:\\fav.txt"))
                {
                    this.favoriten_box.DropDownItems.Clear();
                    StreamReader sr = File.OpenText(@"C:\\fav.txt");
                    string lineInput;
                    lineInput = sr.ReadLine();
                    while (lineInput != null)
                    {
                        this.favoriten_box.DropDownItems.Add(lineInput);
                        lineInput = sr.ReadLine();
                    }
                    sr.Close();

                }
                else
                {
                    MessageBox.Show(this, "Noch keine Favoriten vorhanden!"
                        + System.Environment.NewLine + "Sie können eine Favoriten - Datei erstellen,"
                        + System.Environment.NewLine + "indem Sie im Browser auf (FAVORITEN HINZU)"
                        + System.Environment.NewLine + "oder auf Importieren klicken", "Lesefehler", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                }

            }
            catch (System.Exception err)
            {
                MessageBox.Show(err.ToString());
            }
        }


 

MFG
Alex

---- >
Keine Signatur 😉