Laden...

Review: Regex-Filter in Textdatei anwenden

Erstellt von alexpj vor 8 Jahren Letzter Beitrag vor 8 Jahren 3.213 Views
Hinweis von Coffeebean vor 8 Jahren

Abgeteilt von Regex-Filter in Textdatei anwenden

und in Reviews verschoben

A
alexpj Themenstarter:in
14 Beiträge seit 2015
vor 8 Jahren

ich habe mir eine Lösung selbst erarbeiten können. Mich würde mal interessieren, ob das ein halbwegs vernünftiger Aufbau ist bzw. was könnte man anders/besser lösen?

Auf die RegEx Geschichte hab ich ganz verzichtet. Das konnte ich komplett mit substring() lösen!

Die korrekte Pfadangabe zur Namensgebung der Files löse ich später in den Windows Forms, da ich den Input aus einer ListBox bekomme.

public static void read_grp()
        {
            const string f = @"C:\tmp\test2.grp";
            string line;
            string newfilename = "test";
            
            using (StreamReader r = new StreamReader(f))
            {
                while ((line = r.ReadLine()) != null)
                {
                    //===================Gruppennamen filtern==========================  
                    try
                    {
                        if (line.Substring(0, 1) == "[")
                        {
                            newfilename = line;
                            //Ausgabekontrolle neuer Filename
                            Console.WriteLine("Dateiname: " + newfilename);
                            
                            //lese nächste Zeile
                            continue;
                        }

                    //===================Splitt bei Leerzeile==========================
                        else if (!string.IsNullOrWhiteSpace(line))
                        {
                            //Abneiden Reststring nach '|'
                            line = (line.Substring(0, line.IndexOf('|')));

                            //Abschneiden von 'Trackxxxx=' am Zeilenanfang // +1 damit auch das '=' gelöscht wird
                            line = (line.Substring(line.IndexOf('=') + 1));
                            
                            //Schreibe Zeile in neue Playlist
                            using (StreamWriter sw = File.AppendText(@"c:\tmp\" + newfilename + ".m3u"))
                            sw.WriteLine(line);
                            
                            //Console.WriteLine("Dateiname: " + newfilename + Environment.NewLine + "Trackname: " + line); //Ausgabekontrolle
                        }
                        else
                        {
                            //Leerzeile erkannt -> ab hier neuer Dateinamen
                            newfilename = line;
                            continue;
                        }
                    }
                    catch (Exception ex) { }
                }
            }
       }
S
322 Beiträge seit 2007
vor 8 Jahren

Hallo, hier mein Vorschlag (nicht getestet!)


public static void read_grp()
{
    const string Filename = @"C:\tmp\test2.grp";
    string line;
    string newFilename = "test";

    using (StreamReader r = new StreamReader(Filename))
    {
        while (!r.EndOfStream)
        {
            try
            {
                line = r.ReadLine();

                if (string.IsNullOrWhiteSpace(line))
                {
                    // Leerzeile überspringen, nächste Zeile einlesen
                    continue;
                }

                if (line.StartsWith("[") && line.EndsWith("]"))
                {
                    // Gruppennamen als Dateiname verwenden (ohne eckige Klammer)
                    newFilename = line.Substring(1, line.Length - 2);

                    // Ausgabekontrolle neuer Filename
                    Console.WriteLine("Dateiname: " + newFilename);
                }
                else
                {
                    // Abschneiden Reststring nach '|'
                    line = line.Substring(0, line.IndexOf('|'));

                    // Abschneiden von 'Trackxxxx=' am Zeilenanfang // +1 damit auch das '=' gelöscht wird
                    line = line.Substring(line.IndexOf('=') + 1);

                    // Schreibe Zeile in neue Playlist
                    using (StreamWriter sw = File.AppendText(@"c:\tmp\" + newFilename + ".m3u"))
                    {
                        sw.WriteLine(line);
                    }

                    // Console.WriteLine("Dateiname: " + newfilename + Environment.NewLine + "Trackname: " + line); //Ausgabekontrolle
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex);
            }
        }
    }
}
A
alexpj Themenstarter:in
14 Beiträge seit 2015
vor 8 Jahren

interessant....vielen Dank dafür! Schaut irgendwie besser aus 😉

Ich hab das gleich in ein Windows Forms Projekt eingebaut. Funktioniert ebenso einwandfrei.

Um die Dateipfade aus den Listboxeintragen zu bekommen hab ich folgendes geändert:


string path = (listBox1.SelectedItem.ToString().Substring(0, listBox1.SelectedItem.ToString().LastIndexOf(@"\") + 1));
....             
using (StreamReader r = (new StreamReader(listBox1.SelectedItem.ToString())))

so landen die konvertierten Ergebnisse im gleichen Pfad wie die Quelldateien

Abschlussfrage:

catch (Exception ex)
                      {
                          Console.WriteLine(ex);
                      }

Muss die Exception ausgegeben werden?

2.207 Beiträge seit 2011
vor 8 Jahren

Muss die Exception ausgegeben werden?

Du kannst mit der Exception machen, was du magst 😉 Nur schlucken solltest du sie nicht. Also: loggen, ausgeben, sonstwie behandeln. Nur ein leerer Catch-Block wäre die schlechteste Alternative 😉

Gruss

Coffeebean