Feedback

C# - Zeile in Datei finden

Veröffentlicht von am 06.08.2014
(0 Bewertungen)
Methode um eine bestimmte Zeile mit bestimmten String-Inhalt zu finden.

Beispiel:
int zeile_sqlserver = findeZeile("-sqlserver=")

public static int findeZeile(String settings_key)
        {
            int position = 0;

            try
            {
                int counter = 0;
                String temp = "";
                bool found = false;

                //Datei laden und schritt für Schritt lesen wo der String sich befindet
                StreamReader Reader1 = new StreamReader(EinstellungsSetPfad);
                StreamReader Reader2 = new StreamReader(EinstellungsSetPfad);

                while (Reader1.ReadLine() != null && found != true)
                {
                    temp = Reader2.ReadLine();

                    if (temp.Contains(settings_key))
                    {
                        position = counter;
                        found = true;
                    }
                    else
                    {
                        counter++;
                    }
                }
                //

                return position + 1;
            }
            catch (Exception ex)
            {
                return 0;
            }
        }
Abgelegt unter file, zeile, datei, finden.

1 Kommentare zum Snippet

Koopakiller schrieb am 06.08.2014:
Ein paar Anmerkungen/Fragen zu deinem Snippet:
1.) Warum 2 Streamreader? Einer reicht.
2.) Es ist besser eine Exception weiter zu leiten. Einfach 0 zurück zu geben verbirgt nur den wahren Fehler und du bekomsmt ihn vielleicht nie mit.
3.) Irgend etwas deutsch zu benennen finde ich sowieso seltsam, da es aus der Reihe tanzt. Noch seltsamer finde ich es eigene Dinge mal de mal en zu benennen.
4.) Ich fände es besser eine Art LINQ-Methode dafür zu schreiben. Denn eine Datei komplett neu einzulesen, nur um einen Index zu finden ist i.d.R. sinnlos leistungsfressend. Mit einer Methode, die ein IEnumerable<T> durchsucht könntest du die Datei mit File.ReadLines lesen und sobald ein Vorkommen gefunden wurde den Index zurück geben. Die weiteren Zeilen würden hier nicht mehr gelesen werden. So könnte die Methode aussehen:
public static int FindFirstMatch(this IEnumerable<string> source, string settings_key)
{
int lnCount = -1;
foreach (var ln in source)
{
++lnCount;
if (ln.Contains(settings_key))
break;
}
return lnCount;
}
 

Logge dich ein, um hier zu kommentieren!